diff --git a/maple/maple_bus_ft6.hpp b/maple/maple_bus_ft6.hpp new file mode 100644 index 0000000..cbdcb15 --- /dev/null +++ b/maple/maple_bus_ft6.hpp @@ -0,0 +1,76 @@ +namespace ft6 { + namespace data_transfer { + namespace modifier_key { + constexpr uint32_t s2() { return 0b1 << 7; } + constexpr uint32_t s2(uint32_t reg) { return (reg >> 7) & 0b1; } + + constexpr uint32_t right_alt() { return 0b1 << 6; } + constexpr uint32_t right_alt(uint32_t reg) { return (reg >> 6) & 0b1; } + + constexpr uint32_t right_shift() { return 0b1 << 5; } + constexpr uint32_t right_shift(uint32_t reg) { return (reg >> 5) & 0b1; } + + constexpr uint32_t right_control() { return 0b1 << 4; } + constexpr uint32_t right_control(uint32_t reg) { return (reg >> 4) & 0b1; } + + constexpr uint32_t left_gui() { return 0b1 << 3; } + constexpr uint32_t left_gui(uint32_t reg) { return (reg >> 3) & 0b1; } + + constexpr uint32_t left_alt() { return 0b1 << 2; } + constexpr uint32_t left_alt(uint32_t reg) { return (reg >> 2) & 0b1; } + + constexpr uint32_t left_shift() { return 0b1 << 1; } + constexpr uint32_t left_shift(uint32_t reg) { return (reg >> 1) & 0b1; } + + constexpr uint32_t left_control() { return 0b1 << 0; } + constexpr uint32_t left_control(uint32_t reg) { return (reg >> 0) & 0b1; } + + } + + namespace led_state { + constexpr uint32_t shift() { return 0b1 << 7; } + constexpr uint32_t shift(uint32_t reg) { return (reg >> 7) & 0b1; } + + constexpr uint32_t power() { return 0b1 << 6; } + constexpr uint32_t power(uint32_t reg) { return (reg >> 6) & 0b1; } + + constexpr uint32_t kana() { return 0b1 << 5; } + constexpr uint32_t kana(uint32_t reg) { return (reg >> 5) & 0b1; } + + constexpr uint32_t reserved0() { return 0b1 << 4; } + constexpr uint32_t reserved0(uint32_t reg) { return (reg >> 4) & 0b1; } + + constexpr uint32_t reserved1() { return 0b1 << 3; } + constexpr uint32_t reserved1(uint32_t reg) { return (reg >> 3) & 0b1; } + + constexpr uint32_t scroll_lock() { return 0b1 << 2; } + constexpr uint32_t scroll_lock(uint32_t reg) { return (reg >> 2) & 0b1; } + + constexpr uint32_t caps_lock() { return 0b1 << 1; } + constexpr uint32_t caps_lock(uint32_t reg) { return (reg >> 1) & 0b1; } + + constexpr uint32_t num_lock() { return 0b1 << 0; } + constexpr uint32_t num_lock(uint32_t reg) { return (reg >> 0) & 0b1; } + + } + + struct data_format { + uint8_t modifier_key; + uint8_t led_state; + uint8_t scan_code_array[6]; + }; + static_assert((sizeof (struct data_format)) == 8); + } + + namespace set_condition { + struct data_format { + uint8_t led_setting; + uint8_t w1_reserved; + uint8_t w2_reserved; + uint8_t w3_reserved; + }; + static_assert((sizeof (struct data_format)) == 4); + } + +} + diff --git a/regs/gen/maple_data_format.py b/regs/gen/maple_data_format.py index 4be5c48..264a916 100644 --- a/regs/gen/maple_data_format.py +++ b/regs/gen/maple_data_format.py @@ -109,8 +109,10 @@ def render_format(format): yield f"uint8_t {field_name};" elif len(subfields) == 2: yield f"uint16_t {field_name};" + elif len(subfields) == 6: + yield f"uint8_t {field_name}[6];" else: - assert False, len(subfields) + assert False, (len(subfields), field_name) yield "};" assert format.size % 4 == 0, format.size diff --git a/regs/maple_bus_ft6.ods b/regs/maple_bus_ft6.ods index c4c51d5..a847423 100644 Binary files a/regs/maple_bus_ft6.ods and b/regs/maple_bus_ft6.ods differ