Refactor based on recent discussion - Add back 'Layer Count'

This commit is contained in:
zvecr 2022-06-19 23:26:27 +01:00
parent d467ac8427
commit dab3a4fde0
4 changed files with 36 additions and 13 deletions

View File

@ -24,6 +24,14 @@
return_constant: XAP_ROUTE_KEYMAP_CAPABILITIES return_constant: XAP_ROUTE_KEYMAP_CAPABILITIES
} }
0x02: { 0x02: {
type: command
name: Get Layer Count
define: GET_LAYER_COUNT
description: Query maximum number of layers that can be addressed within the keymap.
return_type: u8
return_execute: keymap_get_layer_count
}
0x03: {
type: command type: command
name: Get Keycode name: Get Keycode
define: GET_KEYMAP_KEYCODE define: GET_KEYMAP_KEYCODE
@ -47,7 +55,7 @@
return_type: u16 return_type: u16
return_execute: get_keymap_keycode return_execute: get_keymap_keycode
} }
0x03: { 0x04: {
type: command type: command
name: Get Encoder Keycode name: Get Encoder Keycode
define: GET_ENCODER_KEYCODE define: GET_ENCODER_KEYCODE
@ -98,6 +106,14 @@
return_constant: XAP_ROUTE_REMAPPING_CAPABILITIES return_constant: XAP_ROUTE_REMAPPING_CAPABILITIES
} }
0x02: { 0x02: {
type: command
name: Get Layer Count
define: GET_DYNAMIC_LAYER_COUNT
description: Query maximum number of layers that can be addressed within the keymap.
return_type: u8
return_constant: DYNAMIC_KEYMAP_LAYER_COUNT
}
0x03: {
type: command type: command
name: Set Keycode name: Set Keycode
define: SET_KEYMAP_KEYCODE define: SET_KEYMAP_KEYCODE
@ -125,7 +141,7 @@
] ]
return_execute: dynamic_keymap_set_keycode return_execute: dynamic_keymap_set_keycode
} }
0x03: { 0x04: {
type: command type: command
name: Set Encoder Keycode name: Set Encoder Keycode
define: SET_ENCODER_KEYCODE define: SET_ENCODER_KEYCODE

View File

@ -128,8 +128,9 @@ This subsystem allows for query of currently configured keycodes.
| Name | Route | Tags | Payloads | Description | | Name | Route | Tags | Payloads | Description |
| -- | -- | -- | -- | -- | | -- | -- | -- | -- | -- |
| Capabilities Query | `0x04 0x01` | |<br>__Response:__ `u32`| Keymap subsystem capabilities query. Each bit should be considered as a "usable" route within this subsystem.| | Capabilities Query | `0x04 0x01` | |<br>__Response:__ `u32`| Keymap subsystem capabilities query. Each bit should be considered as a "usable" route within this subsystem.|
| Get Keycode | `0x04 0x02` | |<br>__Request:__<br>&nbsp;&nbsp;&nbsp;&nbsp;* Layer: `u8`<br>&nbsp;&nbsp;&nbsp;&nbsp;* Row: `u8`<br>&nbsp;&nbsp;&nbsp;&nbsp;* Column: `u8`<br>__Response:__ `u16`| Query the Keycode at the requested location.| | Get Layer Count | `0x04 0x02` | |<br>__Response:__ `u8`| Query maximum number of layers that can be addressed within the keymap.|
| Get Encoder Keycode | `0x04 0x03` | |<br>__Request:__<br>&nbsp;&nbsp;&nbsp;&nbsp;* Layer: `u8`<br>&nbsp;&nbsp;&nbsp;&nbsp;* Encoder: `u8`<br>&nbsp;&nbsp;&nbsp;&nbsp;* Clockwise: `u8`<br>__Response:__ `u16`| Query the Keycode at the requested location.| | Get Keycode | `0x04 0x03` | |<br>__Request:__<br>&nbsp;&nbsp;&nbsp;&nbsp;* Layer: `u8`<br>&nbsp;&nbsp;&nbsp;&nbsp;* Row: `u8`<br>&nbsp;&nbsp;&nbsp;&nbsp;* Column: `u8`<br>__Response:__ `u16`| Query the Keycode at the requested location.|
| Get Encoder Keycode | `0x04 0x04` | |<br>__Request:__<br>&nbsp;&nbsp;&nbsp;&nbsp;* Layer: `u8`<br>&nbsp;&nbsp;&nbsp;&nbsp;* Encoder: `u8`<br>&nbsp;&nbsp;&nbsp;&nbsp;* Clockwise: `u8`<br>__Response:__ `u16`| Query the Keycode at the requested location.|
### Remapping - `0x05` ### Remapping - `0x05`
This subsystem allows for live reassignment of keycodes without rebuilding the firmware. This subsystem allows for live reassignment of keycodes without rebuilding the firmware.
@ -138,8 +139,9 @@ This subsystem allows for live reassignment of keycodes without rebuilding the f
| Name | Route | Tags | Payloads | Description | | Name | Route | Tags | Payloads | Description |
| -- | -- | -- | -- | -- | | -- | -- | -- | -- | -- |
| Capabilities Query | `0x05 0x01` | |<br>__Response:__ `u32`| Remapping subsystem capabilities query. Each bit should be considered as a "usable" route within this subsystem.| | Capabilities Query | `0x05 0x01` | |<br>__Response:__ `u32`| Remapping subsystem capabilities query. Each bit should be considered as a "usable" route within this subsystem.|
| Set Keycode | `0x05 0x02` | __Secure__ |<br>__Request:__<br>&nbsp;&nbsp;&nbsp;&nbsp;* Layer: `u8`<br>&nbsp;&nbsp;&nbsp;&nbsp;* Row: `u8`<br>&nbsp;&nbsp;&nbsp;&nbsp;* Column: `u8`<br>&nbsp;&nbsp;&nbsp;&nbsp;* Keycode: `u16`| Modify the Keycode at the requested location.| | Get Layer Count | `0x05 0x02` | |<br>__Response:__ `u8`| Query maximum number of layers that can be addressed within the keymap.|
| Set Encoder Keycode | `0x05 0x03` | __Secure__ |<br>__Request:__<br>&nbsp;&nbsp;&nbsp;&nbsp;* Layer: `u8`<br>&nbsp;&nbsp;&nbsp;&nbsp;* Encoder: `u8`<br>&nbsp;&nbsp;&nbsp;&nbsp;* Clockwise: `u8`<br>&nbsp;&nbsp;&nbsp;&nbsp;* Keycode: `u16`| Modify the Keycode at the requested location.| | Set Keycode | `0x05 0x03` | __Secure__ |<br>__Request:__<br>&nbsp;&nbsp;&nbsp;&nbsp;* Layer: `u8`<br>&nbsp;&nbsp;&nbsp;&nbsp;* Row: `u8`<br>&nbsp;&nbsp;&nbsp;&nbsp;* Column: `u8`<br>&nbsp;&nbsp;&nbsp;&nbsp;* Keycode: `u16`| Modify the Keycode at the requested location.|
| Set Encoder Keycode | `0x05 0x04` | __Secure__ |<br>__Request:__<br>&nbsp;&nbsp;&nbsp;&nbsp;* Layer: `u8`<br>&nbsp;&nbsp;&nbsp;&nbsp;* Encoder: `u8`<br>&nbsp;&nbsp;&nbsp;&nbsp;* Clockwise: `u8`<br>&nbsp;&nbsp;&nbsp;&nbsp;* Keycode: `u16`| Modify the Keycode at the requested location.|
### Lighting - `0x06` ### Lighting - `0x06`
This subsystem allows for control over the lighting subsystem. This subsystem allows for control over the lighting subsystem.

View File

@ -165,21 +165,21 @@ def _list_devices():
# def xap_dummy(device): # def xap_dummy(device):
# # get layer count # # get layer count
# layers = _xap_transaction(device, 0x04, 0x00) # layers = _xap_transaction(device, 0x04, 0x02)
# layers = int.from_bytes(layers, "little") # layers = int.from_bytes(layers, "little")
# print(f'layers:{layers}') # print(f'layers:{layers}')
# # get keycode [layer:0, row:0, col:0] # # get keycode [layer:0, row:0, col:0]
# # keycode = _xap_transaction(device, 0x04, 0x02, b"\x00\x00\x00") # # keycode = _xap_transaction(device, 0x04, 0x03, b"\x00\x00\x00")
# # get encoder [layer:0, index:0, clockwise:0] # # get encoder [layer:0, index:0, clockwise:0]
# keycode = _xap_transaction(device, 0x04, 0x03, b"\x00\x00\x00") # keycode = _xap_transaction(device, 0x04, 0x04, b"\x00\x00\x00")
# keycode = int.from_bytes(keycode, "little") # keycode = int.from_bytes(keycode, "little")
# print(f'keycode:{KEYCODE_MAP.get(keycode, "unknown")}[{keycode}]') # print(f'keycode:{KEYCODE_MAP.get(keycode, "unknown")}[{keycode}]')
# # set encoder [layer:0, index:0, clockwise:0, keycode:KC_A] # # set encoder [layer:0, index:0, clockwise:0, keycode:KC_A]
# _xap_transaction(device, 0x05, 0x03, b"\x00\x00\x00\x04\00") # _xap_transaction(device, 0x05, 0x04, b"\x00\x00\x00\x04\00")
def xap_broadcast_listen(device): def xap_broadcast_listen(device):
@ -235,7 +235,7 @@ class XAPShell(cmd.Cmd):
cli.log.error("Invalid args") cli.log.error("Invalid args")
return return
keycode = _xap_transaction(self.device, 0x04, 0x02, data) keycode = _xap_transaction(self.device, 0x04, 0x03, data)
keycode = int.from_bytes(keycode, "little") keycode = int.from_bytes(keycode, "little")
print(f'keycode:{self.keycodes.get(keycode, "unknown")}[{keycode}]') print(f'keycode:{self.keycodes.get(keycode, "unknown")}[{keycode}]')
@ -254,7 +254,7 @@ class XAPShell(cmd.Cmd):
for r in range(rows): for r in range(rows):
for c in range(cols): for c in range(cols):
q = data + r.to_bytes(1, byteorder='little') + c.to_bytes(1, byteorder='little') q = data + r.to_bytes(1, byteorder='little') + c.to_bytes(1, byteorder='little')
keycode = _xap_transaction(self.device, 0x04, 0x02, q) keycode = _xap_transaction(self.device, 0x04, 0x03, q)
keycode = int.from_bytes(keycode, "little") keycode = int.from_bytes(keycode, "little")
print(f'| {self.keycodes.get(keycode, "unknown").ljust(7)} ', end='', flush=True) print(f'| {self.keycodes.get(keycode, "unknown").ljust(7)} ', end='', flush=True)
print('|') print('|')
@ -276,7 +276,7 @@ class XAPShell(cmd.Cmd):
keycodes = [] keycodes = []
for item in layout: for item in layout:
q = data + bytes(item['matrix']) q = data + bytes(item['matrix'])
keycode = _xap_transaction(self.device, 0x04, 0x02, q) keycode = _xap_transaction(self.device, 0x04, 0x03, q)
keycode = int.from_bytes(keycode, "little") keycode = int.from_bytes(keycode, "little")
keycodes.append(self.keycodes.get(keycode, "???")) keycodes.append(self.keycodes.get(keycode, "???"))

View File

@ -104,6 +104,11 @@ bool xap_respond_get_hardware_id(xap_token_t token, const void *data, size_t len
return xap_respond_data(token, &ret, sizeof(ret)); return xap_respond_data(token, &ret, sizeof(ret));
} }
bool xap_respond_keymap_get_layer_count(xap_token_t token, const void *data, size_t length) {
uint8_t ret = keymap_layer_count();
return xap_respond_data(token, &ret, sizeof(ret));
}
bool xap_respond_get_keymap_keycode(xap_token_t token, const void *data, size_t length) { bool xap_respond_get_keymap_keycode(xap_token_t token, const void *data, size_t length) {
if (length != sizeof(xap_route_keymap_get_keymap_keycode_arg_t)) { if (length != sizeof(xap_route_keymap_get_keymap_keycode_arg_t)) {
return false; return false;