|
|
@@ -137,13 +137,25 @@ static s32 _process_unheath(void){
|
|
|
static void _process_user_request(s32 health){
|
|
|
if (_bms_state.user_request & USER_REQUEST_PENDING){
|
|
|
if ((health & Health_charger_Fault) == 0){
|
|
|
- charger_open(!!(_bms_state.user_request & USER_REQUEST_CHARGER));
|
|
|
+ if (_bms_state.user_request & USER_REQUEST_CHARGER_ON){
|
|
|
+ charger_open(1);
|
|
|
+ }else if (_bms_state.user_request & USER_REQUEST_CHARGER_OFF){
|
|
|
+ charger_open(0);
|
|
|
+ }
|
|
|
}
|
|
|
if ((health & Health_Discharger_Failt) == 0){
|
|
|
- discharger_open(!!(_bms_state.user_request & USER_REQUEST_DISCHARGER));
|
|
|
+ if (_bms_state.user_request & USER_REQUEST_DISCHARGER_ON){
|
|
|
+ discharger_open(1);
|
|
|
+ }else if (_bms_state.user_request & USER_REQUEST_DISCHARGER_OFF){
|
|
|
+ discharger_open(0);
|
|
|
+ }
|
|
|
}
|
|
|
if ((health & Health_aux_Fault) == 0){
|
|
|
- AUX_VOL_OPEN(!!(_bms_state.user_request & USER_REQUEST_SMALLCURRENT));
|
|
|
+ if (_bms_state.user_request & USER_REQUEST_SMALLCURRENT_ON){
|
|
|
+ AUX_VOL_OPEN(1);
|
|
|
+ }else if (_bms_state.user_request & USER_REQUEST_SMALLCURRENT_OFF){
|
|
|
+ AUX_VOL_OPEN(0);
|
|
|
+ }
|
|
|
}
|
|
|
_bms_state.user_request &= ~USER_REQUEST_PENDING;//clear user request pending
|
|
|
}
|
|
|
@@ -234,7 +246,7 @@ static int _can_close_mos_no_hall(void){
|
|
|
}
|
|
|
|
|
|
static void _process_iostate_changed(void){
|
|
|
- if (!(io_state()->hall_detect) && _can_close_mos_no_hall()){
|
|
|
+ if (!(io_state()->hall_detect) && shark_uart_timeout() && _can_close_mos_no_hall()){
|
|
|
if (ml5238_is_discharging()){
|
|
|
discharger_open(0);
|
|
|
}
|
|
|
@@ -296,9 +308,9 @@ static void _check_mos_stat(void){
|
|
|
}
|
|
|
uint32_t request = USER_REQUEST_PENDING;
|
|
|
if (!dmos) {
|
|
|
- request |= USER_REQUEST_DISCHARGER;
|
|
|
+ request |= USER_REQUEST_DISCHARGER_ON;
|
|
|
}else {
|
|
|
- request |= USER_REQUEST_CHARGER;
|
|
|
+ request |= USER_REQUEST_CHARGER_ON;
|
|
|
}
|
|
|
_bms_state.user_request = request;
|
|
|
}
|