qmk_settings: retrieve supported settings
This commit is contained in:
parent
2affa3ac05
commit
2848a74f62
@ -64,6 +64,26 @@ void qmk_settings_reset(void) {
|
|||||||
save_settings();
|
save_settings();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void qmk_settings_query(uint16_t qsid_gt, void *buffer, size_t sz) {
|
||||||
|
/* set all FFs, so caller can identify when all settings are retrieved by looking for an 0xFFFF entry */
|
||||||
|
memset(buffer, 0xFF, sz);
|
||||||
|
|
||||||
|
size_t buffer_offset = 0;
|
||||||
|
for (size_t i = 0; i < sizeof(protos)/sizeof(*protos); ++i) {
|
||||||
|
uint16_t qsid;
|
||||||
|
|
||||||
|
/* if output buffer has no space left, bail out */
|
||||||
|
if (buffer_offset + sizeof(qsid) > sz)
|
||||||
|
break;
|
||||||
|
|
||||||
|
qsid = pgm_read_word(&protos[i].qsid);
|
||||||
|
if (qsid > qsid_gt) {
|
||||||
|
memcpy((char*)buffer + buffer_offset, &qsid, sizeof(qsid));
|
||||||
|
buffer_offset += sizeof(qsid);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int qmk_settings_get(uint16_t qsid, void *setting, size_t maxsz) {
|
int qmk_settings_get(uint16_t qsid, void *setting, size_t maxsz) {
|
||||||
const qmk_settings_proto_t *proto = find_setting(qsid);
|
const qmk_settings_proto_t *proto = find_setting(qsid);
|
||||||
if (!proto || pgm_read_word(&proto->sz) > maxsz)
|
if (!proto || pgm_read_word(&proto->sz) > maxsz)
|
||||||
|
@ -58,6 +58,7 @@ typedef struct {
|
|||||||
|
|
||||||
void qmk_settings_init(void);
|
void qmk_settings_init(void);
|
||||||
void qmk_settings_reset(void);
|
void qmk_settings_reset(void);
|
||||||
|
void qmk_settings_query(uint16_t qsid_gt, void *buffer, size_t sz);
|
||||||
int qmk_settings_get(uint16_t qsid, void *setting, size_t maxsz);
|
int qmk_settings_get(uint16_t qsid, void *setting, size_t maxsz);
|
||||||
int qmk_settings_set(uint16_t qsid, const void *setting, size_t maxsz);
|
int qmk_settings_set(uint16_t qsid, const void *setting, size_t maxsz);
|
||||||
|
|
||||||
|
@ -165,6 +165,8 @@ void vial_handle_cmd(uint8_t *msg, uint8_t length) {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case vial_qmk_settings_query: {
|
case vial_qmk_settings_query: {
|
||||||
|
uint16_t qsid_greater_than = msg[2] | (msg[3] << 8);
|
||||||
|
qmk_settings_query(qsid_greater_than, msg, length);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case vial_qmk_settings_get: {
|
case vial_qmk_settings_get: {
|
||||||
|
Loading…
Reference in New Issue
Block a user