|
|
@@ -49,6 +49,9 @@ static int8_t Get_Check_Sum_1(uint16_t*value, const uint8_t*data,uint16_t size)
|
|
|
|
|
|
void shark_battery_clear(SUB_BMS_INFO *info)
|
|
|
{
|
|
|
+ info->update_mask = 0xFF;
|
|
|
+ info->sub_bms_cmd.operate = OP_READ_INFO;
|
|
|
+
|
|
|
memset(&info->packet_common, 0x00, sizeof(info->packet_common));
|
|
|
memset(&info->bat_dev_info, 0x00, sizeof(info->bat_dev_info));
|
|
|
memset(&info->bat_times, 0x00, sizeof(info->bat_times));
|
|
|
@@ -118,18 +121,22 @@ static int8_t Handle_Sub_BMS_CMD_1(SUB_BMS_INFO *info, const u8 *buff, u8 length
|
|
|
case OP_READ_INFO:
|
|
|
memcpy(&info->bat_dev_info, buff + count,sizeof(info->bat_dev_info));
|
|
|
count += sizeof(info->bat_dev_info);
|
|
|
+ info->update_mask &= ~SHARK_BATT_INFO_VERTION;
|
|
|
break;
|
|
|
case OP_ALARM_TIMES:
|
|
|
memcpy(&info->bat_times, buff + count, sizeof(info->bat_times));
|
|
|
count += sizeof(info->bat_times);
|
|
|
+ info->update_mask &= ~SHARK_BATT_INFO_TIMES;
|
|
|
break;
|
|
|
case OP_CELL_VOL:
|
|
|
memcpy(&info->cell_vol, buff + count, sizeof(info->cell_vol));
|
|
|
count += sizeof(info->cell_vol);
|
|
|
+ info->update_mask &= ~SHARK_BATT_INFO_CELL_VOL;
|
|
|
break;
|
|
|
case OP_TEMP_OTHER:
|
|
|
memcpy(&info->temp_other, buff + count, sizeof(info->temp_other));
|
|
|
count += sizeof(info->temp_other);
|
|
|
+ info->update_mask &= ~SHARK_BATT_INFO_TEMP;
|
|
|
break;
|
|
|
|
|
|
|
|
|
@@ -150,26 +157,29 @@ static int8_t Handle_Sub_BMS_CMD_1(SUB_BMS_INFO *info, const u8 *buff, u8 length
|
|
|
if(((info->packet_common.operate_result&0xF0)>>4) == info->sub_bms_cmd.operate)
|
|
|
{
|
|
|
memset(&info->sub_bms_cmd,0x00,sizeof(info->sub_bms_cmd));
|
|
|
- info->send_times++;
|
|
|
|
|
|
- if(info->send_times > 90)
|
|
|
- {
|
|
|
- info->sub_bms_cmd.operate = OP_ALARM_TIMES;
|
|
|
- info->send_times = 0;
|
|
|
- }
|
|
|
- else if(info->send_times > 60)
|
|
|
- {
|
|
|
- info->sub_bms_cmd.operate = OP_CELL_VOL;
|
|
|
-
|
|
|
- }
|
|
|
- else if(info->send_times > 30)
|
|
|
- {
|
|
|
- info->sub_bms_cmd.operate = OP_TEMP_OTHER;
|
|
|
-
|
|
|
- }
|
|
|
- else
|
|
|
+ println("pending: %x", info->update_mask);
|
|
|
+
|
|
|
+ if (info->update_mask != 0) {
|
|
|
+ if ((info->update_mask & SHARK_BATT_INFO_VERTION) != 0) {
|
|
|
+ info->sub_bms_cmd.operate = OP_READ_INFO;
|
|
|
+ } else if ((info->update_mask & SHARK_BATT_INFO_TIMES) != 0) {
|
|
|
+ info->sub_bms_cmd.operate = OP_ALARM_TIMES;
|
|
|
+ } else if ((info->update_mask & SHARK_BATT_INFO_CELL_VOL) != 0) {
|
|
|
+ info->sub_bms_cmd.operate = OP_CELL_VOL;
|
|
|
+ } else if ((info->update_mask & SHARK_BATT_INFO_TEMP) != 0) {
|
|
|
+ info->sub_bms_cmd.operate = OP_TEMP_OTHER;
|
|
|
+ } else {
|
|
|
+ info->sub_bms_cmd.operate = OP_NONE;
|
|
|
+ info->update_mask = 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ info->tx_pending = shark_true;
|
|
|
+ } else {
|
|
|
info->sub_bms_cmd.operate = OP_NONE;
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
return 1;
|
|
|
|
|
|
}while(0);
|
|
|
@@ -353,7 +363,7 @@ static shark_battery_exit_t shark_battery_is_normal_raw(SUB_BMS_INFO *info, shar
|
|
|
work_status = info->packet_common.work_status;
|
|
|
work_status &= ~(ST_CHRG_CUR | ST_DISCHRG_CUR | ST_OVRDISCHRG_CUR | ST_SMALL_CURRENT_OVER);
|
|
|
|
|
|
- if (IS_CHARGER_ON()) {
|
|
|
+ if (shark_charger_enabled) {
|
|
|
work_status &= ~(ST_OVRDISCHRG_VOL | ST_PDOWN | ST_UDR_TEMPE_DISCHRG | ST_OVR_TEMPE_DISCHRG);
|
|
|
} else {
|
|
|
work_status &= ~(ST_OVRCHRG_VOL | ST_OVR_TEMPE_CHRG | ST_UDR_TEMPE_CHRG);
|