diff options
Diffstat (limited to 'src/keymaps/soispha/hid/hid.c')
-rw-r--r-- | src/keymaps/soispha/hid/hid.c | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/src/keymaps/soispha/hid/hid.c b/src/keymaps/soispha/hid/hid.c new file mode 100644 index 0000000..73b7370 --- /dev/null +++ b/src/keymaps/soispha/hid/hid.c @@ -0,0 +1,47 @@ +#include "hid.h" +#include "raw_hid.h" +#include <stdint.h> +#include <string.h> + +void hid_send(uint32_t hex) { + uint8_t length = 32; + + uint8_t response[length]; + memset(response, 0, length); + + uint8_t first, second, third, fourth; + + uint8_t n = 1; + if (*(char *)&n == 1) { + // Little endian + first = (uint8_t)hex; + second = (uint8_t)(hex >> 8); + third = (uint8_t)(hex >> 16); + fourth = (uint8_t)(hex >> 24); + } else { + // Big endian + fourth = (uint8_t)hex; + third = (uint8_t)(hex << 8); + second = (uint8_t)(hex << 16); + first = (uint8_t)(hex << 24); + } + + response[0] = first; + response[1] = second; + response[2] = third; + response[3] = fourth; + + raw_hid_send(response, length); +} + +// `data` is a pointer to the buffer containing the received HID report +// `length` is the length of the report - always `RAW_EPSIZE` +void raw_hid_receive(uint8_t *data, uint8_t length) { + uint8_t response[length]; + memset(response, 0, length); + response[0] = 'B'; + + if (data[0] == 'A') { + raw_hid_send(response, length); + } +} |