mirror of
https://github.com/qmk/qmk_firmware.git
synced 2025-07-16 04:41:28 +00:00
Add matrix command
This commit is contained in:
parent
d2c1490884
commit
4c47fd5052
@ -30,6 +30,8 @@ enum Command {
|
|||||||
CMD_LED_GET_MODE = 15,
|
CMD_LED_GET_MODE = 15,
|
||||||
// Set LED matrix mode and speed
|
// Set LED matrix mode and speed
|
||||||
CMD_LED_SET_MODE = 16,
|
CMD_LED_SET_MODE = 16,
|
||||||
|
// Get currently pressed keys
|
||||||
|
CMD_MATRIX_GET = 17,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum Mode {
|
enum Mode {
|
||||||
@ -230,6 +232,33 @@ void raw_hid_receive(uint8_t *data, uint8_t length) {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
#endif // defined(RGB_MATRIX_CUSTOM_KB)
|
#endif // defined(RGB_MATRIX_CUSTOM_KB)
|
||||||
|
case CMD_MATRIX_GET:
|
||||||
|
{
|
||||||
|
//TODO: improve performance?
|
||||||
|
data[2] = matrix_rows();
|
||||||
|
data[3] = matrix_cols();
|
||||||
|
uint8_t byte = 4;
|
||||||
|
uint8_t bit = 0;
|
||||||
|
for (uint8_t row = 0; row < matrix_rows(); row++) {
|
||||||
|
for (uint8_t col = 0; col < matrix_cols(); col++) {
|
||||||
|
if (byte < length) {
|
||||||
|
if (matrix_is_on(row, col)) {
|
||||||
|
data[byte] |= (1 << bit);
|
||||||
|
} else {
|
||||||
|
data[byte] &= ~(1 << bit);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bit++;
|
||||||
|
if (bit >= 8) {
|
||||||
|
byte++;
|
||||||
|
bit = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
data[1] = 0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
raw_hid_send(data, length);
|
raw_hid_send(data, length);
|
||||||
|
Loading…
Reference in New Issue
Block a user