Verify a new configuration before applying it

This commit is contained in:
Eric Tang
2017-08-07 11:19:41 -07:00
parent f817a5cbb9
commit 97336455b5
4 changed files with 21 additions and 8 deletions

View File

@@ -3,8 +3,11 @@
static uint8_t hardwareConfig[HARDWARE_CONFIG_SIZE];
config_buffer_t HardwareConfigBuffer = {hardwareConfig};
static uint8_t userConfig[USER_CONFIG_SIZE];
config_buffer_t UserConfigBuffer = {userConfig};
static uint8_t userConfig1[USER_CONFIG_SIZE];
static uint8_t userConfig2[USER_CONFIG_SIZE];
config_buffer_t UserConfigBuffer = { userConfig1 };
config_buffer_t NewUserConfigBuffer = { userConfig2 };
uint8_t readUInt8(config_buffer_t *buffer) {
return buffer->buffer[buffer->offset++];

View File

@@ -23,6 +23,7 @@
extern config_buffer_t HardwareConfigBuffer;
extern config_buffer_t UserConfigBuffer;
extern config_buffer_t NewUserConfigBuffer;
// Functions:

View File

@@ -193,7 +193,7 @@ parser_error_t ParseKeymap(config_buffer_t *buffer) {;
if (layerCount != LAYER_COUNT) {
return ParserError_InvalidLayerCount;
}
isDryRun = !isDefault;
isDryRun = buffer == &NewUserConfigBuffer || !isDefault;
if (!isDryRun) {
LedDisplay_SetText(abbreviationLen, abbreviation);
}

View File

@@ -85,10 +85,19 @@ void readMergeSensor(void)
void applyConfig(void)
{
UserConfigBuffer.offset = 0;
GenericHidOutBuffer[0] = ParseConfig(&UserConfigBuffer);
GenericHidOutBuffer[1] = UserConfigBuffer.offset;
GenericHidOutBuffer[2] = UserConfigBuffer.offset >> 8;
uint8_t *temp;
NewUserConfigBuffer.offset = 0;
GenericHidOutBuffer[0] = ParseConfig(&NewUserConfigBuffer);
GenericHidOutBuffer[1] = NewUserConfigBuffer.offset;
GenericHidOutBuffer[2] = NewUserConfigBuffer.offset >> 8;
if (GenericHidOutBuffer[0] == ParserError_Success) {
temp = UserConfigBuffer.buffer;
UserConfigBuffer.buffer = NewUserConfigBuffer.buffer;
NewUserConfigBuffer.buffer = temp;
UserConfigBuffer.offset = 0;
ParseConfig(&UserConfigBuffer);
}
}
void setLedPwm(void)
@@ -144,7 +153,7 @@ void writeConfiguration(bool isHardware)
return;
}
uint8_t *buffer = isHardware ? HardwareConfigBuffer.buffer : UserConfigBuffer.buffer;
uint8_t *buffer = isHardware ? HardwareConfigBuffer.buffer : NewUserConfigBuffer.buffer;
uint16_t bufferLength = isHardware ? HARDWARE_CONFIG_SIZE : USER_CONFIG_SIZE;
if (offset + length > bufferLength) {