battery.h 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. #include <stdint.h>
  2. #include <stdbool.h>
  3. #include "src/config.h"
  4. #ifndef BATTERY_H
  5. #define BATTERY_H
  6. //Battery states read by Pi
  7. typedef enum{
  8. STATE_EMPTY= 0x01,
  9. STATE_BATTERY_DETECTED= 0x02,
  10. STATE_WAITING_FOR_LIMITS= 0x03,
  11. STATE_MEASUREMENT_IN_PROGRESS= 0x04,
  12. STATE_MEASUREMENT_DONE= 0x04,
  13. STATE_OVERHEATING= 0x05,
  14. } BatteryState;
  15. //Battery Discharge Safety Check
  16. typedef enum __attribute((packed))__{
  17. SLOT_STATE_OK= 0x00,
  18. SLOT_STATE_SOV= 0x01,
  19. SLOT_ERR_HOV= (0x02 | 0x80),
  20. SLOT_ERR_OVERTEMPERATURE= (0x03 | 0x80), // first bit indicates complete error
  21. // Control error states
  22. SLOT_WARN_LOWER_DAC_NOT_POSSIBLE=0x10,
  23. SLOT_WARN_HIGHER_DAC_NOT_POSSIBLE=0x11,
  24. SLOT_WARN_DAC_INVALID_VALUE=0x12,
  25. SLOT_WARN_LOWER_PWM_NOT_POSSIBLE=0x13,
  26. SLOT_WARN_HIGHER_PWM_NOT_POSSIBLE=0x14,
  27. // I2C Slave Error states
  28. SLOT_ERR_NO_DAC = (0x20 | 0x80),
  29. SLOT_ERR_NO_ADC1 = (0x21 | 0x80),
  30. SLOT_ERR_NO_ADC2 = (0x22 | 0x80),
  31. SLOT_ERR_NO_ADC3 = (0x23 | 0x80),
  32. SLOT_ERR_NO_ADC4 = (0x24 | 0x80),
  33. SLOT_ERR_CONFIGBYTE = (0x25 | 0x80),
  34. SLOT_ERR_DAC_WRITE_FAILED= (0x26 | 0x80)
  35. } SlotState;
  36. typedef struct __attribute__((packed)){
  37. uint16_t voltage;
  38. int16_t current;
  39. uint16_t temperature;
  40. SlotState slot_state;
  41. }BatteryMeasurement;
  42. typedef struct __attribute__((packed)){
  43. uint16_t min_voltage;
  44. uint16_t max_voltage;
  45. uint8_t cut_off_current;
  46. uint16_t capacitance;
  47. uint8_t charge_fraction;
  48. } BatteryLimits;
  49. typedef struct{
  50. uint8_t slot_id;
  51. int16_t charge_discharge;
  52. BatteryState battery_state;
  53. BatteryMeasurement battery_measurement;
  54. BatteryLimits battery_limits;
  55. bool batteryLimitRecieved;
  56. } BatteryInfo;
  57. extern BatteryInfo battery_data[NUM_SLOTS];
  58. void Battery_Init();
  59. void Battery_ReadState(uint8_t slot_id);
  60. #endif