Add helper macros to parse nibbles

Also made the button operations and nibbles constant since they should not be modified.
This commit is contained in:
Guðni Már Gilbert 2022-05-11 20:53:29 +00:00 committed by D.R.racer
parent e6a3fa5e40
commit 8dbb883971
2 changed files with 7 additions and 5 deletions

View File

@ -243,8 +243,6 @@ static const char * const errorDescs[] PROGMEM = {
descRUNTIME_ERROR,
};
#define BUTTON_OP_HIGH_NIBBLE_MSK 0xF0
#define BUTTON_OP_LOW_NIBBLE_MSK 0x0F
/// Will be mapped onto dialog button responses in the FW
/// Those responses have their unique+translated texts as well
@ -285,6 +283,10 @@ static const char * const btnOperation[] PROGMEM = {
btnDisableMMU
};
// Helper macros to parse the operations from Btns()
#define BUTTON_OP_HI_NIBBLE(X) ( ( X & 0xF0 ) >> 4 )
#define BUTTON_OP_LO_NIBBLE(X) ( X & 0x0F )
// We have 8 different operations/buttons at this time, so we need at least 4 bits to encode each.
// Since one of the buttons is always "More", we can skip that one.
// Therefore we need just 1 byte to describe the necessary buttons for each screen.

View File

@ -32,9 +32,9 @@ void ReportErrorHook(CommandInProgress cip, uint16_t ec) {
// Read and determine what operations should be shown on the menu
// Note: uint16_t is used here to avoid compiler warning. uint8_t is only half the size of void*
uint8_t button_operation = reinterpret_cast<uint16_t>(const_cast<void*>(pgm_read_ptr(&errorButtons[ei])));
uint8_t button_high_nibble = (button_operation & BUTTON_OP_HIGH_NIBBLE_MSK) >> 4;
uint8_t button_low_nibble = button_operation & BUTTON_OP_LOW_NIBBLE_MSK;
const uint8_t button_operation = reinterpret_cast<uint16_t>(const_cast<void*>(pgm_read_ptr(&errorButtons[ei])));
const uint8_t button_high_nibble = BUTTON_OP_HI_NIBBLE(button_operation);
const uint8_t button_low_nibble = BUTTON_OP_LO_NIBBLE(button_operation);
// Check if the menu should have three or two choices
if (button_low_nibble == (uint8_t)ButtonOperations::NoOperation)