Просмотр исходного кода

修改开关电源的Key对应的实现方式

Signed-off-by: huhui <huhui@sharkgulf.com>
huhui 5 лет назад
Родитель
Сommit
0571689705

+ 18 - 6
Application/app/bms_message.c

@@ -35,14 +35,26 @@ void process_bms_message(can_frame_t *frame, int len){
 			}else {
 				pwr_cmd_t *cmd = (pwr_cmd_t *)frame->data;
 				uint32_t user_request = USER_REQUEST_PENDING;
-				if (cmd->charger_fet){
-					user_request |= USER_REQUEST_CHARGER;
+				if (cmd->charger_mask) {
+					if (cmd->charger_fet){
+						user_request |= USER_REQUEST_CHARGER_ON;
+					}else {
+						user_request |= USER_REQUEST_CHARGER_OFF;
+					}
 				}
-				if (cmd->discharger_fet){
-					user_request |= USER_REQUEST_DISCHARGER;
+				if (cmd->discharger_mask) {
+					if (cmd->discharger_fet){
+						user_request |= USER_REQUEST_DISCHARGER_ON;
+					}else {
+						user_request |= USER_REQUEST_DISCHARGER_OFF;
+					}
 				}
-				if (cmd->small_power){
-					user_request |= USER_REQUEST_SMALLCURRENT;
+				if (cmd->small_mask) {
+					if (cmd->small_power){
+						user_request |= USER_REQUEST_SMALLCURRENT_ON;
+					}else {
+						user_request |= USER_REQUEST_SMALLCURRENT_OFF;
+					}
 				}
 				bms_state_get()->user_request = user_request;
 			}

+ 4 - 1
Application/app/protocol.h

@@ -54,7 +54,10 @@ typedef struct {
 	uint8_t discharger_fet	:1;//dis/charger mosÊÇ·ñ´ò¿ª
 	uint8_t charger_fet		:1;
 	uint8_t small_power		:1;//СµçÊÇ·ñ´ò¿ª
-	uint8_t res				:5;
+	uint8_t res				:1;
+	uint8_t discharger_mask :1;
+	uint8_t charger_mask    :1;
+	uint8_t small_mask     :1;
 }pwr_cmd_t;
 #pragma pack(pop)
 

+ 1 - 1
Application/app/sox/health.c

@@ -278,7 +278,7 @@ static uint8_t small_power_detect_count = 0;
 static shark_timer_t _aux_lock_timer = {.handler = _aux_lock_timer_handler};
 static void _aux_lock_timer_handler(shark_timer_t *t){
 	//有可能这个时候,用户发了关小电的指令
-	if (bms_state_get()->user_request & USER_REQUEST_SMALLCURRENT){
+	if (bms_state_get()->user_request & USER_REQUEST_SMALLCURRENT_ON){
 		AUX_VOL_OPEN(1);
 		if (++small_power_detect_count >= 10){
 			delay_us(1000);

+ 18 - 6
Application/app/sox/state.c

@@ -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;
 		}

+ 9 - 3
Application/app/sox/state.h

@@ -41,9 +41,15 @@ typedef struct{
 #define WORK_MODE_CALIBRATE 4   //adc校准模式
 
 #define USER_REQUEST_PENDING BIT(31) //是否有用户请求
-#define USER_REQUEST_CHARGER BIT(0)
-#define USER_REQUEST_DISCHARGER BIT(1)
-#define USER_REQUEST_SMALLCURRENT BIT(2)
+
+#define USER_REQUEST_CHARGER_ON BIT(0)
+#define USER_REQUEST_CHARGER_OFF BIT(1)
+
+#define USER_REQUEST_DISCHARGER_ON BIT(2)
+#define USER_REQUEST_DISCHARGER_OFF BIT(3)
+
+#define USER_REQUEST_SMALLCURRENT_ON BIT(4)
+#define USER_REQUEST_SMALLCURRENT_OFF BIT(5)
 
 typedef struct {
 	shark_timer_t _timer;