pc_message.c 1.0 KB

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