12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- /*
- RemdesKVM USB-KVM
- Firmware for PCB design v4 or above
- Author: tobychui
- Upload Settings
- CH552G
- 24Mhz (Internal)
- */
- #include <Serial.h>
- // Simple mapping: A-Z → HID code 0x04 - 0x1D
- uint8_t asciiToHID(char c) {
- if (c >= 'A' && c <= 'Z') return (c - 'A') + 0x04;
- if (c >= 'a' && c <= 'z') return (c - 'a') + 0x04;
- return 0x00;
- }
- // Checksum = sum of all bytes except last
- uint8_t calcChecksum(uint8_t* data, uint8_t len) {
- uint8_t sum = 0;
- for (uint8_t i = 0; i < len; i++) sum += data[i];
- return sum;
- }
- //Wrapper for writing an array to serial
- void Serial0_writeBuf(const uint8_t* data, uint8_t len) {
- for (uint8_t i = 0; i < len; i++) {
- Serial0_write(data[i]);
- }
- }
- void sendKeyPress(char key) {
- uint8_t packet[] = {
- 0x57, 0xAB, 0x00, 0x02, 0x08, // Header, addr, CMD, len
- 0x00, 0x00, asciiToHID(key), 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00 // checksum placeholder
- };
- packet[13] = calcChecksum(packet, 13);
- Serial0_writeBuf(packet, 14);
- }
- void sendKeyRelease() {
- uint8_t packet[] = {
- 0x57, 0xAB, 0x00, 0x02, 0x08,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00 // checksum placeholder
- };
- packet[13] = calcChecksum(packet, 13);
- Serial0_writeBuf(packet, 14);
- }
- void setup() {
- USBSerial_println("Ready. Type a letter to send to CH9329.");
- Serial0_begin(9600); // CH9329 UART default baud
- }
- void loop() {
- if (USBSerial_available()) {
- char c = USBSerial_read();
- if (asciiToHID(c)) {
- USBSerial_print("Sending key: ");
- USBSerial_println((char)c);
- sendKeyPress(c);
- delay(50);
- sendKeyRelease();
- } else {
- USBSerial_print("Unsupported char: ");
- USBSerial_println((int)c); // show ASCII code for debugging
- }
- }
- // Echo UART response from CH9329 to USB
- while (Serial1_available()) {
- uint8_t b = Serial1_read();
- USBSerial_print("CH9329 >> 0x");
- if (b < 0x10) USBSerial_print("0");
- USBSerial_println(b, HEX);
- }
- }
|