From 77b1bd291ec0a593ba87788c8e48331b491f5e1c Mon Sep 17 00:00:00 2001 From: Reed Nightingale Date: Sun, 26 Apr 2020 21:32:19 -0700 Subject: [PATCH] Save ~100 bytes by combining these two functions --- button.cpp | 6 ++++++ button.h | 2 +- menu_main.cpp | 8 +++----- menu_main_buttons.cpp | 42 ++++++++++++++---------------------------- menu_numpad.cpp | 3 +-- menu_quicklist.cpp | 3 +-- 6 files changed, 26 insertions(+), 38 deletions(-) diff --git a/button.cpp b/button.cpp index ac221ac..536f196 100644 --- a/button.cpp +++ b/button.cpp @@ -42,3 +42,9 @@ void drawButton(Button* button) } displayText(b, button->x, button->y, button->w, button->h, tc, bgc, bdc); } + +void extractAndDrawButton(Button* button_out, const Button* button_P) +{ + memcpy_P(button_out,button_P,sizeof(*button_out)); + drawButton(button_out); +} diff --git a/button.h b/button.h index 6aba532..7a9e33d 100644 --- a/button.h +++ b/button.h @@ -17,4 +17,4 @@ struct Button { char morse; }; -void drawButton(Button* button); +void extractAndDrawButton(Button* button_out, const Button* button_P); diff --git a/menu_main.cpp b/menu_main.cpp index 102fa86..2285ef2 100644 --- a/menu_main.cpp +++ b/menu_main.cpp @@ -37,8 +37,7 @@ void drawMainMenu(void) Button* bp; for(uint8_t i = 0; i < MAIN_MENU_NUM_BUTTONS; ++i){ memcpy_P(&bp, &(mainMenuButtons[i]), sizeof(bp)); - memcpy_P(&button,bp,sizeof(button)); - drawButton(&button); + extractAndDrawButton(&button,bp); } drawVersion(); drawCallsign(); @@ -70,12 +69,11 @@ void mainMenuTune(int16_t knob) Button button; if(Vfo_e::VFO_A == globalSettings.activeVfo){ - memcpy_P(&button,&bVfoA,sizeof(button)); + extractAndDrawButton(&button,&bVfoA); } else{ - memcpy_P(&button,&bVfoB,sizeof(button)); + extractAndDrawButton(&button,&bVfoB); } - drawButton(&button); updateBandButtons(old_freq); } diff --git a/menu_main_buttons.cpp b/menu_main_buttons.cpp index 19bf0bc..d495948 100644 --- a/menu_main_buttons.cpp +++ b/menu_main_buttons.cpp @@ -350,8 +350,7 @@ void updateBandButtons(const uint32_t old_freq) Button button; for(uint8_t i = 0; i < sizeof(bands)/sizeof(bands[0]); ++i){ if(isFreqInBand(old_freq,bands[i]) != isFreqInBand(curr_freq,bands[i])){ - memcpy_P(&button,band_buttons[i],sizeof(button)); - drawButton(&button); + extractAndDrawButton(&button,band_buttons[i]); morseBool(ButtonStatus_e::Active == button.status()); } } @@ -421,10 +420,8 @@ void osVfo(const Vfo_e vfo){ morseText(b); Button button; - memcpy_P(&button,&bVfoA,sizeof(button)); - drawButton(&button); - memcpy_P(&button,&bVfoB,sizeof(button)); - drawButton(&button); + extractAndDrawButton(&button,&bVfoA); + extractAndDrawButton(&button,&bVfoB); updateBandButtons(old_freq); updateSidebandButtons(); } @@ -473,17 +470,14 @@ void osRit(){ displayFillrect(LAYOUT_MODE_TEXT_X,LAYOUT_MODE_TEXT_Y,LAYOUT_MODE_TEXT_WIDTH,LAYOUT_MODE_TEXT_HEIGHT, COLOR_BACKGROUND); if(Vfo_e::VFO_A == globalSettings.activeVfo){ - memcpy_P(&button,&bVfoA,sizeof(button)); - drawButton(&button); + extractAndDrawButton(&button,&bVfoA); } else{ - memcpy_P(&button,&bVfoB,sizeof(button)); - drawButton(&button); + extractAndDrawButton(&button,&bVfoB); } } - memcpy_P(&button,&bRit,sizeof(button)); - drawButton(&button); + extractAndDrawButton(&button,&bRit); } void osSidebandMode(VfoMode_e mode){ @@ -492,10 +486,8 @@ void osSidebandMode(VfoMode_e mode){ SaveSettingsToEeprom(); Button button; - memcpy_P(&button,&bUsb,sizeof(button)); - drawButton(&button); - memcpy_P(&button,&bLsb,sizeof(button)); - drawButton(&button); + extractAndDrawButton(&button,&bUsb); + extractAndDrawButton(&button,&bLsb); } void updateSidebandButtons() @@ -534,8 +526,7 @@ void osCw(){ setFrequency(GetActiveVfoFreq()); Button button; - memcpy_P(&button,&bCw,sizeof(button)); - drawButton(&button); + extractAndDrawButton(&button,&bCw); } ButtonStatus_e bsSpl(){ @@ -546,12 +537,9 @@ void osSpl(){ globalSettings.splitOn = !globalSettings.splitOn; Button button; - memcpy_P(&button,&bSpl,sizeof(button)); - drawButton(&button); - memcpy_P(&button,&bVfoA,sizeof(button)); - drawButton(&button); - memcpy_P(&button,&bVfoB,sizeof(button)); - drawButton(&button); + extractAndDrawButton(&button,&bSpl); + extractAndDrawButton(&button,&bVfoA); + extractAndDrawButton(&button,&bVfoB); } ButtonStatus_e bsBand(const uint8_t band){ @@ -567,12 +555,10 @@ void osBand(const uint8_t band){ Button button; if(Vfo_e::VFO_A == globalSettings.activeVfo){ - memcpy_P(&button,&bVfoA,sizeof(button)); - drawButton(&button); + extractAndDrawButton(&button,&bVfoA); } else if(Vfo_e::VFO_B == globalSettings.activeVfo){ - memcpy_P(&button,&bVfoB,sizeof(button)); - drawButton(&button); + extractAndDrawButton(&button,&bVfoB); } updateBandButtons(old_freq); diff --git a/menu_numpad.cpp b/menu_numpad.cpp index 847fb2e..437bfc3 100644 --- a/menu_numpad.cpp +++ b/menu_numpad.cpp @@ -29,8 +29,7 @@ void drawNumpad(void) Button* bp; for(uint8_t i = 0; i < NUMPAD_MENU_NUM_BUTTONS; ++i){ memcpy_P(&bp, &(numpadMenuButtons[i]), sizeof(bp)); - memcpy_P(&button,bp,sizeof(button)); - drawButton(&button); + extractAndDrawButton(&button,bp); } } diff --git a/menu_quicklist.cpp b/menu_quicklist.cpp index 8cc00a2..062c1e3 100644 --- a/menu_quicklist.cpp +++ b/menu_quicklist.cpp @@ -31,8 +31,7 @@ void drawQuickList(void) Button* bp; for(uint8_t i = 0; i < QUICKLIST_MENU_NUM_BUTTONS; ++i){ memcpy_P(&bp, &(quickListMenuButtons[i]), sizeof(bp)); - memcpy_P(&button,bp,sizeof(button)); - drawButton(&button); + extractAndDrawButton(&button,bp); } strncpy_P(b,(const char*)F("Short press = load\nLong press = save"),sizeof(b)); displayText(b,10,47,170,200,COLOR_TEXT,COLOR_BACKGROUND,COLOR_BACKGROUND);