ch9329_utils.ino 1.1 KB

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