Browse Source

Add helper macros to parse nibbles

Also made the button operations and nibbles constant since they should not be modified.
Guðni Már Gilbert 2 years ago
parent
commit
8dbb883971
2 changed files with 7 additions and 5 deletions
  1. 4 2
      Firmware/mmu2/errors_list.h
  2. 3 3
      Firmware/mmu2_reporting.cpp

+ 4 - 2
Firmware/mmu2/errors_list.h

@@ -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.

+ 3 - 3
Firmware/mmu2_reporting.cpp

@@ -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)