#include "pc_message.h" #include "pcba_test.h" #include "app/sox/measure.h" #include "bsp/cs1180.h" int process_pc_message(can_frame_t *frame, int len){ int processed = 0; if (frame->key == CAN_KEY_PCBA_TEST) { uint8_t response[16]; int resp_len = pcba_test(frame->data, len, response); protocol_send_bms_info(frame->head.can_addr, frame->key, response, resp_len); processed = 1; }else if (frame->key == CAN_KEY_START_CALI) { uint8_t result = 0; if (len != sizeof(cali_cmd_t)) { current_calibrate();//just for debug cs1180_adc_init(); result = 1; }else { cali_cmd_t * cmd = (cali_cmd_t *)frame->data; uint8_t adc = cmd->flags & 0x01; uint8_t flags = ((cmd->flags>>1) & 0x03); if (flags == 1) { result = measure_start_cali(adc, cmd->gain, cmd->totol_samples); }else if (flags == 2) { result = measure_continue_cali(adc, cmd->voltage, cmd->current); }else { result = measure_stop_cali(adc, cmd->gain); } } protocol_send_ack(frame->head.can_addr, frame->key, result); processed = 1; } return processed; }