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

logger functions && others

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

+ 6 - 0
Application/app/bms_message.c

@@ -0,0 +1,6 @@
+#include "bms_message.h"
+
+void process_bms_message(uint8_t *data, int len){
+
+}
+

+ 5 - 0
Application/app/bms_message.h

@@ -0,0 +1,5 @@
+#pragma once
+#include <stdint.h>
+
+void process_bms_message(uint8_t *data, int len);
+

+ 6 - 0
Application/app/pc_message.c

@@ -0,0 +1,6 @@
+#include "pc_message.h"
+
+void process_pc_message(uint8_t *data, int len){
+
+}
+

+ 4 - 0
Application/app/pc_message.h

@@ -0,0 +1,4 @@
+#pragma once
+#include <stdint.h>
+void process_pc_message(uint8_t *data, int len);
+

+ 7 - 23
Application/app/protocol.c

@@ -1,27 +1,19 @@
 #include "protocol.h"
 #include "protocol.h"
 #include <string.h>
 #include <string.h>
 #include "bsp/uart.h"
 #include "bsp/uart.h"
+#include "pc_message.h"
+#include "bms_message.h"
 static uint16_t _check_sum(uint8_t*data,uint16_t size);
 static uint16_t _check_sum(uint8_t*data,uint16_t size);
 static uart_enum_t current_uart = SHARK_UART0;
 static uart_enum_t current_uart = SHARK_UART0;
 
 
 void protocol_send_bms_info(protocol_head_t *head){
 void protocol_send_bms_info(protocol_head_t *head){
-	can_head_t can_head;
-	can_head.can_addr = 0x42;
-	can_head.size = head->size;
-	
-	head->checksum = 0;
-	head->checksum = _check_sum((uint8_t *)head, head->size);
 
 
-	shark_uart_frame_start(current_uart, (uint8_t *)&can_head, sizeof(can_head));
-	shark_uart_frame_continue(current_uart, (uint8_t *)head, head->size);
-	shark_uart_frame_end(current_uart);
 }
 }
 
 
 
 
 void protocol_send_debug_info(uint8_t dest, uint8_t *data, int size){	
 void protocol_send_debug_info(uint8_t dest, uint8_t *data, int size){	
 	can_head_t can_head;
 	can_head_t can_head;
 	can_head.can_addr = dest;
 	can_head.can_addr = dest;
-	can_head.size = size;
 	shark_uart_frame_start(current_uart, (uint8_t *)&can_head, sizeof(can_head));
 	shark_uart_frame_start(current_uart, (uint8_t *)&can_head, sizeof(can_head));
 	shark_uart_frame_continue(current_uart, data, size);
 	shark_uart_frame_continue(current_uart, data, size);
 	shark_uart_frame_end(current_uart);
 	shark_uart_frame_end(current_uart);
@@ -32,15 +24,16 @@ void protocol_send_debug_info(uint8_t dest, uint8_t *data, int size){
 */
 */
 void protocol_notify_old_frame(uart_enum_t uart_no){
 void protocol_notify_old_frame(uart_enum_t uart_no){
 	current_uart = uart_no;
 	current_uart = uart_no;
-	protocol_head_t head;
+	protocol_old_head_t head;
 	memset(&head, 0, sizeof(head));
 	memset(&head, 0, sizeof(head));
 	head.size = sizeof(head);
 	head.size = sizeof(head);
 	head.protocol = 'C';
 	head.protocol = 'C';
 	head.type = 0x30;
 	head.type = 0x30;
 	head.dir = 0x16;
 	head.dir = 0x16;
 	head.cmd = 0x10;
 	head.cmd = 0x10;
+	head.bStatus = 1;
 	head.checksum = _check_sum((uint8_t *)&head, head.size);
 	head.checksum = _check_sum((uint8_t *)&head, head.size);
-	shark_uart_write_frame(current_uart, (uint8_t *)&head, head.size);
+	shark_uart_write_bytes(current_uart, (uint8_t *)&head, head.size);
 }
 }
 
 
 void protocol_recv_frame(uart_enum_t uart_no, uint8_t *data, int len){
 void protocol_recv_frame(uart_enum_t uart_no, uint8_t *data, int len){
@@ -50,23 +43,14 @@ void protocol_recv_frame(uart_enum_t uart_no, uint8_t *data, int len){
 	}
 	}
 	can_head_t *can_head = (can_head_t *)data;
 	can_head_t *can_head = (can_head_t *)data;
 	if (can_head->can_addr == 0x45){ //pc sent
 	if (can_head->can_addr == 0x45){ //pc sent
-
+		process_pc_message(data + sizeof(can_head_t), len - sizeof(can_head_t));
 	}else {
 	}else {
 		len -= sizeof(can_head_t);
 		len -= sizeof(can_head_t);
 		if (len <sizeof(protocol_head_t)){
 		if (len <sizeof(protocol_head_t)){
 			return;
 			return;
 		}
 		}
-		protocol_head_t *head = (protocol_head_t *)(data + sizeof(can_head_t)) ;
-		if (len != head->size) {
-			return;
-		}
-		uint16_t check_sum_rx = head->checksum;
-		head->checksum = 0;
-		if (check_sum_rx != _check_sum(data, head->size)){
-			return;
-		}
+		process_bms_message(data + sizeof(can_head_t), len - sizeof(can_head_t));
 	}
 	}
-
 }
 }
 
 
 static uint16_t _check_sum(uint8_t*data,uint16_t size)
 static uint16_t _check_sum(uint8_t*data,uint16_t size)

+ 56 - 17
Application/app/protocol.h

@@ -6,11 +6,11 @@
 typedef struct
 typedef struct
 {
 {
 	uint8_t can_addr;
 	uint8_t can_addr;
-	uint8_t size; //只包含can数据部分,不含can_key
 }can_head_t;
 }can_head_t;
 #pragma pack(pop)
 #pragma pack(pop)
 
 
 
 
+/* ================ 老协议 ================== */
 #pragma  pack (push,1)  
 #pragma  pack (push,1)  
 typedef struct
 typedef struct
 {
 {
@@ -28,6 +28,45 @@ typedef struct
 	uint8_t dir;
 	uint8_t dir;
 	//命令返回状态
 	//命令返回状态
 	uint8_t bStatus;
 	uint8_t bStatus;
+}protocol_old_head_t;
+#pragma pack(pop)
+
+
+/* ================ 新协议 ================== */
+#define PROT_V00 0x00
+#define PROT_V01 0x01
+
+#pragma  pack (push,1)
+typedef struct {
+	uint8_t dir 			:1;//1:bms out, 0: bms in
+	uint8_t insert 			:1;//是否新插入
+	uint8_t health 			:1;//电池是否有异常
+	uint8_t discharger_fet	:1;//dis/charger mos是否打开
+	uint8_t charger_fet		:1;
+	uint8_t small_power		:1;//小电是否打开
+	uint8_t is_charging 	:1;//是否在充电
+	uint8_t cmd_result		:1;//PSxxx 下发的cmd,是否成功
+}bms_stat_t;
+
+typedef struct {
+	uint8_t dir 			:1;//1:bms out, 0: bms in
+	uint8_t power_cmd		:1;//power命令是否有效,开关充放电mos,小电
+	uint8_t discharger_fet	:1;//打开dis/charger mos
+	uint8_t charger_fet		:1;
+	uint8_t small_power		:1;//打开小电
+	uint8_t bms_info		:1; //读取bms基本信息,电压,电流
+	uint8_t bms_temps		:1; //读取pack的温度
+	uint8_t ext_cmd			:1; //扩展命令
+}bms_cmd_t;
+
+typedef struct
+{
+	//协议类型
+	uint8_t protocol;
+	union {
+		bms_stat_t status;
+		bms_cmd_t command;
+	}u_sc;
 }protocol_head_t;
 }protocol_head_t;
 #pragma pack(pop)
 #pragma pack(pop)
 
 
@@ -56,28 +95,28 @@ enum
 #pragma  pack (push,1)  
 #pragma  pack (push,1)  
 typedef struct
 typedef struct
 {
 {
-	uint8_t bike_speed;
-	uint32_t current_miles;//本次电门打开行驶的里程
-	uint8_t  egate_open; //电门开关信号
-	uint8_t operate;
-	uint8_t res[8];//保留
+	uint8_t 	bike_speed;
+	uint32_t 	current_miles;//本次电门打开行驶的里程
+	uint8_t  	egate_open; //电门开关信号
+	uint8_t 	operate;
+	uint8_t 	res[8];//保留
 }command_t;
 }command_t;
 #pragma pack(pop)
 #pragma pack(pop)
 
 
 
 
 #pragma  pack (push,1) 
 #pragma  pack (push,1) 
 typedef struct {
 typedef struct {
-	uint8_t remain_mils; //预估可行驶里程
-	uint8_t soc_percent; //剩余电量
-	uint8_t charger_remain_time; //预计充电完成时间
-	uint8_t is_charging; //是否在充电
-	uint32_t current; //放电或者充电电流
-	uint32_t pack_voltage; //电池包总电压
-	uint8_t max_temp; //4个温感中的最高温度
-	uint16_t bms_status; //bms的状态,比如过高温放电等
-	uint32_t in_balance_cells; //正在均衡的电芯
-	uint8_t misc_flags; //0:bound, 1-2: mosfet, 3: aux short, 4: full 5-6:reserve
-	uint8_t result; //0-3:result, 4-7: operate
+	uint8_t 	remain_mils; //预估可行驶里程
+	uint8_t 	soc_percent; //剩余电量
+	uint8_t 	charger_remain_time; //预计充电完成时间
+	uint8_t 	is_charging; //是否在充电
+	uint32_t 	current; //放电或者充电电流
+	uint32_t 	pack_voltage; //电池包总电压
+	uint8_t 	max_temp; //4个温感中的最高温度
+	uint16_t 	bms_status; //bms的状态,比如过高温放电等
+	uint32_t 	in_balance_cells; //正在均衡的电芯
+	uint8_t 	misc_flags; //0:bound, 1-2: mosfet, 3: aux short, 4: full 5-6:reserve
+	uint8_t 	result; //0-3:result, 4-7: operate
 }common_response_t;
 }common_response_t;
 #pragma pack(pop)
 #pragma pack(pop)
 
 

+ 8 - 5
Application/app/sox/health.c

@@ -29,7 +29,7 @@ static void check_ml5238_state(int event);
 static void init_detect_timer(void);
 static void init_detect_timer(void);
 static void load_delect_handler(shark_timer_t *timer);
 static void load_delect_handler(shark_timer_t *timer);
 static void charger_detect_handler(shark_timer_t *timer);
 static void charger_detect_handler(shark_timer_t *timer);
-
+static void _aux_lock_timer_handler(shark_timer_t *t);
 static bms_health_t _health;
 static bms_health_t _health;
 static debounce_timer_t _load_detect_timer;
 static debounce_timer_t _load_detect_timer;
 static debounce_timer_t _charger_detect_timer;
 static debounce_timer_t _charger_detect_timer;
@@ -234,6 +234,7 @@ static int _is_low_temp(int8_t *temps){
 }
 }
 
 
 static uint8_t small_power_detect_count = 0;
 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){
 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){
@@ -245,11 +246,12 @@ static void _aux_lock_timer_handler(shark_timer_t *t){
 				bms_health()->small_current_short = 1;
 				bms_health()->small_current_short = 1;
 				AUX_VOL_OPEN(0);
 				AUX_VOL_OPEN(0);
 				small_power_detect_count = 0;
 				small_power_detect_count = 0;
+				shark_timer_post( &_aux_lock_timer, 30 * 1000); //30s后再次尝试打开
 			}
 			}
 		}
 		}
 	}
 	}
 }
 }
-static shark_timer_t _aux_lock_timer = {.handler = _aux_lock_timer_handler};
+
 void health_process_aux_lock(void){
 void health_process_aux_lock(void){
 	if (io_state()->aux_lock_detect) {
 	if (io_state()->aux_lock_detect) {
 		if (AUX_VOL_IS_OPEN()){
 		if (AUX_VOL_IS_OPEN()){
@@ -257,9 +259,10 @@ void health_process_aux_lock(void){
 			shark_timer_post( &_aux_lock_timer, 1);
 			shark_timer_post( &_aux_lock_timer, 1);
 		}
 		}
 	}else {
 	}else {
-		bms_health()->small_current_short = 0;
-		small_power_detect_count = 0;
-		shark_timer_cancel(&_aux_lock_timer);
+		if ((AUX_VOL_IS_OPEN())){
+			small_power_detect_count = 0;
+			shark_timer_cancel(&_aux_lock_timer);
+		}
 	}
 	}
 }
 }
 
 

+ 29 - 6
Application/app/sox/iostate.c

@@ -32,7 +32,7 @@ void io_state_init(void){
 	_io_state.hall_detect = IS_HALL1_DETECTED()|| IS_HALL2_DETECTED();
 	_io_state.hall_detect = IS_HALL1_DETECTED()|| IS_HALL2_DETECTED();
 	_io_state.charger_detect = IS_CHARGER_IN();
 	_io_state.charger_detect = IS_CHARGER_IN();
 	_io_state.dcdc_good_detect= IS_DCDC_POWER_GOOD();
 	_io_state.dcdc_good_detect= IS_DCDC_POWER_GOOD();
-	_io_state.aux_lock_detect = IS_AUX_VOL_LOCKED();
+	_io_state.aux_lock_detect = IS_AUX_VOL_LOCKED() && AUX_VOL_IS_OPEN();
 
 
 	shark_timer_post(&hall_io._timer, io_detect_intv_time);
 	shark_timer_post(&hall_io._timer, io_detect_intv_time);
 	shark_timer_post(&charger_io._timer, io_detect_intv_time);
 	shark_timer_post(&charger_io._timer, io_detect_intv_time);
@@ -56,7 +56,7 @@ static int _get_io_value(io_timer_t *t){
 		return IS_CHARGER_IN();
 		return IS_CHARGER_IN();
 	}
 	}
 	if (t == &aux_short_io){
 	if (t == &aux_short_io){
-		return IS_AUX_VOL_LOCKED();
+		return IS_AUX_VOL_LOCKED() && AUX_VOL_IS_OPEN();
 	}
 	}
 	if (t == &dcdc_pwr_io){
 	if (t == &dcdc_pwr_io){
 		return IS_DCDC_POWER_GOOD();
 		return IS_DCDC_POWER_GOOD();
@@ -64,6 +64,23 @@ static int _get_io_value(io_timer_t *t){
 	return -1;
 	return -1;
 }
 }
 
 
+static int _get_cached_value(io_timer_t *t){
+	if (t == &hall_io) {
+		return _io_state.hall_detect;
+	}
+	if (t == &charger_io){
+		return _io_state.charger_detect;
+	}
+	if (t == &aux_short_io){
+		return _io_state.aux_lock_detect;
+	}
+	if (t == &dcdc_pwr_io){
+		return _io_state.dcdc_good_detect;
+	}
+	return -1;
+}
+
+
 static void _set_io_value(io_timer_t *t){
 static void _set_io_value(io_timer_t *t){
 	if (t == &hall_io) {
 	if (t == &hall_io) {
 		_io_state.hall_detect = t->value;
 		_io_state.hall_detect = t->value;
@@ -76,7 +93,7 @@ static void _set_io_value(io_timer_t *t){
 	}
 	}
 	if (t == &aux_short_io){
 	if (t == &aux_short_io){
 		_io_state.aux_lock_detect = t->value;
 		_io_state.aux_lock_detect = t->value;
-	}	
+	}
 	debug_io();
 	debug_io();
 }
 }
 
 
@@ -92,9 +109,11 @@ static void io_timer_handler(shark_timer_t *t){
 	}
 	}
 	if (io_t->detect_cnt >= io_debounce_time){
 	if (io_t->detect_cnt >= io_debounce_time){
 		io_t->detect_cnt = 0;
 		io_t->detect_cnt = 0;
-		_set_io_value(io_t);
-		if (io_t == &aux_short_io){
-			aux_lock_changed = 1;
+		if (_get_cached_value(io_t) != io_t->value) {
+			_set_io_value(io_t);
+			if (io_t == &aux_short_io){
+				aux_lock_changed = 1;
+			}
 		}
 		}
 	}
 	}
 	shark_timer_post(t, io_detect_intv_time);
 	shark_timer_post(t, io_detect_intv_time);
@@ -110,6 +129,10 @@ static void small_current_irq_timer_handler(shark_timer_t *t){
 }
 }
 static shark_timer_t _small_current_irq_timer = {.handler = small_current_irq_timer_handler};
 static shark_timer_t _small_current_irq_timer = {.handler = small_current_irq_timer_handler};
 void small_current_short_irq_handler(void){
 void small_current_short_irq_handler(void){
+	if (!AUX_VOL_IS_OPEN()){
+		io_debug("close aux power,cause the short irq\n");
+		return;
+	}
 	shark_timer_post(&_small_current_irq_timer, 0);
 	shark_timer_post(&_small_current_irq_timer, 0);
 	io_debug("aux lock irq\n");
 	io_debug("aux lock irq\n");
 }
 }

+ 1 - 0
Application/app/sox/measure.h

@@ -7,6 +7,7 @@ float get_small_current(void);
 float get_small_current_voltage(void);
 float get_small_current_voltage(void);
 int get_pcb_temperature(void);
 int get_pcb_temperature(void);
 int get_pack_temperature(int index);
 int get_pack_temperature(int index);
+void current_calibrate(void);
 
 
 #endif /* _IV_Measure_H__ */
 #endif /* _IV_Measure_H__ */
 
 

+ 3 - 1
Application/app/sox/measure_task.c

@@ -62,7 +62,7 @@ static struct means_task _cell_task;
 static u32 cell_task_handler(void);
 static u32 cell_task_handler(void);
 static void init_cell_task(void){
 static void init_cell_task(void){
 	_cell_task._task.handler = cell_task_handler;
 	_cell_task._task.handler = cell_task_handler;
-	_cell_task.delay = 60;
+	_cell_task.delay = 1000;
 	_cell_task.index = 0;
 	_cell_task.index = 0;
 	for (int i = 0; i < CELLS_NUM; i++){
 	for (int i = 0; i < CELLS_NUM; i++){
 		_measure_value.cell_vol[i] = get_cell_voltage(i);
 		_measure_value.cell_vol[i] = get_cell_voltage(i);
@@ -75,6 +75,7 @@ static u32 cell_task_handler(void){
 		return _cell_task.delay;
 		return _cell_task.delay;
 	}
 	}
 	_measure_value.cell_vol[_cell_task.index] = get_cell_voltage(_cell_task.index);
 	_measure_value.cell_vol[_cell_task.index] = get_cell_voltage(_cell_task.index);
+	measure_debug("cell[%d]=%f\n", _cell_task.index, _measure_value.cell_vol[_cell_task.index]/1000.0f);
 	_cell_task.index = (_cell_task.index + 1) % CELLS_NUM;
 	_cell_task.index = (_cell_task.index + 1) % CELLS_NUM;
 	_voltage_notify();//通知bms state 有新的电压数据
 	_voltage_notify();//通知bms state 有新的电压数据
 	return _cell_task.delay;
 	return _cell_task.delay;
@@ -96,6 +97,7 @@ static void init_temp_task(void){
 }
 }
 static u32 temp_task_handler(void){
 static u32 temp_task_handler(void){
 	_measure_value.pack_temp[_temp_task.index] = get_pack_temperature(_temp_task.index);
 	_measure_value.pack_temp[_temp_task.index] = get_pack_temperature(_temp_task.index);
+	measure_debug("pack temp[%d]=%d\n", _temp_task.index, _measure_value.pack_temp[_temp_task.index]);
 	_temp_task.index = (_temp_task.index + 1) % (PACK_TEMPS_NUM + 1);
 	_temp_task.index = (_temp_task.index + 1) % (PACK_TEMPS_NUM + 1);
 	_temperature_notify();//通知bms state 有新的温度数据
 	_temperature_notify();//通知bms state 有新的温度数据
 	return _temp_task.delay;
 	return _temp_task.delay;

+ 2 - 2
Application/app/sox/measure_task.h

@@ -3,8 +3,8 @@
 #include "bsp/shark_bsp.h"
 #include "bsp/shark_bsp.h"
 
 
 typedef struct{
 typedef struct{
-	float small_current;
-	float load_current;//may be discharger or charger current
+	int small_current;
+	int load_current;//may be discharger or charger current
 	int      pack_temp[PACK_TEMPS_NUM];
 	int      pack_temp[PACK_TEMPS_NUM];
 	uint16_t cell_vol[CELLS_NUM]; //mV
 	uint16_t cell_vol[CELLS_NUM]; //mV
 }measure_value_t;
 }measure_value_t;

+ 4 - 2
Application/app/sox/state.c

@@ -4,6 +4,7 @@
 #include "app/sox/measure.h"
 #include "app/sox/measure.h"
 #include "app/sox/measure_task.h"
 #include "app/sox/measure_task.h"
 #include "libs/shark_task.h"
 #include "libs/shark_task.h"
+#include "libs/logger.h"
 #include "health.h"
 #include "health.h"
 #include "soc.h"
 #include "soc.h"
 #include "state.h"
 #include "state.h"
@@ -31,6 +32,7 @@ void bms_state_init(void){
 	health_init();
 	health_init();
 	soc_init();
 	soc_init();
 	shark_task_add(&_bms_main_task);
 	shark_task_add(&_bms_main_task);
+	set_log_level(MOD_STATE, L_debug);
 }
 }
 
 
 bms_state_t *bms_state_get(void){
 bms_state_t *bms_state_get(void){
@@ -113,9 +115,9 @@ static void _process_user_request(s32 health){
 static void _process_power_down(void){
 static void _process_power_down(void){
 #if (ALLOW_POWER_DOWN==1)	
 #if (ALLOW_POWER_DOWN==1)	
 	if (bms_health()->powerdown_lower_voltage){
 	if (bms_health()->powerdown_lower_voltage){
-		ml5238_enable_charger_detect(1);
+		ml5238_enable_charger_detect(AUX_VOL_IS_OPEN(), 1);
 		delay_us(2* 1000);
 		delay_us(2* 1000);
-		if (!ml5238_charger_is_disconnect()){//have charger, do'nt power down
+		if (!ml5238_charger_is_disconnect(AUX_VOL_IS_OPEN())){//have charger, do'nt power down
 			bms_health()->powerdown_lower_voltage = 0;
 			bms_health()->powerdown_lower_voltage = 0;
 			return;
 			return;
 		}
 		}

+ 1 - 1
Application/bsp/gpio.h

@@ -12,7 +12,7 @@ void gpio_init(void);
 #define AUX_VOL_OPEN(x) gpio_bit_write(GPIOB,GPIO_PIN_2,(bit_status)(x))
 #define AUX_VOL_OPEN(x) gpio_bit_write(GPIOB,GPIO_PIN_2,(bit_status)(x))
 #define AUX_VOL_IS_OPEN() !!gpio_output_bit_get(GPIOB, GPIO_PIN_2)
 #define AUX_VOL_IS_OPEN() !!gpio_output_bit_get(GPIOB, GPIO_PIN_2)
 /*aux pwr is locked */
 /*aux pwr is locked */
-#define IS_AUX_VOL_LOCKED() gpio_input_bit_get(GPIOB, GPIO_PIN_11)
+#define IS_AUX_VOL_LOCKED() !gpio_input_bit_get(GPIOB, GPIO_PIN_11)
 /*switch for larger current DCDC  */
 /*switch for larger current DCDC  */
 #define DCDC_VOL_OPEN(x) gpio_bit_write(GPIOA,GPIO_PIN_11,(bit_status)(x))
 #define DCDC_VOL_OPEN(x) gpio_bit_write(GPIOA,GPIO_PIN_11,(bit_status)(x))
 /* DCDC output power good detect */
 /* DCDC output power good detect */

+ 2 - 0
Application/bsp/mcu_power_sleep.c

@@ -8,6 +8,7 @@
 
 
 extern void system_clock_24m_irc8m(void);
 extern void system_clock_24m_irc8m(void);
 extern void system_clock_config(void);
 extern void system_clock_config(void);
+extern void current_calibrate(void);
 
 
 static void enable_wakeup_irq(void){
 static void enable_wakeup_irq(void){
 	charger_detect_irq_enable(1);
 	charger_detect_irq_enable(1);
@@ -63,6 +64,7 @@ static void post_deepsleep(void){
 
 
 	gd32_i2c_init(0, 100* 1000);
 	gd32_i2c_init(0, 100* 1000);
 	wdog_start(4);
 	wdog_start(4);
+	current_calibrate();
 }
 }
 
 
 void mcu_enter_deepsleep(void){
 void mcu_enter_deepsleep(void){

+ 13 - 11
Application/bsp/ml5238.c

@@ -3,19 +3,17 @@
 #include "spi.h"
 #include "spi.h"
 #include "ml5238.h"
 #include "ml5238.h"
 
 
-static shark_timer_t irq_task;
-
-
 static int ml5238_read(uint8_t regaddr, uint8_t *data);
 static int ml5238_read(uint8_t regaddr, uint8_t *data);
 static void ml5238_clear_bits(uint8_t regaddr, uint8_t bit);
 static void ml5238_clear_bits(uint8_t regaddr, uint8_t bit);
 static void ml5238_set_bits(uint8_t regaddr, uint8_t bit);
 static void ml5238_set_bits(uint8_t regaddr, uint8_t bit);
 
 
 static void irq_hander_in_timer(shark_timer_t *timer);
 static void irq_hander_in_timer(shark_timer_t *timer);
 static ml5238_notify_hander _handler;
 static ml5238_notify_hander _handler;
+static shark_timer_t irq_task = {.handler = irq_hander_in_timer};
+
 void ml5238_init(void){
 void ml5238_init(void){
 	spi0_init();
 	spi0_init();
 	ml5238_softreset();
 	ml5238_softreset();
-	irq_task.handler = irq_hander_in_timer;
 }
 }
 
 
 void ml5238_register_notify_handler(ml5238_notify_hander handler){
 void ml5238_register_notify_handler(ml5238_notify_hander handler){
@@ -24,15 +22,15 @@ void ml5238_register_notify_handler(ml5238_notify_hander handler){
 
 
 
 
 //used to detect charger over current
 //used to detect charger over current
-int ml5238_charger_is_disconnect(void){
+int ml5238_charger_is_disconnect(int small_current_on){
 	uint8_t value = 0;
 	uint8_t value = 0;
 	uint8_t fet = 0;
 	uint8_t fet = 0;
 	ml5238_read(ML5238_FET, &fet);	
 	ml5238_read(ML5238_FET, &fet);	
 	ml5238_read(ML5238_PSENSE, &value);
 	ml5238_read(ML5238_PSENSE, &value);
-	if (fet & FET_DF){
-		return (value & PSENSE_PSH);
+	if ((fet & FET_DF) || small_current_on){
+		return (value & PSENSE_PSL);
 	}
 	}
-	return (value & PSENSE_PSL);
+	return (value & PSENSE_PSH);
 }
 }
 
 
 int ml5238_enable_load_detect(int enable){
 int ml5238_enable_load_detect(int enable){
@@ -84,10 +82,11 @@ int ml5238_enable_irq(int enable, int irq){
 	return 0;
 	return 0;
 }
 }
 
 
-int ml5238_enable_charger_detect(int enable){
+//СµçÁ÷´ò¿ªµÈЧdischarger mos´ò¿ª
+int ml5238_enable_charger_detect(int small_current_on, int enable){
 	uint8_t fet = 0;
 	uint8_t fet = 0;
 	ml5238_read(ML5238_FET, &fet);
 	ml5238_read(ML5238_FET, &fet);
-	if (fet & FET_DF){ //discharger is on, used to detect charger over current
+	if ((fet & FET_DF) || small_current_on){ //discharger is on, used to detect charger over current
 		ml5238_clear_bits(ML5238_PSENSE, PSENSE_RPSL);
 		ml5238_clear_bits(ML5238_PSENSE, PSENSE_RPSL);
 		if (enable){
 		if (enable){
 			ml5238_set_bits(ML5238_PSENSE, PSENSE_EPSL);
 			ml5238_set_bits(ML5238_PSENSE, PSENSE_EPSL);
@@ -217,6 +216,8 @@ void ml5238_power_down(void){
 void ml5238_power_save(int save){
 void ml5238_power_save(int save){
 	ml5238_write(ML5238_PSENSE, PSENSE_EPSH|PSENSE_IPSH);
 	ml5238_write(ML5238_PSENSE, PSENSE_EPSH|PSENSE_IPSH);
 	if (save) {
 	if (save) {
+		ML5238_VMON_DISABLE();
+		ML5238_IMON_DISABLE();
 		ml5238_write(ML5238_POWER, POWER_PSV);
 		ml5238_write(ML5238_POWER, POWER_PSV);
 		ml5238_irq_enable(1);  //enable charger detect irq, to wakeup bms when charger insert
 		ml5238_irq_enable(1);  //enable charger detect irq, to wakeup bms when charger insert
 	}else {
 	}else {
@@ -234,7 +235,8 @@ static void irq_hander_in_timer(shark_timer_t *timer){
 	uint8_t status = 0;
 	uint8_t status = 0;
 	ml5238_read(ML5238_STATUS, &status);
 	ml5238_read(ML5238_STATUS, &status);
 	if (status & STATUS_RPSL){//chargering over current
 	if (status & STATUS_RPSL){//chargering over current
-		ml5238_enable_charger_detect(0);
+		ml5238_enable_charger_detect(0, 0);
+		ml5238_enable_charger_detect(1, 0);
 		call_handler(ML5238_Event_Charger_Over_Current);
 		call_handler(ML5238_Event_Charger_Over_Current);
 	}
 	}
 	if (status & STATUS_RSC) { //short current detect, close charger/discharger mosfet
 	if (status & STATUS_RSC) { //short current detect, close charger/discharger mosfet

+ 2 - 2
Application/bsp/ml5238.h

@@ -11,8 +11,8 @@ int ml5238_enable_load_detect(int enable);
 void ml5238_cell_start_balance(uint16_t balance_mask);
 void ml5238_cell_start_balance(uint16_t balance_mask);
 void ml5238_power_down(void);
 void ml5238_power_down(void);
 void ml5238_power_save(int save);
 void ml5238_power_save(int save);
-int ml5238_charger_is_disconnect(void);
-int ml5238_enable_charger_detect(int enable);
+int ml5238_charger_is_disconnect(int small_current_on);
+int ml5238_enable_charger_detect(int small_current_on, int enable);
 int ml5238_is_charging(void);
 int ml5238_is_charging(void);
 int ml5238_is_discharging(void);
 int ml5238_is_discharging(void);
 
 

+ 3 - 0
Application/bsp/uart.c

@@ -391,4 +391,7 @@ void shark_uart_frame_end(uart_enum_t uart_no){
 	shark_uart_tx_end(_shark_uart + uart_no);
 	shark_uart_tx_end(_shark_uart + uart_no);
 }
 }
 
 
+void shark_uart_write_bytes(uart_enum_t uart_no, u8 *buff, u16 size){
+	shark_uart_write(_shark_uart + uart_no, buff, size);
+}
 
 

+ 1 - 0
Application/bsp/uart.h

@@ -43,6 +43,7 @@ void shark_uart_write_frame(uart_enum_t uart_no, uint8_t *bytes, int len);
 void shark_uart_frame_start(uart_enum_t uart_no, uint8_t *bytes, int len);
 void shark_uart_frame_start(uart_enum_t uart_no, uint8_t *bytes, int len);
 void shark_uart_frame_continue(uart_enum_t uart_no, uint8_t *bytes, int len);
 void shark_uart_frame_continue(uart_enum_t uart_no, uint8_t *bytes, int len);
 void shark_uart_frame_end(uart_enum_t uart_no);
 void shark_uart_frame_end(uart_enum_t uart_no);
+void shark_uart_write_bytes(uart_enum_t uart_no, u8 *buff, u16 size);
 
 
 
 
 
 

+ 85 - 72
Project/SP700.uvoptx

@@ -135,7 +135,7 @@
         <SetRegEntry>
         <SetRegEntry>
           <Number>0</Number>
           <Number>0</Number>
           <Key>DLGUARM</Key>
           <Key>DLGUARM</Key>
-          <Name>d</Name>
+          <Name></Name>
         </SetRegEntry>
         </SetRegEntry>
         <SetRegEntry>
         <SetRegEntry>
           <Number>0</Number>
           <Number>0</Number>
@@ -152,50 +152,34 @@
         <Bp>
         <Bp>
           <Number>0</Number>
           <Number>0</Number>
           <Type>0</Type>
           <Type>0</Type>
-          <LineNumber>192</LineNumber>
+          <LineNumber>30</LineNumber>
           <EnabledFlag>1</EnabledFlag>
           <EnabledFlag>1</EnabledFlag>
-          <Address>134226450</Address>
+          <Address>134231350</Address>
           <ByteObject>0</ByteObject>
           <ByteObject>0</ByteObject>
           <HtxType>0</HtxType>
           <HtxType>0</HtxType>
           <ManyObjects>0</ManyObjects>
           <ManyObjects>0</ManyObjects>
           <SizeOfObject>0</SizeOfObject>
           <SizeOfObject>0</SizeOfObject>
           <BreakByAccess>0</BreakByAccess>
           <BreakByAccess>0</BreakByAccess>
           <BreakIfRCount>1</BreakIfRCount>
           <BreakIfRCount>1</BreakIfRCount>
-          <Filename>..\Application\app\sox\health.c</Filename>
+          <Filename>..\Application\bsp\ml5238.c</Filename>
           <ExecCommand></ExecCommand>
           <ExecCommand></ExecCommand>
-          <Expression>\\SP700\../Application/app/sox/health.c\192</Expression>
+          <Expression>\\SP700\../Application/bsp/ml5238.c\30</Expression>
         </Bp>
         </Bp>
         <Bp>
         <Bp>
           <Number>1</Number>
           <Number>1</Number>
           <Type>0</Type>
           <Type>0</Type>
-          <LineNumber>114</LineNumber>
+          <LineNumber>202</LineNumber>
           <EnabledFlag>1</EnabledFlag>
           <EnabledFlag>1</EnabledFlag>
-          <Address>134223102</Address>
+          <Address>134227076</Address>
           <ByteObject>0</ByteObject>
           <ByteObject>0</ByteObject>
           <HtxType>0</HtxType>
           <HtxType>0</HtxType>
           <ManyObjects>0</ManyObjects>
           <ManyObjects>0</ManyObjects>
           <SizeOfObject>0</SizeOfObject>
           <SizeOfObject>0</SizeOfObject>
           <BreakByAccess>0</BreakByAccess>
           <BreakByAccess>0</BreakByAccess>
           <BreakIfRCount>1</BreakIfRCount>
           <BreakIfRCount>1</BreakIfRCount>
-          <Filename>..\Application\app\sox\state.c</Filename>
-          <ExecCommand></ExecCommand>
-          <Expression>\\SP700\../Application/app/sox/state.c\114</Expression>
-        </Bp>
-        <Bp>
-          <Number>2</Number>
-          <Type>0</Type>
-          <LineNumber>194</LineNumber>
-          <EnabledFlag>1</EnabledFlag>
-          <Address>0</Address>
-          <ByteObject>0</ByteObject>
-          <HtxType>0</HtxType>
-          <ManyObjects>0</ManyObjects>
-          <SizeOfObject>0</SizeOfObject>
-          <BreakByAccess>0</BreakByAccess>
-          <BreakIfRCount>0</BreakIfRCount>
           <Filename>..\Application\app\sox\health.c</Filename>
           <Filename>..\Application\app\sox\health.c</Filename>
           <ExecCommand></ExecCommand>
           <ExecCommand></ExecCommand>
-          <Expression></Expression>
+          <Expression>\\SP700\../Application/app/sox/health.c\202</Expression>
         </Bp>
         </Bp>
       </Breakpoint>
       </Breakpoint>
       <WatchWindow1>
       <WatchWindow1>
@@ -209,6 +193,11 @@
           <WinNumber>1</WinNumber>
           <WinNumber>1</WinNumber>
           <ItemText>_measure_value</ItemText>
           <ItemText>_measure_value</ItemText>
         </Ww>
         </Ww>
+        <Ww>
+          <count>2</count>
+          <WinNumber>1</WinNumber>
+          <ItemText>_health</ItemText>
+        </Ww>
       </WatchWindow1>
       </WatchWindow1>
       <MemoryWindow1>
       <MemoryWindow1>
         <Mm>
         <Mm>
@@ -293,6 +282,30 @@
       <RteFlg>0</RteFlg>
       <RteFlg>0</RteFlg>
       <bShared>0</bShared>
       <bShared>0</bShared>
     </File>
     </File>
+    <File>
+      <GroupNumber>1</GroupNumber>
+      <FileNumber>3</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
+      <PathWithFileName>..\Application\app\bms_message.c</PathWithFileName>
+      <FilenameWithoutPath>bms_message.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+    <File>
+      <GroupNumber>1</GroupNumber>
+      <FileNumber>4</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
+      <PathWithFileName>..\Application\app\pc_message.c</PathWithFileName>
+      <FilenameWithoutPath>pc_message.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
   </Group>
   </Group>
 
 
   <Group>
   <Group>
@@ -303,7 +316,7 @@
     <RteFlg>0</RteFlg>
     <RteFlg>0</RteFlg>
     <File>
     <File>
       <GroupNumber>2</GroupNumber>
       <GroupNumber>2</GroupNumber>
-      <FileNumber>3</FileNumber>
+      <FileNumber>5</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -315,7 +328,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>2</GroupNumber>
       <GroupNumber>2</GroupNumber>
-      <FileNumber>4</FileNumber>
+      <FileNumber>6</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -327,7 +340,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>2</GroupNumber>
       <GroupNumber>2</GroupNumber>
-      <FileNumber>5</FileNumber>
+      <FileNumber>7</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -339,7 +352,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>2</GroupNumber>
       <GroupNumber>2</GroupNumber>
-      <FileNumber>6</FileNumber>
+      <FileNumber>8</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -351,7 +364,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>2</GroupNumber>
       <GroupNumber>2</GroupNumber>
-      <FileNumber>7</FileNumber>
+      <FileNumber>9</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -363,7 +376,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>2</GroupNumber>
       <GroupNumber>2</GroupNumber>
-      <FileNumber>8</FileNumber>
+      <FileNumber>10</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -383,7 +396,7 @@
     <RteFlg>0</RteFlg>
     <RteFlg>0</RteFlg>
     <File>
     <File>
       <GroupNumber>3</GroupNumber>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>9</FileNumber>
+      <FileNumber>11</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -395,7 +408,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>3</GroupNumber>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>10</FileNumber>
+      <FileNumber>12</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -407,7 +420,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>3</GroupNumber>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>11</FileNumber>
+      <FileNumber>13</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -419,7 +432,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>3</GroupNumber>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>12</FileNumber>
+      <FileNumber>14</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -431,7 +444,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>3</GroupNumber>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>13</FileNumber>
+      <FileNumber>15</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -443,7 +456,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>3</GroupNumber>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>14</FileNumber>
+      <FileNumber>16</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -455,7 +468,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>3</GroupNumber>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>15</FileNumber>
+      <FileNumber>17</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -467,7 +480,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>3</GroupNumber>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>16</FileNumber>
+      <FileNumber>18</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -479,7 +492,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>3</GroupNumber>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>17</FileNumber>
+      <FileNumber>19</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -491,7 +504,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>3</GroupNumber>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>18</FileNumber>
+      <FileNumber>20</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -503,7 +516,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>3</GroupNumber>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>19</FileNumber>
+      <FileNumber>21</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -515,7 +528,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>3</GroupNumber>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>20</FileNumber>
+      <FileNumber>22</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -535,7 +548,7 @@
     <RteFlg>0</RteFlg>
     <RteFlg>0</RteFlg>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>21</FileNumber>
+      <FileNumber>23</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -547,7 +560,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>22</FileNumber>
+      <FileNumber>24</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -559,7 +572,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>23</FileNumber>
+      <FileNumber>25</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -571,7 +584,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>24</FileNumber>
+      <FileNumber>26</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -583,7 +596,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>25</FileNumber>
+      <FileNumber>27</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -603,7 +616,7 @@
     <RteFlg>0</RteFlg>
     <RteFlg>0</RteFlg>
     <File>
     <File>
       <GroupNumber>5</GroupNumber>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>26</FileNumber>
+      <FileNumber>28</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -615,7 +628,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>5</GroupNumber>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>27</FileNumber>
+      <FileNumber>29</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -627,7 +640,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>5</GroupNumber>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>28</FileNumber>
+      <FileNumber>30</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -639,7 +652,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>5</GroupNumber>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>29</FileNumber>
+      <FileNumber>31</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -651,7 +664,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>5</GroupNumber>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>30</FileNumber>
+      <FileNumber>32</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -663,7 +676,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>5</GroupNumber>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>31</FileNumber>
+      <FileNumber>33</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -675,7 +688,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>5</GroupNumber>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>32</FileNumber>
+      <FileNumber>34</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -687,7 +700,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>5</GroupNumber>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>33</FileNumber>
+      <FileNumber>35</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -699,7 +712,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>5</GroupNumber>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>34</FileNumber>
+      <FileNumber>36</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -711,7 +724,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>5</GroupNumber>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>35</FileNumber>
+      <FileNumber>37</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -723,7 +736,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>5</GroupNumber>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>36</FileNumber>
+      <FileNumber>38</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -735,7 +748,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>5</GroupNumber>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>37</FileNumber>
+      <FileNumber>39</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -747,7 +760,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>5</GroupNumber>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>38</FileNumber>
+      <FileNumber>40</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -759,7 +772,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>5</GroupNumber>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>39</FileNumber>
+      <FileNumber>41</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -771,7 +784,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>5</GroupNumber>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>40</FileNumber>
+      <FileNumber>42</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -783,7 +796,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>5</GroupNumber>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>41</FileNumber>
+      <FileNumber>43</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -795,7 +808,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>5</GroupNumber>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>42</FileNumber>
+      <FileNumber>44</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -807,7 +820,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>5</GroupNumber>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>43</FileNumber>
+      <FileNumber>45</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -819,7 +832,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>5</GroupNumber>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>44</FileNumber>
+      <FileNumber>46</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -831,7 +844,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>5</GroupNumber>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>45</FileNumber>
+      <FileNumber>47</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -843,7 +856,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>5</GroupNumber>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>46</FileNumber>
+      <FileNumber>48</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -855,7 +868,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>5</GroupNumber>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>47</FileNumber>
+      <FileNumber>49</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -867,7 +880,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>5</GroupNumber>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>48</FileNumber>
+      <FileNumber>50</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -887,7 +900,7 @@
     <RteFlg>0</RteFlg>
     <RteFlg>0</RteFlg>
     <File>
     <File>
       <GroupNumber>6</GroupNumber>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>49</FileNumber>
+      <FileNumber>51</FileNumber>
       <FileType>2</FileType>
       <FileType>2</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -899,7 +912,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>6</GroupNumber>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>50</FileNumber>
+      <FileNumber>52</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>

+ 10 - 0
Project/SP700.uvprojx

@@ -393,6 +393,16 @@
               <FileType>1</FileType>
               <FileType>1</FileType>
               <FilePath>..\Application\app\protocol.c</FilePath>
               <FilePath>..\Application\app\protocol.c</FilePath>
             </File>
             </File>
+            <File>
+              <FileName>bms_message.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\Application\app\bms_message.c</FilePath>
+            </File>
+            <File>
+              <FileName>pc_message.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\Application\app\pc_message.c</FilePath>
+            </File>
           </Files>
           </Files>
         </Group>
         </Group>
         <Group>
         <Group>