90 lines
3.2 KiB
C
90 lines
3.2 KiB
C
|
#ifndef _husb238_h_
|
||
|
#define _husb238_h_
|
||
|
|
||
|
#include "driver/i2c.h"
|
||
|
|
||
|
#define HUSB238TAG "USBPD"
|
||
|
|
||
|
/** Default HUSB238 I2C address. */
|
||
|
#define HUSB238_I2CADDR_DEFAULT 0x08 ///< I2C address
|
||
|
|
||
|
#define HUSB238_PD_STATUS0 0x00 ///< Register value for PD_STATUS0 in HUSB238
|
||
|
#define HUSB238_PD_STATUS1 0x01 ///< Register value for PD_STATUS1 in HUSB238
|
||
|
#define HUSB238_SRC_PDO_5V 0x02 ///< Register value for SRC_PDO_5V in HUSB238
|
||
|
#define HUSB238_SRC_PDO_9V 0x03 ///< Register value for SRC_PDO_9V in HUSB238
|
||
|
#define HUSB238_SRC_PDO_12V 0x04 ///< Register value for SRC_PDO_12V in HUSB238
|
||
|
#define HUSB238_SRC_PDO_15V 0x05 ///< Register value for SRC_PDO_15V in HUSB238
|
||
|
#define HUSB238_SRC_PDO_18V 0x06 ///< Register value for SRC_PDO_18V in HUSB238
|
||
|
#define HUSB238_SRC_PDO_20V 0x07 ///< Register value for SRC_PDO_20V in HUSB238
|
||
|
#define HUSB238_SRC_PDO 0x08 ///< Register value for SRC_PDO in HUSB238
|
||
|
#define HUSB238_GO_COMMAND 0x09 ///< Register value for GO_COMMAND in HUSB238
|
||
|
|
||
|
/** Available currents per PD output */
|
||
|
typedef enum _husb_currents {
|
||
|
CURRENT_0_5_A = 0b0000, ///< 0.5A
|
||
|
CURRENT_0_7_A = 0b0001, ///< 0.7A
|
||
|
CURRENT_1_0_A = 0b0010, ///< 1.0A
|
||
|
CURRENT_1_25_A = 0b0011, ///< 1.25A
|
||
|
CURRENT_1_5_A = 0b0100, ///< 1.5A
|
||
|
CURRENT_1_75_A = 0b0101, ///< 1.75A
|
||
|
CURRENT_2_0_A = 0b0110, ///< 2.0A
|
||
|
CURRENT_2_25_A = 0b0111, ///< 2.25A
|
||
|
CURRENT_2_50_A = 0b1000, ///< 2.50A
|
||
|
CURRENT_2_75_A = 0b1001, ///< 2.75A
|
||
|
CURRENT_3_0_A = 0b1010, ///< 3.0A
|
||
|
CURRENT_3_25_A = 0b1011, ///< 3.25A
|
||
|
CURRENT_3_5_A = 0b1100, ///< 3.5A
|
||
|
CURRENT_4_0_A = 0b1101, ///< 4.0A
|
||
|
CURRENT_4_5_A = 0b1110, ///< 4.5A
|
||
|
CURRENT_5_0_A = 0b1111 ///< 5.0A
|
||
|
} HUSB238_CurrentSetting;
|
||
|
|
||
|
/** Available voltages for PD output */
|
||
|
typedef enum _husb_voltages {
|
||
|
UNATTACHED = 0b0000, ///< Unattached
|
||
|
PD_5V = 0b0001, ///< 5V
|
||
|
PD_9V = 0b0010, ///< 9V
|
||
|
PD_12V = 0b0011, ///< 12V
|
||
|
PD_15V = 0b0100, ///< 15V
|
||
|
PD_18V = 0b0101, ///< 18V
|
||
|
PD_20V = 0b0110 ///< 20V
|
||
|
} HUSB238_VoltageSetting;
|
||
|
|
||
|
/** Responses to PD query */
|
||
|
typedef enum _husb_response_codes {
|
||
|
NO_RESPONSE = 0b000, ///< No response
|
||
|
SUCCESS = 0b001, ///< Success
|
||
|
INVALID_CMD_OR_ARG = 0b011, ///< Invalid command or argument
|
||
|
CMD_NOT_SUPPORTED = 0b100, ///< Command not supported
|
||
|
TRANSACTION_FAIL_NO_GOOD_CRC =
|
||
|
0b101 ///< Transaction fail. No GoodCRC is received after sending
|
||
|
} HUSB238_ResponseCodes;
|
||
|
|
||
|
/** Default 5V output current */
|
||
|
typedef enum _husb_5v_current_contract {
|
||
|
CURRENT5V_DEFAULT = 0b00, ///< Default current
|
||
|
CURRENT5V_1_5_A = 0b01, ///< 1.5A
|
||
|
CURRENT5V_2_4_A = 0b10, ///< 2.4A
|
||
|
CURRENT5V_3_A = 0b11 ///< 3A
|
||
|
} HUSB238_5VCurrentContract;
|
||
|
|
||
|
/** What voltage is selected for PD sink */
|
||
|
typedef enum _husb_pd_selection {
|
||
|
PD_NOT_SELECTED = 0b0000, ///< Not selected
|
||
|
PD_SRC_5V = 0b0001, ///< SRC_PDO_5V
|
||
|
PD_SRC_9V = 0b0010, ///< SRC_PDO_9V
|
||
|
PD_SRC_12V = 0b0011, ///< SRC_PDO_12V
|
||
|
PD_SRC_15V = 0b1000, ///< SRC_PDO_15V
|
||
|
PD_SRC_18V = 0b1001, ///< SRC_PDO_18V
|
||
|
PD_SRC_20V = 0b1010 ///< SRC_PDO_20V
|
||
|
} HUSB238_PDSelection;
|
||
|
|
||
|
|
||
|
void husb238_init(int i2c_master_port);
|
||
|
void husb238_requestVoltage(int i2c_master_port,HUSB238_PDSelection voltage);
|
||
|
float husb238_getMaxCurrent(int i2c_master_port,HUSB238_PDSelection voltage);
|
||
|
|
||
|
|
||
|
void init_i2c();
|
||
|
|
||
|
#endif //_husb238_h_
|