Check the value of macroIndex

This commit is contained in:
Eric Tang
2017-08-09 11:50:02 -07:00
parent abc0b994a4
commit c342f75031
7 changed files with 15 additions and 5 deletions

View File

@@ -52,13 +52,14 @@ parser_error_t ParseConfig(config_buffer_t *buffer)
return ParserError_InvalidKeymapCount;
}
for (uint8_t keymapIdx = 0; keymapIdx < keymapCount; keymapIdx++) {
errorCode = ParseKeymap(buffer, keymapIdx, keymapCount);
errorCode = ParseKeymap(buffer, keymapIdx, keymapCount, macroCount);
if (errorCode != ParserError_Success) {
return errorCode;
}
}
if (!ParserRunDry) {
AllKeymapsCount = keymapCount;
AllMacrosCount = macroCount;
}
return ParserError_Success;
}

View File

@@ -21,6 +21,7 @@
ParserError_InvalidKeymapCount,
ParserError_InvalidAbbreviationLen,
ParserError_InvalidMacroCount,
ParserError_InvalidSerializedPlayMacroAction,
} parser_error_t;
// Functions:

View File

@@ -5,7 +5,8 @@
#include "keymaps.h"
#include "led_display.h"
uint8_t tempKeymapCount;
static uint8_t tempKeymapCount;
static uint8_t tempMacroCount;
static parser_error_t parseNoneAction(key_action_t *keyAction, config_buffer_t *buffer)
{
@@ -71,6 +72,9 @@ static parser_error_t parsePlayMacroAction(key_action_t *keyAction, config_buffe
{
uint8_t macroIndex = readUInt8(buffer);
if (macroIndex >= tempMacroCount) {
return ParserError_InvalidSerializedPlayMacroAction;
}
keyAction->type = KeyActionType_SwitchKeymap;
keyAction->playMacro.macroId = macroIndex;
return ParserError_Success;
@@ -192,7 +196,7 @@ static parser_error_t parseLayer(config_buffer_t *buffer, uint8_t layer)
return ParserError_Success;
}
parser_error_t ParseKeymap(config_buffer_t *buffer, uint8_t keymapIdx, uint8_t keymapCount)
parser_error_t ParseKeymap(config_buffer_t *buffer, uint8_t keymapIdx, uint8_t keymapCount, uint8_t macroCount)
{
uint16_t offset = buffer->offset;
parser_error_t errorCode;
@@ -222,6 +226,7 @@ parser_error_t ParseKeymap(config_buffer_t *buffer, uint8_t keymapIdx, uint8_t k
}
}
tempKeymapCount = keymapCount;
tempMacroCount = macroCount;
for (uint8_t layerIdx = 0; layerIdx < layerCount; layerIdx++) {
errorCode = parseLayer(buffer, layerIdx);
if (errorCode != ParserError_Success) {

View File

@@ -52,6 +52,6 @@
// Functions:
parser_error_t ParseKeymap(config_buffer_t *buffer, uint8_t keymapIdx, uint8_t keymapCount);
parser_error_t ParseKeymap(config_buffer_t *buffer, uint8_t keymapIdx, uint8_t keymapCount, uint8_t macroCount);
#endif