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.csv b/regs/maple_bus_ft6.csv new file mode 100644 index 0000000..d8f1801 --- /dev/null +++ b/regs/maple_bus_ft6.csv @@ -0,0 +1,15 @@ +"data_transfer",7,6,5,4,3,2,1,0 +"modifier_key","S2","Right_Alt","Right_Shift","Right_Control","Left_GUI","Left_Alt","Left_Shift","Left_Control" +"led_state","Shift","Power","Kana","reserved0","reserved1","Scroll_Lock","Caps_Lock","Num_Lock" +"scan_code_array",,,,,,,, +"scan_code_array",,,,,,,, +"scan_code_array",,,,,,,, +"scan_code_array",,,,,,,, +"scan_code_array",,,,,,,, +"scan_code_array",,,,,,,, +,,,,,,,, +"set_condition",7,6,5,4,3,2,1,0 +"led_setting",,,,,,,, +"w1_reserved",,,,,,,, +"w2_reserved",,,,,,,, +"w3_reserved",,,,,,,, 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