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