123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212 |
- #ifndef SOFT_OKCELL_H
- #define SOFT_OKCELL_H
- #include "stdint.h"
- #include "stdbool.h"
- #include "common.h"
- ///////////////////
- /*
- 序号 内容 字段 说明
- D0.1 电池总电压 N[0]-N[1] 单位(mv)
- D0.2 充放电电流 N[2]-N[3] 单位(10mA)正数充电,负数放电
- D0.3 电池温度 N[4]-N[5] 单位(0.1℃)
- D0.4 相对充电状态 N[6]-N[7] 单位(%)
- D0.5 绝对充电状态 N[8]-N[9] 单位(%)
- D0.6 电池组状态 N[10]-N[11] N[10] : 飞控对接异常代码
- 0: 无异常
- 1: 电池超温
- 2: 电池组严重失衡
- 3: 电池组单体电压异常
- 4: 电池组严重过流
- 5: 电池组 SOH 值低
- N[11]: 电池内部异常代码
- Bit6:低压充电提醒 0:无效 1:充电提醒
- Bit5:失衡报警 0:无效 1:失衡
- Bit4:充电过压 0:无效 1:过压
- Bit3:充电过流 0:无效 1:过流
- Bit2:充电超温 0:无效 1:过温
- Bit1:电池过放 0:无效 1:过放
- D0.7 电池串数 N[12]-N[13] 单位(个)
- D0.8 电池1电压 N[14]-N[15] 单位(mv)
- D0.9 电池2电压 N[16]-N[17] 单位(mv)
- D0.10 电池3电压 N[18]-N[19] 单位(mv)
- D0.11 电池4电压 N[20]-N[21] 单位(mv)
- D0.12 电池5电压 N[22]-N[23] 单位(mv)
- D0.13 电池6电压 N[24]-N[25] 单位(mv)
- D0.14 电池7电压 N[26]-N[27] 单位(mv)
- D0.15 电池8电压 N[28]-N[29] 单位(mv)
- D0.16 电池9电压 N[30]-N[31] 单位(mv)
- D0.17 电池10电压 N[32]-N[33] 单位(mv)
- D0.18 电池11电压 N[34]-N[35] 单位(mv)
- D0.19 电池12电压 N[36]-N[37] 单位(mv)
- D0.20 电池13电压 N[36]-N[37] 单位(mv)
- D0.21 电池14电压 N[36]-N[37] 单位(mv)
- D0.22 电池15电压 N[36]-N[37] 单位(mv)
- …………………………………………………………
- 根据电池串数不同,负载字节数不同
- */
- #pragma pack(1)
- typedef struct
- {
- uint16_t cell_d0[33]; //13s字节到20,扩展到15s。
- }_CELL_D0;
- #pragma pack()
- #pragma pack(1)
- typedef struct
- {
- uint16_t cell_d1[3];
- }_CELL_D1;
- #pragma pack()
- #pragma pack(1)
- typedef struct
- {
- uint16_t cell_d2[2];
- }_CELL_D2;
- #pragma pack()
- #pragma pack(1)
- typedef struct
- {
- uint16_t cell_d3[9];
- }_CELL_D3;
- #pragma pack()
- #pragma pack(1)
- typedef struct
- {
- uint16_t cell_d4[4];
- }_CELL_D4;
- #pragma pack()
- #pragma pack(1)
- typedef struct
- {
- uint8_t cell_p2[4];
- }_CELL_P2;
- #pragma pack()
- #pragma pack(1)
- typedef struct
- {
- uint8_t cell_p3[12];
- }_CELL_P3;
- #pragma pack()
- #pragma pack(1)
- typedef struct
- {
- uint32_t cell_CanID;
- _CELL_D0 cell_D0;
- _CELL_D1 cell_D1;
- _CELL_D2 cell_D2;
- _CELL_D3 cell_D3;
- _CELL_D4 cell_D4;
- _CELL_P2 cell_P2;
- _CELL_P3 cell_P3;
- }_CELL_INF;
- #pragma pack()
- #define OKCELL_MAXLEN 200
- /*
- 正方电池设备信息
- */
- #pragma pack(1)
- typedef struct {
- uint32_t deviceCanID;
- unsigned char Okcell_recv_buf[OKCELL_MAXLEN];
- short Okcell_recv_index;
-
- //获取到起始标志位
- bool Okcell_get_s;
-
- Connect_check Okcell_Link;
-
-
- //获取电池编号
- bool get_cellNumber;
- //获取电池SHA1加密文
- bool get_cellEncryption;
- uint32_t get_cellEncryption_counts;
- //电池波特率是否锁定
- bool cell_bps_lock_success;
- //由于锁定波特率缺少反馈应答,5s内收到多于10包正确的数据则认为波特率锁定成功。
- short recv_celldata_counts;
- uint32_t recv_celldata_time;
-
- _CELL_INF okcell_inf;
- }_OKCELL_DEVICE;
- extern uint8_t group_num;
- #pragma pack()
- extern _OKCELL_DEVICE okcell_device1, okcell_device2;
- extern unsigned char okcell_sha1_out[20];
- #define CAN_OKCELL_SEND_ID (0x15350000)
- #pragma pack(1)
- struct OkCell_P80{
- char ok_s[4];
- char ok_cmd[2];
- char ok_len;
- char ok_flag;
- char ok_data;
- char ok_crc[2];
- char ok_e[3];
- };
- #pragma pack()
- extern struct OkCell_P80 okcell_p80;
- #pragma pack(1)
- struct OkCell_P82{
- char ok_s[4];
- char ok_cmd[2];
- char ok_len;
- char ok_flag;
- char ok_data[4];
- char ok_crc[2];
- char ok_e[3];
- };
- #pragma pack()
- extern struct OkCell_P82 okcell_p82;
- #pragma pack(1)
- struct OkCell_P83{
- char ok_s[4];
- char ok_cmd[2];
- char ok_len;
- char ok_flag;
- char ok_crc[2];
- char ok_e[3];
- };
- #pragma pack()
- extern struct OkCell_P83 okcell_p83;
- void OkcellCanRecvHookFunction(uint32_t cellCanID, uint8_t* data, uint8_t len);
- void send_msg_to_okcell(void);
- #endif
|