#ifndef I2C_TARGET_H #define I2C_TARGET_H #include #include "battery.h" // I2C command codes #define CMD_GET_BATTERY_STATUS 0x01 // Request battery state #define CMD_GET_BATTERY_DATA 0x02 // Request battery data #define CMD_SET_BATTERY_LIMIT 0x03 // SET min/max voltage, cutoff current limits //Maximum packet sizes #define I2C_TX_MAX_PACKET_SIZE_PI (16) #define I2C_RX_MAX_PACKET_SIZE_PI (16) //Flag for READ and WRITE extern volatile bool piRxComplete; extern volatile bool piTxComplete; extern uint8_t piTxPacket[I2C_TX_MAX_PACKET_SIZE_PI]; extern uint8_t piRxPacket[I2C_RX_MAX_PACKET_SIZE_PI]; /*Counters for Tx and Rx length and bytes sent*/ extern uint32_t piTxLen, piTxCount; extern uint32_t piRxLen, piRxCount; //Structure for Battery Data Message (GET battery data) typedef struct{ uint8_t slot_id; uint16_t voltage; uint16_t current; uint16_t temperature; } BatteryData; //SET Battery Limit typedef struct{ uint8_t slot_id; uint16_t min_voltage; uint16_t max_voltage; uint16_t cut_off_current; uint16_t capacitance; uint16_t charge_fraction; } BatteryLimitMsg; //void I2C_Init(); void Battery_ReadState(uint8_t slot_id); #endif