diff options
| author | Ilya Zhuravlev <whatever@xyz.is> | 2021-07-01 15:10:05 -0400 |
|---|---|---|
| committer | Ilya Zhuravlev <whatever@xyz.is> | 2021-07-17 23:46:10 -0400 |
| commit | 2848a74f62a242955bc0dca92f22dc790b5d5df5 (patch) | |
| tree | de8183b895f4198f4824c3dd6a99cdfea6e568df /quantum/qmk_settings.c | |
| parent | 2affa3ac05be96b530408b2bf26d7ca53cdb133b (diff) | |
qmk_settings: retrieve supported settings
Diffstat (limited to 'quantum/qmk_settings.c')
| -rw-r--r-- | quantum/qmk_settings.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/quantum/qmk_settings.c b/quantum/qmk_settings.c index 50c4e39395..1524fd048d 100644 --- a/quantum/qmk_settings.c +++ b/quantum/qmk_settings.c @@ -64,6 +64,26 @@ void qmk_settings_reset(void) { 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) { const qmk_settings_proto_t *proto = find_setting(qsid); if (!proto || pgm_read_word(&proto->sz) > maxsz) |
