diff options
Diffstat (limited to 'src/keymaps/soispha/hid')
-rw-r--r-- | src/keymaps/soispha/hid/hid.c | 47 | ||||
-rw-r--r-- | src/keymaps/soispha/hid/hid.h | 9 |
2 files changed, 56 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); + } +} diff --git a/src/keymaps/soispha/hid/hid.h b/src/keymaps/soispha/hid/hid.h new file mode 100644 index 0000000..6ee0eda --- /dev/null +++ b/src/keymaps/soispha/hid/hid.h @@ -0,0 +1,9 @@ +#pragma once + +#include <stdint.h> + +#define UK(c) (UK_UNICODE | (c)) + + + +void hid_send(uint32_t hex); |