


#ifndef SOFT_TATTU_H
#define SOFT_TATTU_H

#include "stdint.h"
#include "stdbool.h"
#include "common.h"
///////////////////


/*
序列    字段           说明                                             长度(bytes)      备注
1       厂商编号       类型为 short                                      2                *********
2       电池型号编码   类型为 short                                      2                1
3       电池电压       类型为 unsigned short，单位（mv）                  2
4       充放电电流     类型为 short，单位（10mA）注：正数充电，负数放电     2               10mA
5       电池温度       类型为 short,单位（0.1℃）                         2                0.1C
6       电量百分比     类型为 unsigned short, 单位（%）                   2
7       循环计数       类型为 unsigned short 单位（次数）                 2
8       健康状况       类型为 short，单位（%）                            2                200-CycleCount/200
9       电池 1 电压    类型为 unsigned short，单位（mv）                  2
10      电池 2 电压    类型为 unsigned short，单位（mv）                  2
11      电池 3 电压    类型为 unsigned short，单位（mv）                  2
12      电池 4 电压    类型为 unsigned short，单位（mv）                  2
13      电池 5 电压    类型为 unsigned short，单位（mv）                  2
14      电池 6 电压    类型为 unsigned short，单位（mv）                  2
15      电池 7 电压    类型为 unsigned short，单位（mv）                  2
16      电池 8 电压    类型为 unsigned short，单位（mv）                  2
17      电池 9 电压    类型为 unsigned short，单位（mv）                  2
18      电池 10 电压   类型为 unsigned short，单位（mv）                  2
19      电池 11 电压   类型为 unsigned short，单位（mv）                  2
20      电池 12 电压   类型为 unsigned short，单位（mv）                  2
//添加了两节电池电压
//21      电池 13 电压   类型为 unsigned short，单位（mv）                  2
//22      电池 14 电压   类型为 unsigned short，单位（mv）                  2
21      电池设计容量   类型为 unsigned short，单位（mAh）                 2                0
22      电池剩余容量   类型为 unsigned short，单位（mAh）                 2                0
23/4    错误信息       Uint32                                            4                每位表示一种错误类型的状态
//傻逼格式又添加了一个电池序列号
25~32 电池序列号 类型为 char 16
*/

/*
错误信息列表 只关心不能解锁的情况 0x0000 0e02
Bit ID description Note
Bit0 电池温度过低   1---表示错误发生
Bit1 电池过温       0---表示没有错误
Bit2 充电过流
Bit3 放电过流
Bit4 总电压欠压
Bit5 总电压过压
Bit6 单节压差过大
Bit7 单节电压过压
Bit8 单节电压欠压
Bit9 充电短路
Bit10 放电短路
Bit11 电池剩余容量过低
Bit12 非原装充电器充电
Bit13….Bit31 保留
注： 所有的数据是小端
*/

#define TATTU_MAXLEN 200
#pragma pack(1)
typedef struct 
{
    unsigned char tail_tranid:5;
    unsigned char tail_toggle:1;
    unsigned char tail_end   :1;
    unsigned char tail_start :1;
}_TAIL_BYTE;
#pragma pack()

#pragma pack(1)
typedef struct
{
    //unsigned short def_info[26];  //tattu
    unsigned short tattu_company;
    unsigned short tattu_type;
    unsigned short tattu_volt;
    short tattu_cur;
    unsigned short tattu_temp;
    unsigned short tattu_perc;
    unsigned short tattu_cycle;
    unsigned short tattu_health;
    unsigned short tattu_v1;
    unsigned short tattu_v2;
    unsigned short tattu_v3;
    unsigned short tattu_v4;
    unsigned short tattu_v5;
    unsigned short tattu_v6;
    unsigned short tattu_v7;
    unsigned short tattu_v8;
    unsigned short tattu_v9;
    unsigned short tattu_v10;
    unsigned short tattu_v11;
    unsigned short tattu_v12;
    unsigned short tattu_v13;
    unsigned short tattu_v14;
    unsigned short tattu_descapa;
    unsigned short tattu_recapa;
    unsigned int tattu_err;
    unsigned char tuattu_id[16];
    
    unsigned short tattu_cnum;  //tattu
}_TATTU_INFO;
#pragma pack()
//extern _TATTU_INFO ttu_inf;

#pragma pack(1)
typedef struct {
    uint32_t deviceCanID;

    unsigned char Tattu_recv_buf[TATTU_MAXLEN];

    Connect_check Tattu_Link;
    
    short Tattu_recv_index;

    //获取到起始标志位
    bool Tattu_get_s;

    _TAIL_BYTE ttu_tailbyte;
    
    _TATTU_INFO ttu_inf;

}_TATTU_DEVICE;
#pragma pack()
extern _TATTU_DEVICE tattu_device1, tattu_device2;


extern comp_status tattu_link_status;
void TattuCanRecvHookFunction(uint32_t ttuCanID, uint8_t data[], uint8_t len);

extern uint16_t CCITT_CRC16;
void CCITT_CRC16Init(uint8_t const *bytes, uint16_t len);
void CCITT_CRC_ARRAY(uint8_t const * bytes, uint16_t len);

#endif
