Bläddra i källkod

update uart protocol

Signed-off-by: huhui <huhui@sharkgulf.com>
huhui 5 år sedan
förälder
incheckning
1547541b59
2 ändrade filer med 39 tillägg och 9 borttagningar
  1. 26 8
      Application/app/bms_message.c
  2. 13 1
      Application/app/protocol.h

+ 26 - 8
Application/app/bms_message.c

@@ -1,3 +1,4 @@
+#include <string.h>
 #include "app/sox/soc.h"
 #include "app/sox/measure.h"
 #include "app/sox/measure_task.h"
@@ -60,6 +61,7 @@ void process_bms_message(can_frame_t *frame, int len){
 				}
 			}
 			bresp.cycle = soc_get_cycle();
+			bresp.calibrated = (get_soc()->flags & SOC_FLAG_CALIBRATED) != 0;
 			data = (uint8_t *)&bresp;
 			data_len = sizeof(bresp);			
 			break;
@@ -97,14 +99,24 @@ void process_bms_message(can_frame_t *frame, int len){
 			data_len = sizeof(sresp);
 			break;
 		}
-		case CAN_KEY_BMS_TEMPS:
-			data = (uint8_t *)measure_value()->pack_temp;
-			data_len = sizeof(measure_value()->pack_temp);
+		case CAN_KEY_BMS_TEMPS: {
+			u8 temps[PACK_TEMPS_NUM * sizeof(int) + 1];
+			temps[0] = PACK_TEMPS_NUM;
+			memcpy(temps+1, measure_value()->pack_temp, PACK_TEMPS_NUM * sizeof(int));
+			data = temps;
+			data_len = PACK_TEMPS_NUM * sizeof(int) + 1;
 			break;
-		case CAN_KEY_BMS_GET_CELLS:
-			data = (uint8_t *)measure_value()->cell_vol;
-			data_len = sizeof(measure_value()->cell_vol);
+		}	
+		case CAN_KEY_BMS_GET_CELLS: {
+			cell_cmd_resp_t cells;
+			cells.cell_num = CELLS_NUM;
+			for (int i = 0; i < CELLS_NUM; i++){
+				cells.voltages[i] = measure_value()->cell_vol[i];
+			}
+			data = (uint8_t *)&cells;
+			data_len = sizeof(cells);
 			break;
+		}
 		case CAN_KEY_BMS_GET_HEALTH_STAT:
 			data = (uint8_t *)bms_health();
 			data_len = sizeof(*bms_health());
@@ -120,10 +132,16 @@ void process_bms_message(can_frame_t *frame, int len){
 		case CAN_KEY_SET_SN:
 			protocol_send_ack(frame->head.can_addr, frame->key, result);
 			break;
-		case CAN_KEY_GET_SN:
+		case CAN_KEY_GET_SN: {
+			data = (u8 *)"SP730FL123223431";
+			data_len = strlen((char *)data);
 			break;
-		case CAN_KEY_GET_VERSION:
+		}
+		case CAN_KEY_GET_VERSION: {
+			data = (u8*) "HSP730FL_V2_13032048";
+			data_len = strlen((char *)data);
 			break;
+		}
 		case CAN_KEY_SET_LOGGER:
 			if (len != 2) {
 				result = 1;

+ 13 - 1
Application/app/protocol.h

@@ -1,6 +1,11 @@
 #pragma once
 
 #include <stdint.h>
+#include "app/sox/soc.h"
+#include "app/sox/measure.h"
+#include "app/sox/measure_task.h"
+#include "app/sox/health.h"
+#include "app/sox/state.h"
 /* ================ 老协议 ================== */
 #pragma  pack (push,1)  
 typedef struct
@@ -76,6 +81,7 @@ typedef struct {
 	uint32_t energy;   //能量,给PS100/200/310/360计算续航里程用
 	int8_t  max_temp;//最高的那个温度
 	uint32_t cycle; //充放电循环次数
+	uint8_t  calibrated;
 }binfo_cmd_resp_t;
 #pragma pack(pop)
 
@@ -85,8 +91,14 @@ typedef struct {
 	uint32_t charge_remain_time; //s
 }cinfo_cmd_resp_t;
 
+#define CAN_KEY_BMS_GET_CELLS   0x07
+typedef struct {
+	uint8_t cell_num;
+	uint16_t voltages[CELLS_NUM];
+}cell_cmd_resp_t;
+
 #define CAN_KEY_BMS_TEMPS 0x11 //return int[4]
-#define CAN_KEY_BMS_GET_CELLS   0x07 //return uint16_t[15]
+
 #define CAN_KEY_SET_LOGGER  0xa2 //byte 0:modle, byte1 level
 #define CAN_KEY_BMS_CLEAR   0xa3 //clear some flags used by PSxxx, exp: stat_cmd_resp_t.insert
 #define CAN_KEY_BMS_GET_HEALTH_STAT 0xa4 //return bms_health_t