|
|
@@ -517,19 +517,10 @@ shark_battery_exit_t shark_battery_is_normal(SUB_BMS_INFO *info)
|
|
|
return info->exit_code;
|
|
|
}
|
|
|
|
|
|
-shark_bool shark_battery_is_power_on(SUB_BMS_INFO *info)
|
|
|
-{
|
|
|
- if ((info->packet_common.bms_status & BMS_POWER_FULL) != BMS_POWER_FULL) {
|
|
|
- return shark_false;
|
|
|
- }
|
|
|
-
|
|
|
- return shark_true;
|
|
|
-}
|
|
|
-
|
|
|
shark_bool shark_battery_is_normal_power_on(SUB_BMS_INFO *info)
|
|
|
{
|
|
|
if (shark_battery_is_normal(info) == SHARK_BATT_EXIT_SUCCESS) {
|
|
|
- if (shark_battery_is_power_on(info)) {
|
|
|
+ if (shark_battery_is_power_full(info)) {
|
|
|
return shark_true;
|
|
|
}
|
|
|
|
|
|
@@ -601,57 +592,6 @@ int8_t Operate_Sub_BMS_1_CD(uint8_t on)
|
|
|
|
|
|
}
|
|
|
|
|
|
-int8_t Operate_Sub_BMS_PING(uint32_t delay)
|
|
|
-{
|
|
|
- uint64_t time = shark_get_time() + delay;
|
|
|
- uint8_t mask = 0;
|
|
|
-
|
|
|
- while (sub_bms_info_1.conn_state == SUB_BMS_CONT_HV485 && RS485_busy_1) {
|
|
|
- if (time < shark_get_time_safe()) {
|
|
|
- println("bat1 busy");
|
|
|
- return 0;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- while (sub_bms_info_2.conn_state == SUB_BMS_CONT_HV485 && RS485_busy_2) {
|
|
|
- if (time < shark_get_time_safe()) {
|
|
|
- println("bat2 busy");
|
|
|
- return 0;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- sub_bms_info_1.conn_state = SUB_BMS_DISC_HV485;
|
|
|
- sub_bms_info_1.sub_bms_cmd.operate = OP_READ_INFO;
|
|
|
- g_event &= ~RS485_RECEIVE_END_EVENT;
|
|
|
-
|
|
|
- sub_bms_info_2.conn_state = SUB_BMS_DISC_HV485;
|
|
|
- sub_bms_info_2.sub_bms_cmd.operate = OP_READ_INFO;
|
|
|
- g_event &= ~RS485_RECEIVE_END_EVENT;
|
|
|
-
|
|
|
- Send_Sub_BMS_CMD_1();
|
|
|
- Send_Sub_BMS_CMD_2();
|
|
|
-
|
|
|
- while (time > shark_get_time_safe() && mask != 3) {
|
|
|
- if(g_event & RS485_RECEIVE_END_EVENT) {
|
|
|
- g_event &= ~RS485_RECEIVE_END_EVENT;
|
|
|
- Handle_RS485_1_Data();
|
|
|
- mask |= 1;
|
|
|
- println("mask1: %d", mask);
|
|
|
- }
|
|
|
-
|
|
|
- if (g_event & RS485_2_RECEIVE_END_EVENT) {
|
|
|
- g_event &= ~RS485_2_RECEIVE_END_EVENT;
|
|
|
- Handle_RS485_2_Data();
|
|
|
- mask |= 2;
|
|
|
- println("mask2: %d", mask);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- println("mask: %d", mask);
|
|
|
-
|
|
|
- return 1;
|
|
|
-}
|
|
|
-
|
|
|
static u8 shark_battery_get_power_param(shark_battery_power_t power)
|
|
|
{
|
|
|
switch (power) {
|
|
|
@@ -672,36 +612,42 @@ static void shark_battery_set_power_param(SUB_BMS_INFO *info, shark_battery_powe
|
|
|
info->sub_bms_cmd.param = shark_battery_get_power_param(power);
|
|
|
}
|
|
|
|
|
|
-static shark_bool shark_battery_check_power(SUB_BMS_INFO *info, shark_battery_power_t power)
|
|
|
+shark_battery_power_t shark_battery_get_power(SUB_BMS_INFO *info)
|
|
|
{
|
|
|
if (info->conn_state != SUB_BMS_CONT_HV485) {
|
|
|
- return shark_false;
|
|
|
+ return SHARK_BATT_POWER_FAULT;
|
|
|
}
|
|
|
|
|
|
+ if ((info->packet_common.bms_status & BMS_POWER_ALL) == BMS_POWER_ALL) {
|
|
|
+ return SHARK_BATT_POWER_ALL;
|
|
|
+ }
|
|
|
+
|
|
|
+ if ((info->packet_common.bms_status & BMS_POWER_FULL) == BMS_POWER_FULL) {
|
|
|
+ return SHARK_BATT_POWER_FULL;
|
|
|
+ }
|
|
|
+
|
|
|
+ if ((info->packet_common.bms_status & BMS_POWER_SMALL) == BMS_POWER_SMALL) {
|
|
|
+ return SHARK_BATT_POWER_SMALL;
|
|
|
+ }
|
|
|
+
|
|
|
+ return SHARK_BATT_POWER_OFF;
|
|
|
+}
|
|
|
+
|
|
|
+shark_bool shark_battery_check_power(SUB_BMS_INFO *info, shark_battery_power_t power)
|
|
|
+{
|
|
|
switch (power) {
|
|
|
case SHARK_BATT_POWER_SMALL:
|
|
|
- if ((info->packet_common.bms_status & BMS_POWER_ALL) != BMS_POWER_SMALL) {
|
|
|
- return shark_false;
|
|
|
- } else {
|
|
|
- break;
|
|
|
- }
|
|
|
+ return SHARK_BOOL((info->packet_common.bms_status & BMS_POWER_SMALL) == BMS_POWER_SMALL);
|
|
|
|
|
|
case SHARK_BATT_POWER_FULL:
|
|
|
- if ((info->packet_common.bms_status & BMS_POWER_ALL) != BMS_POWER_FULL) {
|
|
|
- return shark_false;
|
|
|
- } else {
|
|
|
- break;
|
|
|
- }
|
|
|
+ return SHARK_BOOL((info->packet_common.bms_status & BMS_POWER_FULL) == BMS_POWER_FULL);
|
|
|
+
|
|
|
+ case SHARK_BATT_POWER_ALL:
|
|
|
+ return SHARK_BOOL((info->packet_common.bms_status & BMS_POWER_ALL) == BMS_POWER_ALL);
|
|
|
|
|
|
default:
|
|
|
- if ((info->packet_common.bms_status & BMS_POWER_ALL) != 0) {
|
|
|
- return shark_false;
|
|
|
- } else {
|
|
|
- break;
|
|
|
- }
|
|
|
+ return SHARK_BOOL((info->packet_common.bms_status & BMS_POWER_ALL) == 0);
|
|
|
}
|
|
|
-
|
|
|
- return shark_true;
|
|
|
}
|
|
|
|
|
|
u8 shark_battery_set_power(shark_battery_power_t power1, shark_battery_power_t power2, u8 mask)
|
|
|
@@ -765,6 +711,67 @@ u8 shark_battery_set_power(shark_battery_power_t power1, shark_battery_power_t p
|
|
|
return success;
|
|
|
}
|
|
|
|
|
|
+u8 shark_battery_detect(void)
|
|
|
+{
|
|
|
+ u64 time = shark_get_time() + 200;
|
|
|
+ u8 success = 0;
|
|
|
+ u8 times;
|
|
|
+
|
|
|
+ while (sub_bms_info_1.conn_state == SUB_BMS_CONT_HV485 && RS485_busy_1) {
|
|
|
+ if (time < shark_get_time_safe()) {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ while (sub_bms_info_2.conn_state == SUB_BMS_CONT_HV485 && RS485_busy_2) {
|
|
|
+ if (time < shark_get_time_safe()) {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ sub_bms_info_1.conn_state = SUB_BMS_DISC_HV485;
|
|
|
+ sub_bms_info_2.conn_state = SUB_BMS_DISC_HV485;
|
|
|
+
|
|
|
+ for (times = 0; times < 3; times++) {
|
|
|
+ sub_bms_info_1.sub_bms_cmd.operate = OP_READ_INFO;
|
|
|
+ g_event &= ~RS485_RECEIVE_END_EVENT;
|
|
|
+
|
|
|
+ sub_bms_info_2.sub_bms_cmd.operate = OP_READ_INFO;
|
|
|
+ g_event &= ~RS485_2_RECEIVE_END_EVENT;
|
|
|
+
|
|
|
+ Send_Sub_BMS_CMD_1();
|
|
|
+ Send_Sub_BMS_CMD_2();
|
|
|
+
|
|
|
+ time = shark_get_time() + 200;
|
|
|
+
|
|
|
+ while (time > shark_get_time_safe()) {
|
|
|
+ if(g_event & RS485_RECEIVE_END_EVENT) {
|
|
|
+ g_event &= ~RS485_RECEIVE_END_EVENT;
|
|
|
+ Handle_RS485_1_Data();
|
|
|
+
|
|
|
+ if (sub_bms_info_1.conn_state == SUB_BMS_CONT_HV485) {
|
|
|
+ success |= 1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (g_event & RS485_2_RECEIVE_END_EVENT) {
|
|
|
+ g_event &= ~RS485_2_RECEIVE_END_EVENT;
|
|
|
+ Handle_RS485_2_Data();
|
|
|
+
|
|
|
+ if (sub_bms_info_2.conn_state == SUB_BMS_CONT_HV485) {
|
|
|
+ success |= 2;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (success == 3) {
|
|
|
+ return 3;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return success;
|
|
|
+}
|
|
|
+
|
|
|
int8_t Update_Sub_BMS_1_Software(uint8_t step)
|
|
|
{
|
|
|
uint8_t rtn;
|
|
|
@@ -921,6 +928,7 @@ void shark_bms_set_vgs(shark_bms_vgs_t mask, uint8_t enable)
|
|
|
|
|
|
if (shark_bms_vgs_mask == 0) {
|
|
|
gpio_bit_set(GPIO_PORT_FL, GPIO_PIN_FL);
|
|
|
+ println("fl disabled");
|
|
|
}
|
|
|
}
|
|
|
}
|