ch9329_utils.ino 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. /*
  2. ch9329_utils.ino
  3. This file contain codes that communicate with the ch9329 IC via UART0
  4. */
  5. // Checksum = sum of all bytes except last
  6. uint8_t calcChecksum(uint8_t* data, uint8_t len) {
  7. uint8_t sum = 0;
  8. for (uint8_t i = 0; i < len; i++) sum += data[i];
  9. return sum;
  10. }
  11. // Helper to write an array of uint8_t to CH9329
  12. void Serial0_writeBuf(const uint8_t* data, uint8_t len) {
  13. for (uint8_t i = 0; i < len; i++) {
  14. Serial0_write(data[i]);
  15. }
  16. }
  17. // flush the serial RX (blocking)
  18. void flush_cmd_resp() {
  19. delay(100);
  20. while (Serial0_available()) {
  21. uint8_t b = Serial0_read();
  22. USBSerial_print("0x");
  23. if (b < 0x10) USBSerial_print("0");
  24. USBSerial_print(b, HEX);
  25. USBSerial_print(" ");
  26. }
  27. USBSerial_println("");
  28. }
  29. // Send a CH9329 cmd via UART0
  30. void send_cmd(uint8_t cmd, uint8_t* data, uint8_t length) {
  31. uint8_t sum = 0;
  32. Serial0_write(0x57);
  33. sum += 0x57;
  34. Serial0_write(0xAB);
  35. sum += 0xAB;
  36. Serial0_write(0x00);
  37. Serial0_write(cmd);
  38. sum += cmd;
  39. Serial0_write(length);
  40. sum += length;
  41. for (int i = 0; i < length; i++) {
  42. Serial0_write(data[i]);
  43. sum += data[i];
  44. }
  45. Serial0_write(sum);
  46. }