pc_message.c 1.0 KB

12345678910111213141516171819202122232425262728293031323334
  1. #include "pc_message.h"
  2. #include "pcba_test.h"
  3. #include "app/sox/measure.h"
  4. int process_pc_message(can_frame_t *frame, int len){
  5. int processed = 0;
  6. if (frame->key == CAN_KEY_PCBA_TEST) {
  7. uint8_t response[16];
  8. int resp_len = pcba_test(frame->data, len, response);
  9. protocol_send_bms_info(frame->head.can_addr, frame->key, response, resp_len);
  10. processed = 1;
  11. }else if (frame->key == CAN_KEY_START_CALI) {
  12. uint8_t result = 0;
  13. if (len != sizeof(cali_cmd_t)) {
  14. current_calibrate();//just for debug
  15. result = 1;
  16. }else {
  17. cali_cmd_t * cmd = (cali_cmd_t *)frame->data;
  18. uint8_t adc = cmd->flags & 0x01;
  19. uint8_t flags = ((cmd->flags>>1) & 0x03);
  20. if (flags == 1) {
  21. result = measure_start_cali(adc, cmd->gain, cmd->totol_samples);
  22. }else if (flags == 2) {
  23. result = measure_continue_cali(adc, cmd->voltage, cmd->current);
  24. }else {
  25. result = measure_stop_cali(adc, cmd->gain);
  26. }
  27. }
  28. protocol_send_ack(frame->head.can_addr, frame->key, result);
  29. processed = 1;
  30. }
  31. return processed;
  32. }