Source code for the SX126xDVK1xAS Dev Kit. This example code has only been tested on the Nucleo L476RG
Dependencies: mbed DmTftLibrary SX126xLib
Menu.cpp
00001 /* 00002 ______ _ 00003 / _____) _ | | 00004 ( (____ _____ ____ _| |_ _____ ____| |__ 00005 \____ \| ___ | (_ _) ___ |/ ___) _ \ 00006 _____) ) ____| | | || |_| ____( (___| | | | 00007 (______/|_____)_|_|_| \__)_____)\____)_| |_| 00008 (C)2016 Semtech 00009 00010 Description: Display demo menus and manage touch sensor. 00011 00012 Maintainer: Gregory Cristian & Gilbert Menth 00013 */ 00014 00015 #include "mbed.h" 00016 #include "Menu.h" 00017 #include "DisplayDriver.h" 00018 #include "Eeprom.h" 00019 #include "DemoApplication.h" 00020 00021 00022 /*! 00023 * \brief Maximum character count on the same line with function DrawText 00024 * This include needed space for the outline (at the begin and the end of line). 00025 * MAX_CHAR_PER_BTN is the same, but for a button. 00026 */ 00027 #define MAX_CHAR_PER_LINE 28 00028 00029 00030 /*! 00031 * \brief Bitmap of Semtech Logo stored here (copied from a C file). 00032 */ 00033 extern uint8_t SemtechLogo[]; 00034 00035 /*! 00036 * \brief Local copy of the Device which is fitted on the HW board 00037 */ 00038 uint8_t DeviceConnected = 0; 00039 00040 /*! 00041 * \brief Local copy of the Matching Frequency fitted on the HW 00042 */ 00043 uint8_t MatchingFreq = 0; 00044 00045 /*! 00046 * \brief This ticker give the rythme to check X and Y coordinates of activated 00047 * touched region (if pressed). CheckScreenFlag keep the status if Touchscreen 00048 * has been checked or not, until checked. 00049 */ 00050 Ticker CheckScreenTouch; 00051 volatile bool CheckScreenFlag = false; 00052 00053 /*! 00054 * \brief This ticker give the rythme to avoid quick menu change 00055 */ 00056 Ticker DebouncedScreenTouch; 00057 volatile bool ScreenBeenDebounced = false; 00058 00059 /*! 00060 * \brief List og graphical object in the application. 00061 */ 00062 enum MenuObjectsId 00063 { 00064 PAGE_BORDER = 0, 00065 TITLE_LINE, 00066 TITLE_TEXT, 00067 FIRM_LOGO, 00068 BTN0_BORDER, // to accord with DrawActiveButton( ), each button should 00069 BTN0_MENU_TEXT, // have consecutively MENU_TEXT (full large text), 00070 BTN0_LABEL_TEXT, // LABEL_TEXT (left side of the button) and VALUE_TEXT 00071 BTN0_VALUE_TEXT, // (right side of the button). 00072 BTN0b_BORDER, 00073 BTN0b_MENU_TEXT, 00074 BTN0b_LABEL_TEXT, 00075 BTN0b_VALUE_TEXT, 00076 BTN1_BORDER, 00077 BTN1_MENU_TEXT, 00078 BTN1_LABEL_TEXT, 00079 BTN1_VALUE_TEXT, 00080 BTN2_BORDER, 00081 BTN2_MENU_TEXT, 00082 BTN2_LABEL_TEXT, 00083 BTN2_VALUE_TEXT, 00084 BTN3_BORDER, 00085 BTN3_MENU_TEXT, 00086 BTN3_LABEL_TEXT, 00087 BTN3_VALUE_TEXT, 00088 BTN4_BORDER, 00089 BTN4_MENU_TEXT, 00090 BTN4_LABEL_TEXT, 00091 BTN4_VALUE_TEXT, 00092 BTN5_BORDER, 00093 BTN5_MENU_TEXT, 00094 BTN5_LABEL_TEXT, 00095 BTN5_VALUE_TEXT, 00096 BTN6_BORDER, 00097 BTN6_MENU_TEXT, 00098 BTN6_LABEL_TEXT, 00099 BTN6_VALUE_TEXT, 00100 BTN7_BORDER, 00101 BTN7_MENU_TEXT, 00102 BTN8_BORDER, 00103 BTN8_MENU_TEXT, 00104 BTN9_BORDER, 00105 BTN9_MENU_TEXT, 00106 BTN9_LABEL_TEXT, 00107 BTN9_VALUE_TEXT, 00108 LINE0_TEXT, 00109 LINE1_TEXT, 00110 LINE2_TEXT, 00111 LINE3_TEXT, 00112 LINE3_COL0_TEXT, 00113 LINE3_COL1_TEXT, 00114 LINE3_COL2_TEXT, 00115 LINE4_TEXT, // to accord with DrawText( ), each text line should 00116 LINE4_COL0_TEXT, // have consecutively TEXT (full large text), 00117 LINE4_COL1_TEXT, // COL0_TEXT (left side of the line), COL1_TEXT (center 00118 LINE4_COL2_TEXT, // region of the line) and COL2_TEXT (right side of the 00119 LINE5_COL0_TEXT, // line). COL0..2 are optionals if doesn't exist. 00120 LINE5_COL1_TEXT, 00121 LINE5_COL2_TEXT, 00122 LINE6_COL0_TEXT, 00123 LINE6_COL1_TEXT, 00124 LINE6_COL2_TEXT, 00125 LINE7_COL0_TEXT, 00126 LINE7_COL1_TEXT, 00127 LINE7_COL2_TEXT, 00128 LINE8_COL0_TEXT, 00129 LINE8_COL1_TEXT, 00130 LINE8_COL2_TEXT, 00131 LINE9_COL0_TEXT, 00132 LINE9_COL1_TEXT, 00133 LINE9_COL2_TEXT, 00134 }; 00135 #define GRAPH_OBJECTS_COUNT 70 00136 GraphObject_t MenuObjects[GRAPH_OBJECTS_COUNT] = 00137 { 00138 // { Id, Type, Xpos, Ypos, Height, Width, LineW, BackColor, FrontColor, DoFill, FillCol, Source, TouchActive } 00139 { PAGE_BORDER, GO_RECTANGLE, 0, 0, 320, 240, 1, BACK_COLOR, PAGE_COLOR, false, NULL, NULL, false }, 00140 { TITLE_LINE, GO_LINE, 0, 30, 1, 240, 1, BACK_COLOR, PAGE_COLOR, false, NULL, NULL, false }, 00141 { TITLE_TEXT, GO_TEXT, 15, 9, NULL, 208, 1, BACK_COLOR, WHITE, false, NULL, NULL, false }, 00142 { FIRM_LOGO, GO_IMAGE, 20, 37, 95, 215, 1, BACK_COLOR, WHITE, false, NULL, SemtechLogo, false }, 00143 { BTN0_BORDER, GO_RECTANGLE, 10, 40, 30, 106, 1, BACK_COLOR, BUTTON_BORDER, false, NULL, NULL, false }, 00144 { BTN0_MENU_TEXT, GO_TEXT, 15, 48, NULL, 96, 1, BACK_COLOR, MENU_TEXT, false, NULL, NULL, false }, 00145 { BTN0_LABEL_TEXT, GO_TEXT, 15, 48, NULL, 32, 1, BACK_COLOR, TEXT_COLOR, false, NULL, NULL, false }, 00146 { BTN0_VALUE_TEXT, GO_TEXT, 47, 48, NULL, 64, 1, BACK_COLOR, TEXT_VALUE, false, NULL, NULL, false }, 00147 { BTN0b_BORDER, GO_RECTANGLE, 10, 40, 30, 222, 1, BACK_COLOR, BUTTON_BORDER, false, NULL, NULL, false }, 00148 { BTN0b_MENU_TEXT, GO_TEXT, 15, 48, NULL, 200, 1, BACK_COLOR, MENU_TEXT, false, NULL, NULL, false }, 00149 { BTN0b_LABEL_TEXT,GO_TEXT, 15, 48, NULL, 64, 1, BACK_COLOR, TEXT_COLOR, false, NULL, NULL, false }, 00150 { BTN0b_VALUE_TEXT,GO_TEXT, 79, 48, NULL, 152, 1, BACK_COLOR, TEXT_VALUE, false, NULL, NULL, false }, 00151 { BTN1_BORDER, GO_RECTANGLE, 10, 75, 30, 222, 1, BACK_COLOR, BUTTON_BORDER, false, NULL, NULL, false }, 00152 { BTN1_MENU_TEXT, GO_TEXT, 15, 83, NULL, 200, 1, BACK_COLOR, MENU_TEXT, false, NULL, NULL, false }, 00153 { BTN1_LABEL_TEXT, GO_TEXT, 15, 83, NULL, 64, 1, BACK_COLOR, TEXT_COLOR, false, NULL, NULL, false }, 00154 { BTN1_VALUE_TEXT, GO_TEXT, 79, 83, NULL, 152, 1, BACK_COLOR, TEXT_VALUE, false, NULL, NULL, false }, 00155 { BTN2_BORDER, GO_RECTANGLE, 10, 110, 30, 222, 1, BACK_COLOR, BUTTON_BORDER, false, NULL, NULL, false }, 00156 { BTN2_MENU_TEXT, GO_TEXT, 15, 118, NULL, 200, 1, BACK_COLOR, MENU_TEXT, false, NULL, NULL, false }, 00157 { BTN2_LABEL_TEXT, GO_TEXT, 15, 118, NULL, 64, 1, BACK_COLOR, TEXT_COLOR, false, NULL, NULL, false }, 00158 { BTN2_VALUE_TEXT, GO_TEXT, 79, 118, NULL, 152, 1, BACK_COLOR, TEXT_VALUE, false, NULL, NULL, false }, 00159 { BTN3_BORDER, GO_RECTANGLE, 10, 145, 30, 222, 1, BACK_COLOR, BUTTON_BORDER, false, NULL, NULL, false }, 00160 { BTN3_MENU_TEXT, GO_TEXT, 15, 153, NULL, 200, 1, BACK_COLOR, MENU_TEXT, false, NULL, NULL, false }, 00161 { BTN3_LABEL_TEXT, GO_TEXT, 15, 153, NULL, 64, 1, BACK_COLOR, TEXT_COLOR, false, NULL, NULL, false }, 00162 { BTN3_VALUE_TEXT, GO_TEXT, 79, 153, NULL, 152, 1, BACK_COLOR, TEXT_VALUE, false, NULL, NULL, false }, 00163 { BTN4_BORDER, GO_RECTANGLE, 10, 180, 30, 222, 1, BACK_COLOR, BUTTON_BORDER, false, NULL, NULL, false }, 00164 { BTN4_MENU_TEXT, GO_TEXT, 15, 188, NULL, 200, 1, BACK_COLOR, MENU_TEXT, false, NULL, NULL, false }, 00165 { BTN4_LABEL_TEXT, GO_TEXT, 15, 188, NULL, 64, 1, BACK_COLOR, TEXT_COLOR, false, NULL, NULL, false }, 00166 { BTN4_VALUE_TEXT, GO_TEXT, 79, 188, NULL, 152, 1, BACK_COLOR, TEXT_VALUE, false, NULL, NULL, false }, 00167 { BTN5_BORDER, GO_RECTANGLE, 10, 215, 30, 222, 1, BACK_COLOR, BUTTON_BORDER, false, NULL, NULL, false }, 00168 { BTN5_MENU_TEXT, GO_TEXT, 15, 223, NULL, 200, 1, BACK_COLOR, MENU_TEXT, false, NULL, NULL, false }, 00169 { BTN5_LABEL_TEXT, GO_TEXT, 15, 223, NULL, 64, 1, BACK_COLOR, TEXT_COLOR, false, NULL, NULL, false }, 00170 { BTN5_VALUE_TEXT, GO_TEXT, 79, 223, NULL, 152, 1, BACK_COLOR, TEXT_VALUE, false, NULL, NULL, false }, 00171 { BTN6_BORDER, GO_RECTANGLE, 10, 250, 30, 222, 1, BACK_COLOR, BUTTON_BORDER, false, NULL, NULL, false }, 00172 { BTN6_MENU_TEXT, GO_TEXT, 15, 258, NULL, 200, 1, BACK_COLOR, MENU_TEXT, false, NULL, NULL, false }, 00173 { BTN6_LABEL_TEXT, GO_TEXT, 15, 258, NULL, 64, 1, BACK_COLOR, TEXT_COLOR, false, NULL, NULL, false }, 00174 { BTN6_VALUE_TEXT, GO_TEXT, 79, 258, NULL, 152, 1, BACK_COLOR, TEXT_VALUE, false, NULL, NULL, false }, 00175 { BTN7_BORDER, GO_RECTANGLE, 10, 285, 30, 106, 1, BACK_COLOR, BUTTON_BORDER, false, NULL, NULL, false }, 00176 { BTN7_MENU_TEXT, GO_TEXT, 15, 293, NULL, 96, 1, BACK_COLOR, MENU_TEXT, false, NULL, NULL, false }, 00177 { BTN8_BORDER, GO_RECTANGLE, 125, 285, 30, 107, 1, BACK_COLOR, BUTTON_BORDER, false, NULL, NULL, false }, 00178 { BTN8_MENU_TEXT, GO_TEXT, 130, 293, NULL, 96, 1, BACK_COLOR, MENU_TEXT, false, NULL, NULL, false }, 00179 { BTN9_BORDER, GO_RECTANGLE, 125, 40, 30, 107, 1, BACK_COLOR, BUTTON_BORDER, false, NULL, NULL, false }, 00180 { BTN9_MENU_TEXT, GO_TEXT, 130, 48, NULL, 96, 1, BACK_COLOR, MENU_TEXT, false, NULL, NULL, false }, 00181 { BTN9_LABEL_TEXT, GO_TEXT, 130, 48, NULL, 32, 1, BACK_COLOR, TEXT_COLOR, false, NULL, NULL, false }, 00182 { BTN9_VALUE_TEXT, GO_TEXT, 162, 48, NULL, 64, 1, BACK_COLOR, TEXT_VALUE, false, NULL, NULL, false }, 00183 { LINE0_TEXT, GO_TEXT, 5, 80, NULL, 232, 1, BACK_COLOR, TEXT_COLOR, false, NULL, NULL, false }, 00184 { LINE1_TEXT, GO_TEXT, 5, 100, NULL, 232, 1, BACK_COLOR, TEXT_COLOR, false, NULL, NULL, false }, 00185 { LINE2_TEXT, GO_TEXT, 5, 120, NULL, 232, 1, BACK_COLOR, TEXT_COLOR, false, NULL, NULL, false }, 00186 { LINE3_TEXT, GO_TEXT, 5, 140, NULL, 232, 1, BACK_COLOR, TEXT_COLOR, false, NULL, NULL, false }, 00187 { LINE3_COL0_TEXT, GO_TEXT, 5, 140, NULL, 104, 1, BACK_COLOR, TEXT_COLOR, false, NULL, NULL, false }, 00188 { LINE3_COL1_TEXT, GO_TEXT, 110, 140, NULL, 56, 1, BACK_COLOR, TEXT_COLOR, false, NULL, NULL, false }, 00189 { LINE3_COL2_TEXT, GO_TEXT, 170, 140, NULL, 64, 1, BACK_COLOR, TEXT_COLOR, false, NULL, NULL, false }, 00190 { LINE4_TEXT, GO_TEXT, 5, 160, NULL, 232, 1, BACK_COLOR, TEXT_COLOR, false, NULL, NULL, false }, 00191 { LINE4_COL0_TEXT, GO_TEXT, 5, 160, NULL, 104, 1, BACK_COLOR, TEXT_COLOR, false, NULL, NULL, false }, 00192 { LINE4_COL1_TEXT, GO_TEXT, 110, 160, NULL, 56, 1, BACK_COLOR, TEXT_VALUE, false, NULL, NULL, false }, 00193 { LINE4_COL2_TEXT, GO_TEXT, 170, 160, NULL, 64, 1, BACK_COLOR, TEXT_VALUE, false, NULL, NULL, false }, 00194 { LINE5_COL0_TEXT, GO_TEXT, 5, 180, NULL, 104, 1, BACK_COLOR, TEXT_COLOR, false, NULL, NULL, false }, 00195 { LINE5_COL1_TEXT, GO_TEXT, 110, 180, NULL, 56, 1, BACK_COLOR, TEXT_VALUE, false, NULL, NULL, false }, 00196 { LINE5_COL2_TEXT, GO_TEXT, 170, 180, NULL, 64, 1, BACK_COLOR, TEXT_VALUE, false, NULL, NULL, false }, 00197 { LINE6_COL0_TEXT, GO_TEXT, 5, 200, NULL, 104, 1, BACK_COLOR, TEXT_COLOR, false, NULL, NULL, false }, 00198 { LINE6_COL1_TEXT, GO_TEXT, 110, 200, NULL, 56, 1, BACK_COLOR, TEXT_VALUE, false, NULL, NULL, false }, 00199 { LINE6_COL2_TEXT, GO_TEXT, 170, 200, NULL, 64, 1, BACK_COLOR, TEXT_VALUE, false, NULL, NULL, false }, 00200 { LINE7_COL0_TEXT, GO_TEXT, 5, 220, NULL, 104, 1, BACK_COLOR, TEXT_COLOR, false, NULL, NULL, false }, 00201 { LINE7_COL1_TEXT, GO_TEXT, 110, 220, NULL, 56, 1, BACK_COLOR, TEXT_VALUE, false, NULL, NULL, false }, 00202 { LINE7_COL2_TEXT, GO_TEXT, 170, 220, NULL, 64, 1, BACK_COLOR, TEXT_VALUE, false, NULL, NULL, false }, 00203 { LINE8_COL0_TEXT, GO_TEXT, 5, 240, NULL, 104, 1, BACK_COLOR, TEXT_COLOR, false, NULL, NULL, false }, 00204 { LINE8_COL1_TEXT, GO_TEXT, 110, 240, NULL, 56, 1, BACK_COLOR, TEXT_VALUE, false, NULL, NULL, false }, 00205 { LINE8_COL2_TEXT, GO_TEXT, 170, 240, NULL, 64, 1, BACK_COLOR, TEXT_VALUE, false, NULL, NULL, false }, 00206 { LINE9_COL0_TEXT, GO_TEXT, 5, 260, NULL, 104, 1, BACK_COLOR, TEXT_COLOR, false, NULL, NULL, false }, 00207 { LINE9_COL1_TEXT, GO_TEXT, 110, 260, NULL, 56, 1, BACK_COLOR, TEXT_VALUE, false, NULL, NULL, false }, 00208 { LINE9_COL2_TEXT, GO_TEXT, 170, 260, NULL, 64, 1, BACK_COLOR, TEXT_VALUE, false, NULL, NULL, false } 00209 }; 00210 00211 /*! 00212 * \brief DrawText( ) need char* to display a text. It can display until 00213 * 3 different texts on the same line. To avoid recursive use of the same 00214 * ressource, 3 temporary string are declared. 00215 */ 00216 char StringText[MAX_CHAR_PER_LINE + 1]; // don't forget the /0 (end of string) 00217 char StringText2[MAX_CHAR_PER_LINE + 1]; 00218 char StringText3[MAX_CHAR_PER_LINE + 1]; 00219 00220 /*! 00221 * \brief CurrentPage store current displayed page (cf.: list of availlable 00222 * pages in Menu.h). PeviousPage is used only when navigate through "Radio 00223 * Config" to be able to restore the page before "Radio Congig", witch can be 00224 * PingPong, PER or START_PAGE. The goal is to speed menu navigation. 00225 */ 00226 static uint8_t CurrentPage = START_PAGE; 00227 static uint8_t PreviousPage = START_PAGE; 00228 00229 /*! 00230 * \brief In "Radio Config Freq", we can update the central frequency. To avoid 00231 * keyboard, we use (+) et (-) keys. CurrentFreqBase is the offset to be applied 00232 * when we increase or decrease the frequency. 00233 */ 00234 static FreqBase CurrentFreqBase = FB100K; 00235 00236 /*! 00237 * \brief If radio params does't respect bandwidth > fdev + bitrate/2, the radio 00238 * couldn't make a proper modulation. Parameters will be printed in red. 00239 */ 00240 static bool ErrorParam = false; 00241 00242 00243 void CheckScreen( void ); 00244 void DebouncedScreen( void ); 00245 void DrawActiveButton( uint8_t buttonId, uint8_t* text1, uint8_t* text2 ); 00246 void ButtonChangeText( uint8_t buttonId, uint8_t* text1, uint8_t* text2 ); 00247 void DrawText( uint8_t lineId, uint8_t* text0, uint8_t* text1, uint8_t* text2 ); 00248 void RadioSettingsCheckError( void ); 00249 void RadioSettingsClearError( void ); 00250 00251 00252 void MenuInit( uint8_t deviceConnected, uint8_t matchingFreq ) 00253 { 00254 DeviceConnected = deviceConnected; 00255 MatchingFreq = matchingFreq; 00256 DisplayDriverInit( ); 00257 GraphObjectDraw( &( MenuObjects[PAGE_BORDER] ), NULL, false, false); 00258 GraphObjectDraw( &( MenuObjects[TITLE_LINE] ), NULL, false, false); 00259 MenuSetPage( START_PAGE ); 00260 CheckScreenTouch.attach_us( &CheckScreen, 100000 ); // every 100 ms 00261 } 00262 00263 uint8_t MenuHandler( bool refresh ) 00264 { 00265 uint8_t graphObjectTouched = 0xFF; 00266 00267 if( CheckScreenFlag == true ) 00268 { 00269 if( ScreenBeenDebounced == false ) 00270 { 00271 ScreenBeenDebounced = true; 00272 CheckScreenFlag = false; 00273 DebouncedScreenTouch.attach_us( &DebouncedScreen, 150000 ); // every 150 ms 00274 GraphObjectTouched( MenuObjects, GRAPH_OBJECTS_COUNT, &graphObjectTouched ); 00275 } 00276 } 00277 00278 if( ( refresh == true ) && ( graphObjectTouched == 0xFF ) ) 00279 { 00280 MenuSetPage( CurrentPage ); 00281 } 00282 else if( ( graphObjectTouched != 0xFF ) || ( refresh == true ) ) 00283 { 00284 switch( CurrentPage ) 00285 { 00286 case START_PAGE: 00287 if( graphObjectTouched == BTN2_BORDER ) 00288 { 00289 Eeprom.EepromData.DemoSettings.HoldDemo = true; 00290 EepromLoadSettings( ( RadioPacketTypes_t )Eeprom.EepromData.DemoSettings.ModulationType ); 00291 MenuSetPage( PAGE_PING_PONG ); 00292 } 00293 else if( graphObjectTouched == BTN3_BORDER ) 00294 { 00295 Eeprom.EepromData.DemoSettings.HoldDemo = true; 00296 EepromLoadSettings( ( RadioPacketTypes_t )Eeprom.EepromData.DemoSettings.ModulationType ); 00297 MenuSetPage( PAGE_PER ); 00298 } 00299 else if( graphObjectTouched == BTN4_BORDER ) 00300 { 00301 EepromLoadSettings( ( RadioPacketTypes_t )Eeprom.EepromData.DemoSettings.ModulationType ); 00302 MenuSetPage( PAGE_RADIO_TEST ); 00303 } 00304 else if( graphObjectTouched == BTN5_BORDER ) 00305 { 00306 MenuSetPage( PAGE_RADIO_PARAM ); 00307 } 00308 else if( graphObjectTouched == BTN6_BORDER ) 00309 { 00310 MenuSetPage( PAGE_UTILITIES ); 00311 } 00312 break; 00313 00314 case PAGE_PING_PONG: 00315 if( graphObjectTouched == BTN0_BORDER ) 00316 { 00317 ButtonChangeText( BTN8_BORDER, ( uint8_t* )" START", NULL ); 00318 if( Eeprom.EepromData.DemoSettings.Entity == MASTER ) 00319 { 00320 Eeprom.EepromData.DemoSettings.Entity = SLAVE; 00321 ButtonChangeText( BTN0_BORDER, ( uint8_t* )" SLAVE", NULL ); 00322 DrawText( LINE3_COL0_TEXT, NULL, NULL, ( uint8_t* )" " ); 00323 DrawText( LINE4_COL0_TEXT, NULL, NULL, ( uint8_t* )" " ); 00324 DrawText( LINE5_COL0_TEXT, NULL, NULL, ( uint8_t* )" " ); 00325 DrawText( LINE6_COL0_TEXT, NULL, NULL, ( uint8_t* )" " ); 00326 DrawText( LINE7_COL0_TEXT, NULL, NULL, ( uint8_t* )" " ); 00327 DrawText( LINE8_COL0_TEXT, NULL, NULL, ( uint8_t* )" " ); 00328 DrawText( LINE9_COL0_TEXT, NULL, NULL, ( uint8_t* )" " ); 00329 } 00330 else 00331 { 00332 Eeprom.EepromData.DemoSettings.Entity = MASTER; 00333 ButtonChangeText( BTN0_BORDER, ( uint8_t* )" MASTER", NULL ); 00334 DrawText( LINE3_COL0_TEXT, NULL, NULL, ( uint8_t* )"MASTER" ); 00335 } 00336 Eeprom.EepromData.DemoSettings.HoldDemo = true; 00337 EepromSaveSettings( DEMO_SETTINGS ); 00338 MenuSetPage( PAGE_PING_PONG ); 00339 } 00340 else if( graphObjectTouched == BTN7_BORDER ) 00341 { 00342 StopDemoApplication( ); 00343 Eeprom.EepromData.DemoSettings.HoldDemo = true; 00344 PreviousPage = START_PAGE; // clear Previous page 00345 MenuSetPage( START_PAGE ); 00346 } 00347 else if( graphObjectTouched == BTN8_BORDER ) 00348 { 00349 if( Eeprom.EepromData.DemoSettings.HoldDemo == true ) 00350 { 00351 Eeprom.EepromData.DemoSettings.HoldDemo = false; 00352 ButtonChangeText( BTN8_BORDER, ( uint8_t* )" STOP", NULL ); 00353 Eeprom.EepromData.DemoSettings.CntPacketTx = 0; 00354 Eeprom.EepromData.DemoSettings.CntPacketRxOK = 0; 00355 Eeprom.EepromData.DemoSettings.CntPacketRxOKSlave = 0; 00356 Eeprom.EepromData.DemoSettings.CntPacketRxKO = 0; 00357 Eeprom.EepromData.DemoSettings.CntPacketRxKOSlave = 0; 00358 Eeprom.EepromData.DemoSettings.RxTimeOutCount = 0; 00359 StopDemoApplication( ); 00360 RunDemoApplicationPingPong( ); 00361 } 00362 else 00363 { 00364 Eeprom.EepromData.DemoSettings.HoldDemo = true; 00365 ButtonChangeText( BTN8_BORDER, ( uint8_t* )" START", NULL ); 00366 StopDemoApplication( ); 00367 wait_ms( 200 ); // debouncing of the touch screen 00368 } 00369 } 00370 else if( graphObjectTouched == BTN9_BORDER ) 00371 { 00372 Eeprom.EepromData.DemoSettings.HoldDemo = true; 00373 StopDemoApplication( ); 00374 // "CANCEL" or "OK & SAVE" button of PAGE_RADIO_PARAM use 00375 // PreviousPage to set next page. Speed up the navigation. 00376 PreviousPage = PAGE_PING_PONG; 00377 MenuSetPage( PAGE_RADIO_PARAM ); 00378 } 00379 else if( refresh == true ) 00380 { 00381 MenuSetPage( PAGE_PING_PONG ); 00382 } 00383 break; 00384 00385 case PAGE_PER: 00386 if( graphObjectTouched == BTN0_BORDER ) 00387 { 00388 ButtonChangeText( BTN8_BORDER, ( uint8_t* )" START", NULL ); 00389 if( Eeprom.EepromData.DemoSettings.Entity == MASTER ) 00390 { 00391 Eeprom.EepromData.DemoSettings.Entity = SLAVE; 00392 ButtonChangeText( BTN0_BORDER, ( uint8_t* )" SLAVE", NULL ); 00393 DrawText( LINE4_COL0_TEXT, ( uint8_t* )"Rx OK", NULL, NULL ); 00394 DrawText( LINE5_COL0_TEXT, ( uint8_t* )"Rx KO", NULL, NULL ); 00395 DrawText( LINE6_COL0_TEXT, ( uint8_t* )"PER", NULL, NULL ); 00396 DrawText( LINE7_COL0_TEXT, ( uint8_t* )"Freq Err", NULL, NULL ); 00397 DrawText( LINE8_COL0_TEXT, ( uint8_t* )"Last Rssi", NULL, NULL ); 00398 DrawText( LINE9_COL0_TEXT, ( uint8_t* )"Last SNR", NULL, NULL ); 00399 } 00400 else 00401 { 00402 Eeprom.EepromData.DemoSettings.Entity = MASTER; 00403 ButtonChangeText( BTN0_BORDER, ( uint8_t* )" MASTER", NULL ); 00404 DrawText( LINE4_COL0_TEXT, ( uint8_t* )"Transmitted", ( uint8_t* )GetMenuDemoNumSentPacket( ), NULL ); 00405 DrawText( LINE5_COL0_TEXT, ( uint8_t* )" ", ( uint8_t* )" ", NULL ); 00406 DrawText( LINE6_COL0_TEXT, ( uint8_t* )" ", ( uint8_t* )" ", NULL ); 00407 DrawText( LINE7_COL0_TEXT, ( uint8_t* )" ", ( uint8_t* )" ", NULL ); 00408 DrawText( LINE8_COL0_TEXT, ( uint8_t* )" ", ( uint8_t* )" ", NULL ); 00409 DrawText( LINE9_COL0_TEXT, ( uint8_t* )" ", ( uint8_t* )" ", NULL ); 00410 } 00411 00412 Eeprom.EepromData.DemoSettings.HoldDemo = true; 00413 EepromSaveSettings( DEMO_SETTINGS ); 00414 MenuSetPage( PAGE_PER ); 00415 } 00416 else if( graphObjectTouched == BTN7_BORDER ) 00417 { 00418 Eeprom.EepromData.DemoSettings.HoldDemo = true; 00419 PreviousPage = START_PAGE; // clear Previous page 00420 MenuSetPage( START_PAGE ); 00421 } 00422 else if( graphObjectTouched == BTN8_BORDER ) 00423 { 00424 if( Eeprom.EepromData.DemoSettings.HoldDemo == true ) 00425 { 00426 Eeprom.EepromData.DemoSettings.HoldDemo = false; 00427 ButtonChangeText( BTN8_BORDER, ( uint8_t* )" STOP", NULL ); 00428 StopDemoApplication( ); 00429 Eeprom.EepromData.DemoSettings.CntPacketTx = 0; 00430 Eeprom.EepromData.DemoSettings.CntPacketRxOK = 0; 00431 Eeprom.EepromData.DemoSettings.CntPacketRxKO = 0; 00432 Eeprom.EepromData.DemoSettings.RxTimeOutCount = 0; 00433 RunDemoApplicationPer( ); 00434 } 00435 else 00436 { 00437 Eeprom.EepromData.DemoSettings.HoldDemo = true; 00438 ButtonChangeText( BTN8_BORDER, ( uint8_t* )" START", NULL ); 00439 StopDemoApplication( ); 00440 wait_ms( 200 ); // debouncing of the touch screen 00441 } 00442 } 00443 else if( graphObjectTouched == BTN9_BORDER ) 00444 { 00445 Eeprom.EepromData.DemoSettings.HoldDemo = true; 00446 StopDemoApplication( ); 00447 // "CANCEL" or "OK & SAVE" button of PAGE_RADIO_PARAM use 00448 // PreviousPage to set next page. Speed up the navigation. 00449 PreviousPage = PAGE_PER; 00450 MenuSetPage( PAGE_RADIO_PARAM ); 00451 } 00452 else if( refresh == true ) 00453 { 00454 MenuSetPage( PAGE_PER ); 00455 } 00456 break; 00457 00458 case PAGE_RADIO_PARAM: 00459 if( graphObjectTouched == BTN0_BORDER ) 00460 { 00461 if( Eeprom.EepromData.DemoSettings.ModulationType == PACKET_TYPE_LORA ) 00462 { 00463 Eeprom.EepromData.DemoSettings.ModulationType = PACKET_TYPE_GFSK; 00464 } 00465 else// if( Eeprom.EepromData.DemoSettings.ModulationType == PACKET_TYPE_GFSK ) 00466 { 00467 Eeprom.EepromData.DemoSettings.ModulationType = PACKET_TYPE_LORA; 00468 } 00469 EepromLoadSettings( ( RadioPacketTypes_t )Eeprom.EepromData.DemoSettings.ModulationType ); 00470 RadioSettingsCheckError( ); 00471 ButtonChangeText( BTN0_BORDER, NULL, ( uint8_t* )GetMenuRadioFrameType( ) ); 00472 ButtonChangeText( BTN3_BORDER, NULL, ( uint8_t* )GetRadioModulationParameters1( ) ); 00473 ButtonChangeText( BTN4_BORDER, NULL, ( uint8_t* )GetRadioModulationParameters2( ) ); 00474 ButtonChangeText( BTN5_BORDER, NULL, ( uint8_t* )GetRadioModulationParameters3( ) ); 00475 ButtonChangeText( BTN6_BORDER, NULL, ( uint8_t* )GetRadioModulationParameters4( ) ); 00476 ButtonChangeText( BTN9_BORDER, NULL, ( uint8_t* )GetRadioPayloadLength( ) ); 00477 RadioSettingsClearError( ); 00478 //MenuSetPage( PAGE_RADIO_PARAM ); // _GMH_ still need ? 00479 } 00480 else if( graphObjectTouched == BTN1_BORDER ) 00481 { 00482 MenuSetPage( PAGE_RADIO_PARAM_FREQ ); 00483 } 00484 else if( graphObjectTouched == BTN2_BORDER ) 00485 { 00486 if( DeviceConnected == SX1261 ) 00487 { 00488 Eeprom.EepromData.DemoSettings.TxPower += 1; 00489 if( Eeprom.EepromData.DemoSettings.TxPower > SX1261_POWER_TX_MAX ) 00490 { 00491 Eeprom.EepromData.DemoSettings.TxPower = SX1261_POWER_TX_MIN; 00492 } 00493 } 00494 else 00495 { 00496 Eeprom.EepromData.DemoSettings.TxPower += 1; 00497 if( Eeprom.EepromData.DemoSettings.TxPower > SX1262_POWER_TX_MAX ) 00498 { 00499 Eeprom.EepromData.DemoSettings.TxPower = SX1262_POWER_TX_MIN; 00500 } 00501 } 00502 ButtonChangeText( BTN2_BORDER, NULL, ( uint8_t* )GetRadioTxPower( ) ); 00503 } 00504 else if( graphObjectTouched == BTN3_BORDER ) 00505 { 00506 if( Eeprom.EepromData.DemoSettings.ModulationType == PACKET_TYPE_LORA ) 00507 { 00508 if( Eeprom.EepromData.DemoSettings.ModulationParam1 < LORA_SF12 ) 00509 { 00510 Eeprom.EepromData.DemoSettings.ModulationParam1++; 00511 } 00512 else 00513 { 00514 Eeprom.EepromData.DemoSettings.ModulationParam1 = LORA_SF5; 00515 } 00516 } 00517 else // PACKET_TYPE_GFSK 00518 { 00519 switch( Eeprom.EepromData.DemoSettings.ModulationParam1 ) 00520 { 00521 case DEMO_BR_100: 00522 Eeprom.EepromData.DemoSettings.ModulationParam1 = DEMO_BR_600; 00523 break; 00524 00525 case DEMO_BR_600: 00526 Eeprom.EepromData.DemoSettings.ModulationParam1 = DEMO_BR_4800; 00527 break; 00528 default: 00529 case DEMO_BR_4800: 00530 Eeprom.EepromData.DemoSettings.ModulationParam1 = DEMO_BR_9600; 00531 break; 00532 00533 case DEMO_BR_9600: 00534 Eeprom.EepromData.DemoSettings.ModulationParam1 = DEMO_BR_19200; 00535 break; 00536 00537 case DEMO_BR_19200: 00538 Eeprom.EepromData.DemoSettings.ModulationParam1 = DEMO_BR_57600; 00539 break; 00540 00541 case DEMO_BR_57600: 00542 Eeprom.EepromData.DemoSettings.ModulationParam1 = DEMO_BR_100000; 00543 break; 00544 00545 case DEMO_BR_100000: 00546 Eeprom.EepromData.DemoSettings.ModulationParam1 = DEMO_BR_250000; 00547 break; 00548 00549 case DEMO_BR_250000: 00550 Eeprom.EepromData.DemoSettings.ModulationParam1 = DEMO_BR_100; 00551 break; 00552 } 00553 RadioSettingsCheckError( ); 00554 } 00555 ButtonChangeText( BTN3_BORDER, NULL, ( uint8_t* )GetRadioModulationParameters1( ) ); 00556 RadioSettingsClearError( ); 00557 } 00558 else if( graphObjectTouched == BTN4_BORDER ) 00559 { 00560 if( Eeprom.EepromData.DemoSettings.ModulationType == PACKET_TYPE_LORA ) 00561 { 00562 switch( Eeprom.EepromData.DemoSettings.ModulationParam2 ) 00563 { 00564 case LORA_BW_007: 00565 Eeprom.EepromData.DemoSettings.ModulationParam2 = LORA_BW_010; 00566 break; 00567 case LORA_BW_010: 00568 Eeprom.EepromData.DemoSettings.ModulationParam2 = LORA_BW_015; 00569 break; 00570 case LORA_BW_015: 00571 Eeprom.EepromData.DemoSettings.ModulationParam2 = LORA_BW_020; 00572 break; 00573 case LORA_BW_020: 00574 Eeprom.EepromData.DemoSettings.ModulationParam2 = LORA_BW_031; 00575 break; 00576 case LORA_BW_031: 00577 Eeprom.EepromData.DemoSettings.ModulationParam2 = LORA_BW_041; 00578 break; 00579 case LORA_BW_041: 00580 Eeprom.EepromData.DemoSettings.ModulationParam2 = LORA_BW_062; 00581 break; 00582 00583 default: 00584 case LORA_BW_062: 00585 Eeprom.EepromData.DemoSettings.ModulationParam2 = LORA_BW_125; 00586 break; 00587 case LORA_BW_125: 00588 Eeprom.EepromData.DemoSettings.ModulationParam2 = LORA_BW_250; 00589 break; 00590 case LORA_BW_250: 00591 Eeprom.EepromData.DemoSettings.ModulationParam2 = LORA_BW_500; 00592 break; 00593 case LORA_BW_500: 00594 Eeprom.EepromData.DemoSettings.ModulationParam2 = LORA_BW_007; 00595 break; 00596 } 00597 } 00598 else //Eeprom.EepromData.DemoSettings.ModulationType == PACKET_TYPE_GFSK 00599 { 00600 switch( Eeprom.EepromData.DemoSettings.ModulationParam2 ) 00601 { 00602 default: 00603 case DEMO_FDEV_5000: 00604 Eeprom.EepromData.DemoSettings.ModulationParam2 = DEMO_FDEV_10000; 00605 break; 00606 00607 case DEMO_FDEV_10000: 00608 Eeprom.EepromData.DemoSettings.ModulationParam2 = DEMO_FDEV_25000; 00609 break; 00610 00611 case DEMO_FDEV_25000: 00612 Eeprom.EepromData.DemoSettings.ModulationParam2 = DEMO_FDEV_50000; 00613 break; 00614 00615 case DEMO_FDEV_50000: 00616 Eeprom.EepromData.DemoSettings.ModulationParam2 = DEMO_FDEV_75000; 00617 break; 00618 00619 case DEMO_FDEV_75000: 00620 Eeprom.EepromData.DemoSettings.ModulationParam2 = DEMO_FDEV_100000; 00621 break; 00622 00623 case DEMO_FDEV_100000: 00624 Eeprom.EepromData.DemoSettings.ModulationParam2 = DEMO_FDEV_150000; 00625 break; 00626 00627 case DEMO_FDEV_150000: 00628 Eeprom.EepromData.DemoSettings.ModulationParam2 = DEMO_FDEV_5000; 00629 break; 00630 } 00631 RadioSettingsCheckError( ); 00632 } 00633 ButtonChangeText( BTN4_BORDER, NULL, ( uint8_t* )GetRadioModulationParameters2( ) ); 00634 RadioSettingsClearError( ); 00635 } 00636 else if( graphObjectTouched == BTN5_BORDER ) 00637 { 00638 if( Eeprom.EepromData.DemoSettings.ModulationType == PACKET_TYPE_LORA ) 00639 { 00640 if( Eeprom.EepromData.DemoSettings.ModulationParam3 < LORA_CR_4_8 ) 00641 { 00642 Eeprom.EepromData.DemoSettings.ModulationParam3++; 00643 } 00644 else 00645 { 00646 Eeprom.EepromData.DemoSettings.ModulationParam3 = LORA_CR_4_5; 00647 } 00648 } 00649 else // PACKET_TYPE_GFSK 00650 { 00651 switch( Eeprom.EepromData.DemoSettings.ModulationParam3 ) 00652 { 00653 case MOD_SHAPING_OFF : 00654 Eeprom.EepromData.DemoSettings.ModulationParam3 = MOD_SHAPING_G_BT_03; 00655 break; 00656 case MOD_SHAPING_G_BT_03 : 00657 Eeprom.EepromData.DemoSettings.ModulationParam3 = MOD_SHAPING_G_BT_05; 00658 break; 00659 case MOD_SHAPING_G_BT_05 : 00660 Eeprom.EepromData.DemoSettings.ModulationParam3 = MOD_SHAPING_G_BT_07; 00661 break; 00662 case MOD_SHAPING_G_BT_07 : 00663 Eeprom.EepromData.DemoSettings.ModulationParam3 = MOD_SHAPING_G_BT_1; 00664 break; 00665 case MOD_SHAPING_G_BT_1 : 00666 Eeprom.EepromData.DemoSettings.ModulationParam3 = MOD_SHAPING_OFF; 00667 break; 00668 } 00669 } 00670 ButtonChangeText( BTN5_BORDER, NULL, ( uint8_t* )GetRadioModulationParameters3( ) ); 00671 } 00672 else if( graphObjectTouched == BTN6_BORDER ) 00673 { 00674 if( Eeprom.EepromData.DemoSettings.ModulationType == PACKET_TYPE_LORA ) 00675 { 00676 if( Eeprom.EepromData.DemoSettings.PacketParam2 == LORA_PACKET_FIXED_LENGTH ) 00677 { 00678 Eeprom.EepromData.DemoSettings.PacketParam2 = LORA_PACKET_VARIABLE_LENGTH; 00679 } 00680 else 00681 { 00682 Eeprom.EepromData.DemoSettings.PacketParam2 = LORA_PACKET_FIXED_LENGTH; 00683 } 00684 } 00685 else // Eeprom.EepromData.DemoSettings.ModulationType == PACKET_TYPE_GFSK 00686 { 00687 switch( Eeprom.EepromData.DemoSettings.ModulationParam4 ) 00688 { 00689 case RX_BW_4800: 00690 Eeprom.EepromData.DemoSettings.ModulationParam4 = RX_BW_5800; 00691 break; 00692 00693 case RX_BW_5800: 00694 Eeprom.EepromData.DemoSettings.ModulationParam4 = RX_BW_7300; 00695 break; 00696 00697 case RX_BW_7300: 00698 Eeprom.EepromData.DemoSettings.ModulationParam4 = RX_BW_9700; 00699 break; 00700 00701 case RX_BW_9700: 00702 Eeprom.EepromData.DemoSettings.ModulationParam4 = RX_BW_11700; 00703 break; 00704 00705 case RX_BW_11700: 00706 Eeprom.EepromData.DemoSettings.ModulationParam4 = RX_BW_14600; 00707 break; 00708 00709 case RX_BW_14600: 00710 Eeprom.EepromData.DemoSettings.ModulationParam4 = RX_BW_19500; 00711 break; 00712 00713 case RX_BW_19500: 00714 Eeprom.EepromData.DemoSettings.ModulationParam4 = RX_BW_23400; 00715 break; 00716 00717 case RX_BW_23400: 00718 Eeprom.EepromData.DemoSettings.ModulationParam4 = RX_BW_29300; 00719 break; 00720 00721 case RX_BW_29300: 00722 Eeprom.EepromData.DemoSettings.ModulationParam4 = RX_BW_39000; 00723 break; 00724 00725 case RX_BW_39000: 00726 Eeprom.EepromData.DemoSettings.ModulationParam4 = RX_BW_58600; 00727 break; 00728 00729 case RX_BW_58600: 00730 Eeprom.EepromData.DemoSettings.ModulationParam4 = RX_BW_93800; 00731 break; 00732 00733 case RX_BW_93800: 00734 Eeprom.EepromData.DemoSettings.ModulationParam4 = RX_BW_117300; 00735 break; 00736 00737 case RX_BW_117300: 00738 Eeprom.EepromData.DemoSettings.ModulationParam4 = RX_BW_156200; 00739 break; 00740 00741 case RX_BW_156200: 00742 Eeprom.EepromData.DemoSettings.ModulationParam4 = RX_BW_187200; 00743 break; 00744 00745 case RX_BW_187200: 00746 Eeprom.EepromData.DemoSettings.ModulationParam4 = RX_BW_234300; 00747 break; 00748 00749 case RX_BW_234300: 00750 Eeprom.EepromData.DemoSettings.ModulationParam4 = RX_BW_312000; 00751 break; 00752 00753 case RX_BW_312000: 00754 Eeprom.EepromData.DemoSettings.ModulationParam4 = RX_BW_373600; 00755 break; 00756 00757 case RX_BW_373600: 00758 Eeprom.EepromData.DemoSettings.ModulationParam4 = RX_BW_467000; 00759 break; 00760 00761 case RX_BW_467000: 00762 Eeprom.EepromData.DemoSettings.ModulationParam4 = RX_BW_4800; 00763 break; 00764 } 00765 RadioSettingsCheckError( ); 00766 } 00767 ButtonChangeText( BTN6_BORDER, NULL, ( uint8_t* )GetRadioModulationParameters4( ) ); 00768 RadioSettingsClearError( ); 00769 } 00770 else if( graphObjectTouched == BTN7_BORDER ) 00771 { 00772 uint8_t modTmp = Eeprom.EepromData.DemoSettings.ModulationType; 00773 00774 EepromMcuReadBuffer( 0, Eeprom.Buffer, EEPROM_BUFFER_SIZE ); 00775 EepromLoadGeneralSettings( ); 00776 EepromLoadSettings( ( RadioPacketTypes_t )modTmp ); 00777 MenuSetPage( PreviousPage ); 00778 } 00779 else if( graphObjectTouched == BTN8_BORDER ) 00780 { 00781 switch( Eeprom.EepromData.DemoSettings.ModulationType ) 00782 { 00783 case PACKET_TYPE_LORA: 00784 EepromSaveSettings( RADIO_LORA_PARAMS ); 00785 break; 00786 00787 case PACKET_TYPE_GFSK: 00788 EepromSaveSettings( RADIO_GFSK_PARAMS ); 00789 break; 00790 00791 default: 00792 00793 break; 00794 } 00795 EepromSaveSettings( DEMO_SETTINGS ); 00796 MenuSetPage( PreviousPage ); 00797 } 00798 else if( graphObjectTouched == BTN9_BORDER ) 00799 { 00800 if( Eeprom.EepromData.DemoSettings.ModulationType == PACKET_TYPE_LORA ) 00801 { 00802 if( Eeprom.EepromData.DemoSettings.PacketParam3 < 255 ) 00803 { 00804 Eeprom.EepromData.DemoSettings.PacketParam3 += 1; 00805 } 00806 else 00807 { 00808 Eeprom.EepromData.DemoSettings.PacketParam3 = 1; 00809 } 00810 } 00811 else // PACKET_TYPE_GFSK 00812 { 00813 if( Eeprom.EepromData.DemoSettings.PacketParam6 < 255 ) 00814 { 00815 Eeprom.EepromData.DemoSettings.PacketParam6 += 1; 00816 } 00817 else 00818 { 00819 Eeprom.EepromData.DemoSettings.PacketParam6 = 1; 00820 } 00821 } 00822 ButtonChangeText( BTN9_BORDER, NULL, ( uint8_t* )GetRadioPayloadLength( ) ); 00823 } 00824 break; 00825 00826 case PAGE_RADIO_PARAM_FREQ: 00827 if( graphObjectTouched == BTN0_BORDER ) 00828 { 00829 MenuSetPage( PAGE_RADIO_PARAM ); 00830 } 00831 else if( graphObjectTouched == BTN3_BORDER ) 00832 { 00833 if( DeviceConnected == SX1268 ) 00834 { 00835 Eeprom.EepromData.DemoSettings.Frequency = DEMO_CENTRAL_FREQ_PRESET4; 00836 } 00837 else 00838 { 00839 Eeprom.EepromData.DemoSettings.Frequency = DEMO_CENTRAL_FREQ_PRESET6; 00840 } 00841 MenuSetPage( PAGE_RADIO_PARAM ); 00842 } 00843 else if( graphObjectTouched == BTN4_BORDER ) 00844 { 00845 if( DeviceConnected == SX1268 ) 00846 { 00847 Eeprom.EepromData.DemoSettings.Frequency = DEMO_CENTRAL_FREQ_PRESET3; 00848 } 00849 else 00850 { 00851 Eeprom.EepromData.DemoSettings.Frequency = DEMO_CENTRAL_FREQ_PRESET7; 00852 } 00853 MenuSetPage( PAGE_RADIO_PARAM ); 00854 } 00855 else if( graphObjectTouched == BTN5_BORDER ) 00856 { 00857 if( DeviceConnected == SX1268 ) 00858 { 00859 Eeprom.EepromData.DemoSettings.Frequency = DEMO_CENTRAL_FREQ_PRESET9; 00860 } 00861 else 00862 { 00863 Eeprom.EepromData.DemoSettings.Frequency = DEMO_CENTRAL_FREQ_PRESET8; 00864 } 00865 MenuSetPage( PAGE_RADIO_PARAM ); 00866 } 00867 else if( graphObjectTouched == BTN6_BORDER ) 00868 { 00869 switch( CurrentFreqBase ) 00870 { 00871 case FB1: 00872 CurrentFreqBase = FB10; 00873 break; 00874 case FB10: 00875 CurrentFreqBase = FB100; 00876 break; 00877 case FB100: 00878 CurrentFreqBase = FB1K; 00879 break; 00880 case FB1K: 00881 CurrentFreqBase = FB10K; 00882 break; 00883 case FB10K: 00884 CurrentFreqBase = FB100K; 00885 break; 00886 case FB100K: 00887 CurrentFreqBase = FB1M; 00888 break; 00889 case FB1M: 00890 CurrentFreqBase = FB10M; 00891 break; 00892 case FB10M: 00893 CurrentFreqBase = FB1; 00894 break; 00895 } 00896 ButtonChangeText( BTN6_BORDER, NULL, ( uint8_t* )GetRadioFreqBase( ) ); 00897 } 00898 else if( graphObjectTouched == BTN7_BORDER ) 00899 { 00900 Eeprom.EepromData.DemoSettings.Frequency -= CurrentFreqBase; 00901 if( Eeprom.EepromData.DemoSettings.Frequency < DEMO_CENTRAL_FREQ_MIN ) 00902 { 00903 Eeprom.EepromData.DemoSettings.Frequency = DEMO_CENTRAL_FREQ_MIN; 00904 } 00905 ButtonChangeText( BTN2_BORDER, NULL, ( uint8_t* )GetRadioFrequency( ) ); 00906 } 00907 else if( graphObjectTouched == BTN8_BORDER ) 00908 { 00909 Eeprom.EepromData.DemoSettings.Frequency += CurrentFreqBase; 00910 if( Eeprom.EepromData.DemoSettings.Frequency > DEMO_CENTRAL_FREQ_MAX ) 00911 { 00912 Eeprom.EepromData.DemoSettings.Frequency = DEMO_CENTRAL_FREQ_MAX; 00913 } 00914 ButtonChangeText( BTN2_BORDER, NULL, ( uint8_t* )GetRadioFrequency( ) ); 00915 } 00916 break; 00917 00918 case PAGE_UTILITIES: 00919 if( graphObjectTouched == BTN0_BORDER ) 00920 { 00921 EepromEraseCheckSum( ); 00922 NVIC_SystemReset( ); 00923 } 00924 else if( graphObjectTouched == BTN3_BORDER ) 00925 { 00926 if( Eeprom.EepromData.DemoSettings.BoostedRx == true ) 00927 { 00928 Eeprom.EepromData.DemoSettings.BoostedRx = false; 00929 } 00930 else 00931 { 00932 Eeprom.EepromData.DemoSettings.BoostedRx = true; 00933 } 00934 ButtonChangeText( BTN3_BORDER, NULL, ( uint8_t* )GetMenuDemoRadioBoostedRx( ) ); 00935 } 00936 else if( graphObjectTouched == BTN4_BORDER ) 00937 { 00938 if( Eeprom.EepromData.DemoSettings.RadioPowerMode == USE_LDO ) 00939 { 00940 Eeprom.EepromData.DemoSettings.RadioPowerMode = USE_DCDC; 00941 } 00942 else 00943 { 00944 Eeprom.EepromData.DemoSettings.RadioPowerMode = USE_LDO; 00945 } 00946 ButtonChangeText( BTN4_BORDER, NULL, ( uint8_t* )GetMenuDemoRadioPowerMode( ) ); 00947 } 00948 else if( graphObjectTouched == BTN5_BORDER ) 00949 { 00950 switch( Eeprom.EepromData.DemoSettings.MaxNumPacket ) 00951 { 00952 case 0: 00953 Eeprom.EepromData.DemoSettings.MaxNumPacket = 100; 00954 break; 00955 case 100: 00956 Eeprom.EepromData.DemoSettings.MaxNumPacket = 200; 00957 break; 00958 case 200: 00959 Eeprom.EepromData.DemoSettings.MaxNumPacket = 500; 00960 break; 00961 case 500: 00962 Eeprom.EepromData.DemoSettings.MaxNumPacket = 1000; 00963 break; 00964 case 1000: 00965 Eeprom.EepromData.DemoSettings.MaxNumPacket = 0; 00966 break; 00967 } 00968 ButtonChangeText( BTN5_BORDER, NULL, ( uint8_t* )GetMenuDemoMaxNumPacket( ) ); 00969 } 00970 else if( graphObjectTouched == BTN7_BORDER ) 00971 { 00972 uint8_t modTmp = Eeprom.EepromData.DemoSettings.ModulationType; 00973 00974 EepromMcuReadBuffer( 0, Eeprom.Buffer, EEPROM_BUFFER_SIZE ); 00975 EepromLoadGeneralSettings( ); 00976 EepromLoadSettings( ( RadioPacketTypes_t )modTmp ); 00977 MenuSetPage( START_PAGE ); 00978 } 00979 else if( graphObjectTouched == BTN8_BORDER ) 00980 { 00981 EepromSaveSettings( DEMO_SETTINGS ); 00982 MenuSetPage( START_PAGE ); 00983 } 00984 else if( refresh == true ) 00985 { 00986 MenuSetPage( PAGE_UTILITIES ); 00987 } 00988 break; 00989 00990 case PAGE_RADIO_TEST: 00991 if( graphObjectTouched == BTN0b_BORDER ) 00992 { 00993 Eeprom.EepromData.DemoSettings.HoldDemo = true; 00994 MenuSetPage( PAGE_SLEEP_MODE ); 00995 } 00996 else if( graphObjectTouched == BTN1_BORDER ) 00997 { 00998 Eeprom.EepromData.DemoSettings.HoldDemo = true; 00999 MenuSetPage( PAGE_STBY_RC_MODE ); 01000 } 01001 else if( graphObjectTouched == BTN2_BORDER ) 01002 { 01003 Eeprom.EepromData.DemoSettings.HoldDemo = true; 01004 MenuSetPage( PAGE_STBY_XOSC_MODE ); 01005 } 01006 else if( graphObjectTouched == BTN3_BORDER ) 01007 { 01008 Eeprom.EepromData.DemoSettings.HoldDemo = true; 01009 MenuSetPage( PAGE_TX_CW ); 01010 } 01011 else if( graphObjectTouched == BTN4_BORDER ) 01012 { 01013 Eeprom.EepromData.DemoSettings.HoldDemo = true; 01014 MenuSetPage( PAGE_CONT_MODULATION ); 01015 } 01016 else if( graphObjectTouched == BTN5_BORDER ) 01017 { 01018 Eeprom.EepromData.DemoSettings.HoldDemo = true; 01019 MenuSetPage( PAGE_CONT_RX ); 01020 } 01021 else if( graphObjectTouched == BTN6_BORDER ) 01022 { 01023 Eeprom.EepromData.DemoSettings.HoldDemo = true; 01024 MenuSetPage( PAGE_RSSI_TEST ); 01025 } 01026 else if( graphObjectTouched == BTN7_BORDER ) 01027 { 01028 Eeprom.EepromData.DemoSettings.HoldDemo = true; 01029 MenuSetPage( START_PAGE ); 01030 } 01031 break; 01032 01033 case PAGE_RSSI_TEST: 01034 if( graphObjectTouched == BTN7_BORDER ) 01035 { 01036 StopDemoApplication( ); 01037 Eeprom.EepromData.DemoSettings.HoldDemo = true; 01038 PreviousPage = PAGE_RADIO_TEST; // clear Previous page 01039 MenuSetPage( PAGE_RADIO_TEST ); 01040 } 01041 else if( graphObjectTouched == BTN8_BORDER ) 01042 { 01043 if( Eeprom.EepromData.DemoSettings.HoldDemo == true ) 01044 { 01045 Eeprom.EepromData.DemoSettings.HoldDemo = false; 01046 StopDemoApplication( ); 01047 ButtonChangeText( BTN8_BORDER, ( uint8_t* )" STOP", NULL ); 01048 RunDemoTestRssi( ); 01049 } 01050 else 01051 { 01052 Eeprom.EepromData.DemoSettings.HoldDemo = true; 01053 StopDemoApplication( ); 01054 ButtonChangeText( BTN8_BORDER, ( uint8_t* )" START", NULL ); 01055 } 01056 } 01057 else if( graphObjectTouched == BTN9_BORDER ) 01058 { 01059 Eeprom.EepromData.DemoSettings.HoldDemo = true; 01060 StopDemoApplication( ); 01061 // "CANCEL" or "OK & SAVE" button of PAGE_RADIO_PARAM use 01062 // PreviousPage to set next page. Speed up the navigation. 01063 PreviousPage = PAGE_RSSI_TEST; 01064 MenuSetPage( PAGE_RADIO_PARAM ); 01065 } 01066 break; 01067 01068 case PAGE_SLEEP_MODE: 01069 if( graphObjectTouched == BTN7_BORDER ) 01070 { 01071 StopDemoApplication( ); 01072 Eeprom.EepromData.DemoSettings.HoldDemo = true; 01073 PreviousPage = PAGE_RADIO_TEST; // clear Previous page 01074 MenuSetPage( PAGE_RADIO_TEST ); 01075 } 01076 else if( graphObjectTouched == BTN8_BORDER ) 01077 { 01078 if( Eeprom.EepromData.DemoSettings.HoldDemo == true ) 01079 { 01080 Eeprom.EepromData.DemoSettings.HoldDemo = false; 01081 StopDemoApplication( ); 01082 ButtonChangeText( BTN8_BORDER, ( uint8_t* )" STOP", NULL ); 01083 RunDemoSleepMode( ); 01084 } 01085 else 01086 { 01087 Eeprom.EepromData.DemoSettings.HoldDemo = true; 01088 StopDemoApplication( ); 01089 ButtonChangeText( BTN8_BORDER, ( uint8_t* )" START", NULL ); 01090 MenuSetPage( PAGE_SLEEP_MODE ); 01091 } 01092 } 01093 else if( graphObjectTouched == BTN9_BORDER ) 01094 { 01095 Eeprom.EepromData.DemoSettings.HoldDemo = true; 01096 StopDemoApplication( ); 01097 // "CANCEL" or "OK & SAVE" button of PAGE_RADIO_PARAM use 01098 // PreviousPage to set next page. Speed up the navigation. 01099 PreviousPage = PAGE_SLEEP_MODE; 01100 MenuSetPage( PAGE_RADIO_PARAM ); 01101 } 01102 break; 01103 01104 case PAGE_STBY_RC_MODE: 01105 if( graphObjectTouched == BTN7_BORDER ) 01106 { 01107 StopDemoApplication( ); 01108 Eeprom.EepromData.DemoSettings.HoldDemo = true; 01109 PreviousPage = PAGE_RADIO_TEST; // clear Previous page 01110 MenuSetPage( PAGE_RADIO_TEST ); 01111 } 01112 else if( graphObjectTouched == BTN8_BORDER ) 01113 { 01114 if( Eeprom.EepromData.DemoSettings.HoldDemo == true ) 01115 { 01116 Eeprom.EepromData.DemoSettings.HoldDemo = false; 01117 StopDemoApplication( ); 01118 ButtonChangeText( BTN8_BORDER, ( uint8_t* )" STOP", NULL ); 01119 RunDemoStandbyRcMode( ); 01120 } 01121 else 01122 { 01123 Eeprom.EepromData.DemoSettings.HoldDemo = true; 01124 StopDemoApplication( ); 01125 ButtonChangeText( BTN8_BORDER, ( uint8_t* )" START", NULL ); 01126 } 01127 } 01128 else if( graphObjectTouched == BTN9_BORDER ) 01129 { 01130 Eeprom.EepromData.DemoSettings.HoldDemo = true; 01131 StopDemoApplication( ); 01132 // "CANCEL" or "OK & SAVE" button of PAGE_RADIO_PARAM use 01133 // PreviousPage to set next page. Speed up the navigation. 01134 PreviousPage = PAGE_STBY_RC_MODE; 01135 MenuSetPage( PAGE_RADIO_PARAM ); 01136 } 01137 break; 01138 01139 case PAGE_STBY_XOSC_MODE: 01140 if( graphObjectTouched == BTN7_BORDER ) 01141 { 01142 StopDemoApplication( ); 01143 Eeprom.EepromData.DemoSettings.HoldDemo = true; 01144 PreviousPage = PAGE_RADIO_TEST; // clear Previous page 01145 MenuSetPage( PAGE_RADIO_TEST ); 01146 } 01147 else if( graphObjectTouched == BTN8_BORDER ) 01148 { 01149 if( Eeprom.EepromData.DemoSettings.HoldDemo == true ) 01150 { 01151 Eeprom.EepromData.DemoSettings.HoldDemo = false; 01152 StopDemoApplication( ); 01153 ButtonChangeText( BTN8_BORDER, ( uint8_t* )" STOP", NULL ); 01154 RunDemoStandbyXoscMode( ); 01155 } 01156 else 01157 { 01158 Eeprom.EepromData.DemoSettings.HoldDemo = true; 01159 StopDemoApplication( ); 01160 ButtonChangeText( BTN8_BORDER, ( uint8_t* )" START", NULL ); 01161 } 01162 } 01163 else if( graphObjectTouched == BTN9_BORDER ) 01164 { 01165 Eeprom.EepromData.DemoSettings.HoldDemo = true; 01166 StopDemoApplication( ); 01167 // "CANCEL" or "OK & SAVE" button of PAGE_RADIO_PARAM use 01168 // PreviousPage to set next page. Speed up the navigation. 01169 PreviousPage = PAGE_STBY_XOSC_MODE; 01170 MenuSetPage( PAGE_RADIO_PARAM ); 01171 } 01172 break; 01173 01174 case PAGE_TX_CW: 01175 if( graphObjectTouched == BTN7_BORDER ) 01176 { 01177 StopDemoApplication( ); 01178 Eeprom.EepromData.DemoSettings.HoldDemo = true; 01179 PreviousPage = PAGE_RADIO_TEST; // clear Previous page 01180 MenuSetPage( PAGE_RADIO_TEST ); 01181 } 01182 else if( graphObjectTouched == BTN8_BORDER ) 01183 { 01184 if( Eeprom.EepromData.DemoSettings.HoldDemo == true ) 01185 { 01186 Eeprom.EepromData.DemoSettings.HoldDemo = false; 01187 StopDemoApplication( ); 01188 ButtonChangeText( BTN8_BORDER, ( uint8_t* )" STOP", NULL ); 01189 RunDemoTxCw( ); 01190 } 01191 else 01192 { 01193 Eeprom.EepromData.DemoSettings.HoldDemo = true; 01194 StopDemoApplication( ); 01195 ButtonChangeText( BTN8_BORDER, ( uint8_t* )" START", NULL ); 01196 } 01197 } 01198 else if( graphObjectTouched == BTN9_BORDER ) 01199 { 01200 Eeprom.EepromData.DemoSettings.HoldDemo = true; 01201 StopDemoApplication( ); 01202 // "CANCEL" or "OK & SAVE" button of PAGE_RADIO_PARAM use 01203 // PreviousPage to set next page. Speed up the navigation. 01204 PreviousPage = PAGE_TX_CW; 01205 MenuSetPage( PAGE_RADIO_PARAM ); 01206 } 01207 break; 01208 01209 case PAGE_CONT_MODULATION: 01210 if( graphObjectTouched == BTN7_BORDER ) 01211 { 01212 StopDemoApplication( ); 01213 Eeprom.EepromData.DemoSettings.HoldDemo = true; 01214 PreviousPage = PAGE_RADIO_TEST; // clear Previous page 01215 MenuSetPage( PAGE_RADIO_TEST ); 01216 } 01217 else if( graphObjectTouched == BTN8_BORDER ) 01218 { 01219 if( Eeprom.EepromData.DemoSettings.HoldDemo == true ) 01220 { 01221 Eeprom.EepromData.DemoSettings.HoldDemo = false; 01222 StopDemoApplication( ); 01223 ButtonChangeText( BTN8_BORDER, ( uint8_t* )" STOP", NULL ); 01224 RunDemoTxContinuousModulation( ); 01225 } 01226 else 01227 { 01228 Eeprom.EepromData.DemoSettings.HoldDemo = true; 01229 StopDemoApplication( ); 01230 ButtonChangeText( BTN8_BORDER, ( uint8_t* )" START", NULL ); 01231 wait_ms( 200 ); // debouncing of the touch screen 01232 } 01233 } 01234 else if( graphObjectTouched == BTN9_BORDER ) 01235 { 01236 Eeprom.EepromData.DemoSettings.HoldDemo = true; 01237 StopDemoApplication( ); 01238 // "CANCEL" or "OK & SAVE" button of PAGE_RADIO_PARAM use 01239 // PreviousPage to set next page. Speed up the navigation. 01240 PreviousPage = PAGE_CONT_MODULATION; 01241 MenuSetPage( PAGE_RADIO_PARAM ); 01242 } 01243 break; 01244 case PAGE_CONT_RX: 01245 if( graphObjectTouched == BTN7_BORDER ) 01246 { 01247 StopDemoApplication( ); 01248 Eeprom.EepromData.DemoSettings.HoldDemo = true; 01249 PreviousPage = PAGE_RADIO_TEST; // clear Previous page 01250 MenuSetPage( PAGE_RADIO_TEST ); 01251 } 01252 else if( graphObjectTouched == BTN8_BORDER ) 01253 { 01254 if( Eeprom.EepromData.DemoSettings.HoldDemo == true ) 01255 { 01256 Eeprom.EepromData.DemoSettings.HoldDemo = false; 01257 StopDemoApplication( ); 01258 ButtonChangeText( BTN8_BORDER, ( uint8_t* )" STOP", NULL ); 01259 RunDemoRxContinuous( ); 01260 } 01261 else 01262 { 01263 Eeprom.EepromData.DemoSettings.HoldDemo = true; 01264 StopDemoApplication( ); 01265 ButtonChangeText( BTN8_BORDER, ( uint8_t* )" START", NULL ); 01266 } 01267 } 01268 else if( graphObjectTouched == BTN9_BORDER ) 01269 { 01270 Eeprom.EepromData.DemoSettings.HoldDemo = true; 01271 StopDemoApplication( ); 01272 // "CANCEL" or "OK & SAVE" button of PAGE_RADIO_PARAM use 01273 // PreviousPage to set next page. Speed up the navigation. 01274 PreviousPage = PAGE_CONT_RX; 01275 MenuSetPage( PAGE_RADIO_PARAM ); 01276 } 01277 break; 01278 } 01279 } 01280 return CurrentPage; 01281 } 01282 01283 void MenuSetPage( uint8_t page ) 01284 { 01285 if( page != CurrentPage ) 01286 { 01287 // remove all button and text (except title, page border and line) 01288 // and disable all button (touchActive = false). 01289 GraphObject_t clearRect = { NULL, GO_RECTANGLE, 3, 35, 282, 230, 1, \ 01290 BACK_COLOR, BACK_COLOR, true, BACK_COLOR, \ 01291 NULL, false }; 01292 01293 GraphObjectClear( &clearRect, true ); 01294 for( uint8_t i = 0; i < GRAPH_OBJECTS_COUNT; i++ ) 01295 { 01296 MenuObjects[i].TouchActive = false; 01297 } 01298 } 01299 01300 switch( page ) 01301 { 01302 case START_PAGE: 01303 if( DeviceConnected == SX1261 ) 01304 { 01305 if( MatchingFreq == MATCHING_FREQ_915 ) 01306 { 01307 DrawText( TITLE_TEXT, ( uint8_t* )" SX1261 915MHz Demo Kit", NULL, NULL ); 01308 } 01309 else if( MatchingFreq == MATCHING_FREQ_868 ) 01310 { 01311 DrawText( TITLE_TEXT, ( uint8_t* )" SX1261 868MHz Demo Kit", NULL, NULL ); 01312 } 01313 } 01314 else if( DeviceConnected == SX1262 ) 01315 { 01316 if( MatchingFreq == MATCHING_FREQ_915 ) 01317 { 01318 DrawText( TITLE_TEXT, ( uint8_t* )" SX1262 915MHz Demo Kit", NULL, NULL ); 01319 } 01320 else if( MatchingFreq == MATCHING_FREQ_868 ) 01321 { 01322 DrawText( TITLE_TEXT, ( uint8_t* )" SX1262 868MHz Demo Kit", NULL, NULL ); 01323 } 01324 } 01325 else if( DeviceConnected == SX1268 ) 01326 { 01327 if( MatchingFreq == MATCHING_FREQ_780 ) 01328 { 01329 DrawText( TITLE_TEXT, ( uint8_t* )" SX1268 780MHz Demo Kit", NULL, NULL ); 01330 } 01331 else if( MatchingFreq == MATCHING_FREQ_490 ) 01332 { 01333 DrawText( TITLE_TEXT, ( uint8_t* )" SX1268 490MHz Demo Kit", NULL, NULL ); 01334 } 01335 } 01336 01337 DisplayDriverDrawLogo( SemtechLogo, 20, 37 ); 01338 DrawActiveButton( BTN2_BORDER, ( uint8_t* )"DEMO Ping Pong", NULL ); 01339 DrawActiveButton( BTN3_BORDER, ( uint8_t* )"DEMO PER", NULL ); 01340 DrawActiveButton( BTN4_BORDER, ( uint8_t* )"Radio Test Modes", NULL ); 01341 DrawActiveButton( BTN5_BORDER, ( uint8_t* )"Radio Settings", NULL ); 01342 DrawActiveButton( BTN6_BORDER, ( uint8_t* )"Utilities", NULL ); 01343 CurrentPage = START_PAGE; 01344 break; 01345 01346 case PAGE_PING_PONG: 01347 if( CurrentPage == PAGE_PING_PONG ) 01348 { 01349 if( Eeprom.EepromData.DemoSettings.HoldDemo == true ) 01350 { 01351 ButtonChangeText( BTN8_BORDER, ( uint8_t* )" START", NULL ); 01352 } 01353 if( Eeprom.EepromData.DemoSettings.Entity == MASTER ) 01354 { 01355 DrawText( LINE4_COL0_TEXT, NULL, ( uint8_t* )GetMenuDemoRxOkSlave( ), ( uint8_t* )GetMenuDemoRxOk( ) ); 01356 DrawText( LINE5_COL0_TEXT, NULL, ( uint8_t* )GetMenuDemoRxKoSlave( ), ( uint8_t* )GetMenuDemoRxKo( ) ); 01357 DrawText( LINE6_COL0_TEXT, NULL, ( uint8_t* )GetMenuDemoResultPerCent1( Eeprom.EepromData.DemoSettings.CntPacketRxOKSlave, Eeprom.EepromData.DemoSettings.CntPacketRxOKSlave + Eeprom.EepromData.DemoSettings.CntPacketRxKOSlave ), \ 01358 ( uint8_t* )GetMenuDemoResultPerCent2( Eeprom.EepromData.DemoSettings.CntPacketRxOK, Eeprom.EepromData.DemoSettings.CntPacketRxOK + Eeprom.EepromData.DemoSettings.CntPacketRxKO + Eeprom.EepromData.DemoSettings.RxTimeOutCount ) ); 01359 DrawText( LINE7_COL0_TEXT, NULL, ( uint8_t* )GetMenuDemoResultPerCent1( Eeprom.EepromData.DemoSettings.CntPacketRxKOSlave, Eeprom.EepromData.DemoSettings.CntPacketRxOKSlave + Eeprom.EepromData.DemoSettings.CntPacketRxKOSlave ), \ 01360 ( uint8_t* )GetMenuDemoResultPerCent2( Eeprom.EepromData.DemoSettings.CntPacketRxKO + Eeprom.EepromData.DemoSettings.RxTimeOutCount, Eeprom.EepromData.DemoSettings.CntPacketRxOK + Eeprom.EepromData.DemoSettings.CntPacketRxKO + Eeprom.EepromData.DemoSettings.RxTimeOutCount ) ); 01361 DrawText( LINE8_COL0_TEXT, NULL, ( uint8_t* )" ", ( uint8_t* )GetMenuDemoRssi( ) ); 01362 DrawText( LINE9_COL0_TEXT, NULL, ( uint8_t* )" ", ( uint8_t* )GetMenuDemoSnr( ) ); 01363 } 01364 else 01365 { 01366 DrawText( LINE4_COL0_TEXT, NULL, ( uint8_t* )GetMenuDemoRxOk( ), NULL ); 01367 DrawText( LINE5_COL0_TEXT, NULL, ( uint8_t* )GetMenuDemoRxKo( ), NULL ); 01368 DrawText( LINE6_COL0_TEXT, NULL, ( uint8_t* )GetMenuDemoResultPerCent1( Eeprom.EepromData.DemoSettings.CntPacketRxOK, Eeprom.EepromData.DemoSettings.CntPacketRxOK + Eeprom.EepromData.DemoSettings.CntPacketRxKO + Eeprom.EepromData.DemoSettings.RxTimeOutCount ), NULL ); 01369 DrawText( LINE7_COL0_TEXT, NULL, ( uint8_t* )GetMenuDemoResultPerCent1( Eeprom.EepromData.DemoSettings.CntPacketRxKO + Eeprom.EepromData.DemoSettings.RxTimeOutCount, Eeprom.EepromData.DemoSettings.CntPacketRxOK + Eeprom.EepromData.DemoSettings.CntPacketRxKO + Eeprom.EepromData.DemoSettings.RxTimeOutCount ), NULL ); 01370 DrawText( LINE8_COL0_TEXT, NULL, ( uint8_t* )GetMenuDemoRssi( ), NULL ); 01371 DrawText( LINE9_COL0_TEXT, NULL, ( uint8_t* )GetMenuDemoSnr( ), NULL ); 01372 } 01373 } 01374 else 01375 { 01376 DrawText( TITLE_TEXT, ( uint8_t* )" PING PONG Demo", NULL, NULL ); 01377 DisplayCurrentRadioParams( PAGE_PING_PONG ); 01378 DrawText( LINE3_COL0_TEXT, ( uint8_t* )GetTotalPackets( ), ( uint8_t* )" SLAVE", NULL ); 01379 DrawText( LINE4_COL0_TEXT, ( uint8_t* )"Rx OK", ( uint8_t* )" 0", NULL ); 01380 DrawText( LINE5_COL0_TEXT, ( uint8_t* )"Rx KO", ( uint8_t* )" 0", NULL ); 01381 DrawText( LINE6_COL0_TEXT, ( uint8_t* )"Rx PSR", ( uint8_t* )" 0.00", NULL ); 01382 DrawText( LINE7_COL0_TEXT, ( uint8_t* )"Rx PER", ( uint8_t* )" 0.00", NULL ); 01383 01384 if( Eeprom.EepromData.DemoSettings.Entity == MASTER ) 01385 { 01386 DrawActiveButton( BTN0_BORDER, ( uint8_t* )" MASTER", NULL ); 01387 DrawText( LINE3_COL0_TEXT, NULL, NULL, ( uint8_t* )"MASTER" ); 01388 DrawText( LINE4_COL0_TEXT, NULL, NULL, ( uint8_t* )" 0" ); 01389 DrawText( LINE5_COL0_TEXT, NULL, NULL, ( uint8_t* )" 0" ); 01390 DrawText( LINE6_COL0_TEXT, NULL, NULL, ( uint8_t* )" 0.00" ); 01391 DrawText( LINE7_COL0_TEXT, NULL, NULL, ( uint8_t* )" 0.00" ); 01392 DrawText( LINE8_COL0_TEXT, ( uint8_t* )"Last Rssi", ( uint8_t* )" ", ( uint8_t* )" 0" ); 01393 DrawText( LINE9_COL0_TEXT, ( uint8_t* )"Last SNR", ( uint8_t* )" ", ( uint8_t* )" 0" ); 01394 } 01395 else 01396 { 01397 DrawText( LINE8_COL0_TEXT, ( uint8_t* )"Last Rssi", ( uint8_t* )" 0", ( uint8_t* )" "); 01398 DrawText( LINE9_COL0_TEXT, ( uint8_t* )"Last SNR", ( uint8_t* )" 0", ( uint8_t* )" " ); 01399 DrawActiveButton( BTN0_BORDER, ( uint8_t* )" SLAVE", NULL ); 01400 } 01401 DrawActiveButton( BTN7_BORDER, ( uint8_t* )" BACK", NULL ); 01402 DrawActiveButton( BTN8_BORDER, ( uint8_t* )" START", NULL ); 01403 DrawActiveButton( BTN9_BORDER, ( uint8_t* )" SETTINGS", NULL ); 01404 } 01405 CurrentPage = PAGE_PING_PONG; 01406 break; 01407 case PAGE_PER: 01408 if( CurrentPage == PAGE_PER ) 01409 { 01410 if( Eeprom.EepromData.DemoSettings.HoldDemo == true ) 01411 { 01412 ButtonChangeText( BTN8_BORDER, ( uint8_t* )" START", NULL ); 01413 } 01414 if( Eeprom.EepromData.DemoSettings.Entity == MASTER ) 01415 { 01416 DrawText( LINE4_COL0_TEXT, NULL, ( uint8_t* )GetMenuDemoNumSentPacket( ), NULL ); 01417 } 01418 else 01419 { 01420 DrawText( LINE4_COL0_TEXT, NULL, ( uint8_t* )GetMenuDemoRxOk( ), NULL ); 01421 DrawText( LINE5_COL0_TEXT, NULL, ( uint8_t* )GetMenuDemoRxKo( ), NULL ); 01422 DrawText( LINE6_COL0_TEXT, NULL, ( uint8_t* )GetMenuDemoResultPerCent1( Eeprom.EepromData.DemoSettings.CntPacketRxKO + Eeprom.EepromData.DemoSettings.RxTimeOutCount, Eeprom.EepromData.DemoSettings.CntPacketRxOK + Eeprom.EepromData.DemoSettings.CntPacketRxKO + Eeprom.EepromData.DemoSettings.RxTimeOutCount ), NULL ); 01423 DrawText( LINE7_COL0_TEXT, NULL, ( uint8_t* )GetMenuDemoFreqError( ), NULL ); 01424 DrawText( LINE8_COL0_TEXT, NULL, ( uint8_t* )GetMenuDemoRssi( ), NULL ); 01425 DrawText( LINE9_COL0_TEXT, NULL, ( uint8_t* )GetMenuDemoSnr( ), NULL ); 01426 } 01427 } 01428 else 01429 { 01430 DrawText( TITLE_TEXT, ( uint8_t* )" PER Demo", NULL, NULL ); 01431 DrawText( LINE3_COL0_TEXT, ( uint8_t* )"Test Total", ( uint8_t* )GetMenuDemoMaxNumPacket( ), NULL ); 01432 DisplayCurrentRadioParams( PAGE_PER ); 01433 01434 if( Eeprom.EepromData.DemoSettings.Entity == MASTER ) 01435 { 01436 DrawActiveButton( BTN0_BORDER, ( uint8_t* )" MASTER", NULL ); 01437 DrawText( LINE4_COL0_TEXT, ( uint8_t* )"Transmitted", ( uint8_t* )GetMenuDemoNumSentPacket( ), NULL ); 01438 } 01439 else 01440 { 01441 DrawActiveButton( BTN0_BORDER, ( uint8_t* )" SLAVE", NULL ); 01442 DrawText( LINE4_COL0_TEXT, ( uint8_t* )"Rx OK", ( uint8_t* )" 0", NULL ); 01443 DrawText( LINE5_COL0_TEXT, ( uint8_t* )"Rx KO", ( uint8_t* )" 0", NULL ); 01444 DrawText( LINE6_COL0_TEXT, ( uint8_t* )"PER", ( uint8_t* )" 0.00", NULL ); 01445 DrawText( LINE7_COL0_TEXT, ( uint8_t* )"Freq Err", ( uint8_t* )" 0", NULL ); 01446 DrawText( LINE8_COL0_TEXT, ( uint8_t* )"Last Rssi", ( uint8_t* )" 0", NULL ); 01447 DrawText( LINE9_COL0_TEXT, ( uint8_t* )"Last SNR", ( uint8_t* )" 0", NULL ); 01448 } 01449 DrawActiveButton( BTN7_BORDER, ( uint8_t* )" BACK", NULL ); 01450 DrawActiveButton( BTN8_BORDER, ( uint8_t* )" START", NULL ); 01451 DrawActiveButton( BTN9_BORDER, ( uint8_t* )" SETTINGS", NULL ); 01452 } 01453 CurrentPage = PAGE_PER; 01454 break; 01455 01456 case PAGE_RADIO_PARAM: 01457 if( ErrorParam == true ) 01458 { 01459 MenuObjects[BTN3_VALUE_TEXT].FrontColor = OBJECT_ERROR; 01460 MenuObjects[BTN4_VALUE_TEXT].FrontColor = OBJECT_ERROR; 01461 MenuObjects[BTN6_VALUE_TEXT].FrontColor = OBJECT_ERROR; 01462 } 01463 if( CurrentPage != PAGE_RADIO_PARAM ) 01464 { 01465 DrawText( TITLE_TEXT, ( uint8_t* )" Radio Settings", NULL, NULL ); 01466 DrawActiveButton( BTN0_BORDER, ( uint8_t* )"Mod:", ( uint8_t* )GetMenuRadioFrameType( ) ); 01467 DrawActiveButton( BTN1_BORDER, ( uint8_t* )"Freq:", ( uint8_t* )GetRadioFrequency( ) ); 01468 DrawActiveButton( BTN2_BORDER, ( uint8_t* )"Tx Pow:", ( uint8_t* )GetRadioTxPower( ) ); 01469 DrawActiveButton( BTN3_BORDER, ( uint8_t* )"Param 1:", ( uint8_t* )GetRadioModulationParameters1( ) ); 01470 DrawActiveButton( BTN4_BORDER, ( uint8_t* )"Param 2:", ( uint8_t* )GetRadioModulationParameters2( ) ); 01471 DrawActiveButton( BTN5_BORDER, ( uint8_t* )"Param 3:", ( uint8_t* )GetRadioModulationParameters3( ) ); 01472 DrawActiveButton( BTN6_BORDER, ( uint8_t* )"Param 4:", ( uint8_t* )GetRadioModulationParameters4( ) ); 01473 DrawActiveButton( BTN7_BORDER, ( uint8_t* )" CANCEL", NULL ); 01474 DrawActiveButton( BTN8_BORDER, ( uint8_t* )" OK & SAVE", NULL ); 01475 DrawActiveButton( BTN9_BORDER, ( uint8_t* )"PL:", ( uint8_t* )GetRadioPayloadLength( ) ); 01476 } 01477 MenuObjects[BTN3_VALUE_TEXT].FrontColor = TEXT_VALUE; 01478 MenuObjects[BTN4_VALUE_TEXT].FrontColor = TEXT_VALUE; 01479 MenuObjects[BTN6_VALUE_TEXT].FrontColor = TEXT_VALUE; 01480 CurrentPage = PAGE_RADIO_PARAM; 01481 break; 01482 01483 case PAGE_RADIO_PARAM_FREQ: 01484 if( CurrentPage != PAGE_RADIO_PARAM_FREQ ) 01485 { 01486 DrawText( TITLE_TEXT, ( uint8_t* )" Radio Settings : Freq", NULL, NULL ); 01487 DrawActiveButton( BTN0_BORDER, ( uint8_t* )" OK", NULL ); 01488 DrawActiveButton( BTN2_BORDER, ( uint8_t* )"Freq:", ( uint8_t* )GetRadioFrequency( ) ); 01489 DrawActiveButton( BTN3_BORDER, ( uint8_t* )"Preset1:", ( uint8_t* )GetRadioFreqBasePS1( ) ); 01490 DrawActiveButton( BTN4_BORDER, ( uint8_t* )"Preset2:", ( uint8_t* )GetRadioFreqBasePS2( ) ); 01491 DrawActiveButton( BTN5_BORDER, ( uint8_t* )"Preset3:", ( uint8_t* )GetRadioFreqBasePS3( ) ); 01492 DrawActiveButton( BTN6_BORDER, ( uint8_t* )"Step:", ( uint8_t* )GetRadioFreqBase( ) ); 01493 DrawActiveButton( BTN7_BORDER, ( uint8_t* )" -", NULL ); 01494 DrawActiveButton( BTN8_BORDER, ( uint8_t* )" +", NULL ); 01495 } 01496 CurrentPage = PAGE_RADIO_PARAM_FREQ; 01497 break; 01498 01499 case PAGE_UTILITIES: 01500 if( CurrentPage != PAGE_UTILITIES ) 01501 { 01502 DrawText( TITLE_TEXT, ( uint8_t* )" Utilities", NULL, NULL ); 01503 // FIRMWARE_VERSION is defined in DemoApplication.h 01504 DrawText( LINE0_TEXT, ( uint8_t* )FIRMWARE_VERSION, NULL, NULL ); 01505 01506 DrawActiveButton( BTN0_BORDER, ( uint8_t* )"Fact. Reset", NULL ); 01507 DrawActiveButton( BTN3_BORDER, ( uint8_t* )"RxBoost:", ( uint8_t* )GetMenuDemoRadioBoostedRx( ) ); 01508 DrawActiveButton( BTN4_BORDER, ( uint8_t* )"DC Reg: ", ( uint8_t* )GetMenuDemoRadioPowerMode( ) ); 01509 DrawActiveButton( BTN5_BORDER, ( uint8_t* )"Packets:", ( uint8_t* )GetMenuDemoMaxNumPacket( ) ); 01510 DrawActiveButton( BTN7_BORDER, ( uint8_t* )" CANCEL", NULL ); 01511 DrawActiveButton( BTN8_BORDER, ( uint8_t* )" OK & SAVE", NULL ); 01512 } 01513 CurrentPage = PAGE_UTILITIES; 01514 break; 01515 01516 case PAGE_RADIO_TEST: 01517 DrawText( TITLE_TEXT, ( uint8_t* )" Radio Test Modes", NULL, NULL ); 01518 DrawActiveButton( BTN0b_BORDER, ( uint8_t* )" Sleep Mode", NULL ); 01519 DrawActiveButton( BTN1_BORDER, ( uint8_t* )" Standby RC Mode", NULL ); 01520 DrawActiveButton( BTN2_BORDER, ( uint8_t* )" Standby XOSC Mode", NULL ); 01521 DrawActiveButton( BTN3_BORDER, ( uint8_t* )" Set Tx CW", NULL ); 01522 DrawActiveButton( BTN4_BORDER, ( uint8_t* )" Set Cont. Modulation", NULL ); 01523 DrawActiveButton( BTN5_BORDER, ( uint8_t* )" Set Cont. Receive", NULL ); 01524 DrawActiveButton( BTN6_BORDER, ( uint8_t* )" Test Rssi ", NULL ); 01525 DrawActiveButton( BTN7_BORDER, ( uint8_t* )" BACK", NULL ); 01526 CurrentPage = PAGE_RADIO_TEST; 01527 break; 01528 01529 case PAGE_RSSI_TEST: 01530 if( CurrentPage == PAGE_RSSI_TEST ) 01531 { 01532 if( Eeprom.EepromData.DemoSettings.HoldDemo == true ) 01533 { 01534 ButtonChangeText( BTN8_BORDER, ( uint8_t* )" START", NULL ); 01535 } 01536 DrawText( LINE6_COL0_TEXT, NULL, ( uint8_t* )GetMenuDemoRssi( ), NULL ); 01537 } 01538 else 01539 { 01540 DrawText( TITLE_TEXT, ( uint8_t* )" Test Rssi ", NULL, NULL ); 01541 DisplayCurrentRadioParams( PAGE_CONT_RX ); 01542 DrawText( LINE6_COL0_TEXT, ( uint8_t* )"Rssi", ( uint8_t* )" 0.00", NULL ); 01543 DrawActiveButton( BTN7_BORDER, ( uint8_t* )" BACK", NULL ); 01544 DrawActiveButton( BTN8_BORDER, ( uint8_t* )" START", NULL ); 01545 DrawActiveButton( BTN9_BORDER, ( uint8_t* )" SETTINGS", NULL ); 01546 } 01547 CurrentPage = PAGE_RSSI_TEST; 01548 break; 01549 01550 case PAGE_SLEEP_MODE: 01551 if( CurrentPage != PAGE_SLEEP_MODE ) 01552 { 01553 DrawText( TITLE_TEXT, ( uint8_t* )" Sleep Mode", NULL, NULL ); 01554 DisplayCurrentRadioParams( PAGE_SLEEP_MODE ); 01555 DrawActiveButton( BTN7_BORDER, ( uint8_t* )" BACK", NULL ); 01556 DrawActiveButton( BTN8_BORDER, ( uint8_t* )" START", NULL ); 01557 DrawActiveButton( BTN9_BORDER, ( uint8_t* )" SETTINGS", NULL ); 01558 CurrentPage = PAGE_SLEEP_MODE; 01559 } 01560 break; 01561 01562 case PAGE_STBY_RC_MODE: 01563 if( CurrentPage != PAGE_STBY_RC_MODE ) 01564 { 01565 DrawText( TITLE_TEXT, ( uint8_t* )" Standby RC Mode", NULL, NULL ); 01566 DisplayCurrentRadioParams( PAGE_STBY_RC_MODE ); 01567 DrawActiveButton( BTN7_BORDER, ( uint8_t* )" BACK", NULL ); 01568 DrawActiveButton( BTN8_BORDER, ( uint8_t* )" START", NULL ); 01569 DrawActiveButton( BTN9_BORDER, ( uint8_t* )" SETTINGS", NULL ); 01570 CurrentPage = PAGE_STBY_RC_MODE; 01571 } 01572 break; 01573 01574 case PAGE_STBY_XOSC_MODE: 01575 if( CurrentPage != PAGE_STBY_XOSC_MODE ) 01576 { 01577 DrawText( TITLE_TEXT, ( uint8_t* )" Standby XOSC Mode", NULL, NULL ); 01578 DisplayCurrentRadioParams( PAGE_STBY_XOSC_MODE ); 01579 DrawActiveButton( BTN7_BORDER, ( uint8_t* )" BACK", NULL ); 01580 DrawActiveButton( BTN8_BORDER, ( uint8_t* )" START", NULL ); 01581 DrawActiveButton( BTN9_BORDER, ( uint8_t* )" SETTINGS", NULL ); 01582 CurrentPage = PAGE_STBY_XOSC_MODE; 01583 } 01584 break; 01585 01586 case PAGE_TX_CW: 01587 if( CurrentPage != PAGE_TX_CW ) 01588 { 01589 DrawText( TITLE_TEXT, ( uint8_t* )" Set Tx CW", NULL, NULL ); 01590 DisplayCurrentRadioParams( PAGE_TX_CW ); 01591 DrawActiveButton( BTN7_BORDER, ( uint8_t* )" BACK", NULL ); 01592 DrawActiveButton( BTN8_BORDER, ( uint8_t* )" START", NULL ); 01593 DrawActiveButton( BTN9_BORDER, ( uint8_t* )" SETTINGS", NULL ); 01594 CurrentPage = PAGE_TX_CW; 01595 } 01596 break; 01597 01598 case PAGE_CONT_MODULATION: 01599 if( CurrentPage != PAGE_CONT_MODULATION ) 01600 { 01601 DrawText( TITLE_TEXT, ( uint8_t* )" Set Cont. Modulation", NULL, NULL ); 01602 DisplayCurrentRadioParams( PAGE_CONT_MODULATION ); 01603 DrawActiveButton( BTN7_BORDER, ( uint8_t* )" BACK", NULL ); 01604 DrawActiveButton( BTN8_BORDER, ( uint8_t* )" START", NULL ); 01605 DrawActiveButton( BTN9_BORDER, ( uint8_t* )" SETTINGS", NULL ); 01606 CurrentPage = PAGE_CONT_MODULATION; 01607 } 01608 break; 01609 01610 case PAGE_CONT_RX: 01611 if( CurrentPage == PAGE_CONT_RX ) 01612 { 01613 if( Eeprom.EepromData.DemoSettings.HoldDemo == true ) 01614 { 01615 ButtonChangeText( BTN8_BORDER, ( uint8_t* )" START", NULL ); 01616 } 01617 DrawText( LINE4_COL0_TEXT, NULL, ( uint8_t* )GetMenuDemoRxOk( ), NULL ); 01618 DrawText( LINE5_COL0_TEXT, NULL, ( uint8_t* )GetMenuDemoRxKo( ), NULL ); 01619 DrawText( LINE6_COL0_TEXT, NULL, ( uint8_t* )GetMenuDemoResultPerCent1( Eeprom.EepromData.DemoSettings.CntPacketRxKO, Eeprom.EepromData.DemoSettings.CntPacketRxOK + Eeprom.EepromData.DemoSettings.CntPacketRxKO ), NULL ); 01620 DrawText( LINE7_COL0_TEXT, NULL, ( uint8_t* )GetMenuDemoFreqError( ), NULL ); 01621 DrawText( LINE8_COL0_TEXT, NULL, ( uint8_t* )GetMenuDemoRssi( ), NULL ); 01622 DrawText( LINE9_COL0_TEXT, NULL, ( uint8_t* )GetMenuDemoSnr( ), NULL ); 01623 } 01624 else 01625 { 01626 DrawText( TITLE_TEXT, ( uint8_t* )" Set Cont. Rx ", NULL, NULL ); 01627 DisplayCurrentRadioParams( PAGE_CONT_RX ); 01628 DrawText( LINE4_COL0_TEXT, ( uint8_t* )"Rx OK", ( uint8_t* )" 0", NULL ); 01629 DrawText( LINE5_COL0_TEXT, ( uint8_t* )"Rx KO", ( uint8_t* )" 0", NULL ); 01630 DrawText( LINE6_COL0_TEXT, ( uint8_t* )"PER", ( uint8_t* )" 0.00", NULL ); 01631 DrawText( LINE7_COL0_TEXT, ( uint8_t* )"Freq Err", ( uint8_t* )" 0", NULL ); 01632 DrawText( LINE8_COL0_TEXT, ( uint8_t* )"Last Rssi", ( uint8_t* )" 0", NULL ); 01633 DrawText( LINE9_COL0_TEXT, ( uint8_t* )"Last SNR", ( uint8_t* )" 0", NULL ); 01634 DrawActiveButton( BTN7_BORDER, ( uint8_t* )" BACK", NULL ); 01635 DrawActiveButton( BTN8_BORDER, ( uint8_t* )" START", NULL ); 01636 DrawActiveButton( BTN9_BORDER, ( uint8_t* )" SETTINGS", NULL ); 01637 } 01638 CurrentPage = PAGE_CONT_RX; 01639 break; 01640 01641 default: 01642 break; 01643 } 01644 } 01645 01646 void DisplayCurrentRadioParams( uint8_t page ) 01647 { 01648 switch( page ) 01649 { 01650 case PAGE_SLEEP_MODE: 01651 case PAGE_STBY_RC_MODE: 01652 case PAGE_STBY_XOSC_MODE: 01653 case PAGE_TX_CW: 01654 // Do display different without packet settings (no modulation here) 01655 // 2 + (9) + 4 + (7) = 22 (=<28 : ok) 01656 sprintf( StringText ,"f:%s, P:%s", GetRadioFrequencyMHz( ), GetRadioTxPower( ) ); // StringText3 + StringText2 01657 DrawText( LINE0_TEXT, ( uint8_t* )StringText, NULL, NULL); 01658 sprintf( StringText ,"Radio Power Mode: %s", ( uint8_t* )GetMenuDemoRadioPowerMode( ) + 2 ); 01659 DrawText( LINE1_TEXT, ( uint8_t* )StringText, NULL, NULL); 01660 sprintf( StringText ,"Press START to launch test" ); 01661 DrawText( LINE3_TEXT, ( uint8_t* )StringText, NULL, NULL); 01662 break; 01663 01664 case PAGE_CONT_MODULATION: 01665 // 2 + (9) + 4 + (7) + 2 + (4) = 28 (=<28 : ok) 01666 sprintf( StringText ,"f:%s, P:%s, %s", GetRadioFrequencyMHz( ), GetRadioTxPower( ), \ 01667 ( uint8_t* )GetMenuDemoRadioPowerMode( ) + 2 ); // StringText3 + StringText2 01668 DrawText( LINE0_TEXT, ( uint8_t* )StringText, NULL, NULL); 01669 if( Eeprom.EepromData.DemoSettings.ModulationType == PACKET_TYPE_LORA ) 01670 { 01671 // (5) + 2 + (4) + 2 + (12) = 25 (=<28 : ok) 01672 sprintf( StringText ,"%s: %s, %s", GetMenuRadioFrameType( ) + 1, \ 01673 GetRadioModulationParameters1( ), 01674 GetRadioModulationParameters4( ) ); // StringText2 01675 } 01676 else 01677 { 01678 if( ErrorParam == true ) 01679 { 01680 MenuObjects[LINE1_TEXT].FrontColor = OBJECT_ERROR; 01681 MenuObjects[LINE2_TEXT].FrontColor = OBJECT_ERROR; 01682 } 01683 // (4) + 2 + (10) + 1 + (11) = 28 (=<28 : ok) 01684 sprintf( StringText ,"%s: %s/%s", GetMenuRadioFrameType( ) + 1, \ 01685 GetRadioModulationParameters1( ), \ 01686 GetRadioModulationParameters4( ) ); // StringText2 01687 } 01688 DrawText( LINE1_TEXT, ( uint8_t* )StringText, NULL, NULL); 01689 // (10) + 2 + (10) = 22 (=<28 : ok) 01690 sprintf( StringText ,"%s, %s", GetRadioModulationParameters2( ), \ 01691 GetRadioModulationParameters3( ) ); 01692 DrawText( LINE2_TEXT, ( uint8_t* )StringText, NULL, NULL); 01693 sprintf( StringText ,"Press START to launch test" ); 01694 DrawText( LINE4_TEXT, ( uint8_t* )StringText, NULL, NULL); 01695 MenuObjects[LINE1_TEXT].FrontColor = TEXT_COLOR; 01696 MenuObjects[LINE2_TEXT].FrontColor = TEXT_COLOR; 01697 break; 01698 01699 case PAGE_CONT_RX: // standart display 01700 case PAGE_PING_PONG: 01701 case PAGE_PER: 01702 // 2 + (9) + 4 + (7) = 22 (=<28 : ok) 01703 sprintf( StringText ,"f:%s, P:%s", GetRadioFrequencyMHz( ), GetRadioTxPower( ) ); // StringText3 + StringText2 01704 DrawText( LINE0_TEXT, ( uint8_t* )StringText, NULL, NULL); 01705 if( Eeprom.EepromData.DemoSettings.ModulationType == PACKET_TYPE_LORA ) 01706 { 01707 // (5) + 2 + (4) + 2 + (12) = 25 (=<28 : ok) 01708 sprintf( StringText ,"%s: %s, %s", GetMenuRadioFrameType( ) + 1, \ 01709 GetRadioModulationParameters1( ), 01710 GetRadioModulationParameters4( ) ); // StringText2 01711 } 01712 else 01713 { 01714 if( ErrorParam == true ) 01715 { 01716 MenuObjects[LINE1_TEXT].FrontColor = OBJECT_ERROR; 01717 MenuObjects[LINE2_TEXT].FrontColor = OBJECT_ERROR; 01718 } 01719 // (4) + 2 + (10) + 1 + (11) = 28 (=<28 : ok) 01720 sprintf( StringText ,"%s: %s/%s", GetMenuRadioFrameType( ) + 1, \ 01721 GetRadioModulationParameters1( ), \ 01722 GetRadioModulationParameters4( ) ); // StringText2 01723 } 01724 DrawText( LINE1_TEXT, ( uint8_t* )StringText, NULL, NULL); 01725 // 3 + (3) + 1 + (10) + 1 + (10) = 28 (=<28 : ok) 01726 sprintf( StringText ,"PL:%s/%s/%s", GetRadioPayloadLength( ), \ 01727 GetRadioModulationParameters2( ), \ 01728 GetRadioModulationParameters3( ) ); // StringText + StringText2 + StringText3 01729 DrawText( LINE2_TEXT, ( uint8_t* )StringText, NULL, NULL); 01730 MenuObjects[LINE1_TEXT].FrontColor = TEXT_COLOR; 01731 MenuObjects[LINE2_TEXT].FrontColor = TEXT_COLOR; 01732 break; 01733 } 01734 } 01735 01736 char* GetMenuRadioFrameType( void ) 01737 { 01738 switch( Eeprom.EepromData.DemoSettings.ModulationType ) 01739 { 01740 case PACKET_TYPE_GFSK: return ( char* )" GFSK"; 01741 case PACKET_TYPE_LORA: 01742 default: return ( char* )" LORA"; 01743 } 01744 } 01745 01746 char* GetRadioModulationParameters1( void ) 01747 { 01748 if( Eeprom.EepromData.DemoSettings.ModulationType == PACKET_TYPE_LORA ) 01749 { 01750 switch( Eeprom.EepromData.DemoSettings.ModulationParam1 ) 01751 { 01752 case LORA_SF5: return ( char* )"SF5"; 01753 case LORA_SF6: return ( char* )"SF6"; 01754 case LORA_SF7: return ( char* )"SF7"; 01755 case LORA_SF8: return ( char* )"SF8"; 01756 case LORA_SF9: return ( char* )"SF9"; 01757 case LORA_SF10: return ( char* )"SF10"; 01758 case LORA_SF11: return ( char* )"SF11"; 01759 case LORA_SF12: return ( char* )"SF12"; 01760 default: return ( char* )"X"; 01761 } 01762 } 01763 else // PACKET_TYPE_GFSK 01764 { 01765 // quicker than using a float (which is not optimized in MBED) 01766 sprintf( StringText2, "%3d.%1d kbps", \ 01767 Eeprom.EepromData.DemoSettings.ModulationParam1 / 1000, \ 01768 ( Eeprom.EepromData.DemoSettings.ModulationParam1 % 1000) / 100 ); 01769 return StringText2; 01770 } 01771 } 01772 01773 char* GetRadioModulationParameters2( void ) 01774 { 01775 if( Eeprom.EepromData.DemoSettings.ModulationType == PACKET_TYPE_LORA ) 01776 { 01777 switch( Eeprom.EepromData.DemoSettings.ModulationParam2 ) 01778 { 01779 case LORA_BW_500: return ( char* )"BW 500 kHz"; 01780 case LORA_BW_250: return ( char* )"BW 250 kHz"; 01781 case LORA_BW_125: return ( char* )"BW 125 kHz"; 01782 case LORA_BW_062: return ( char* )"BW 62 kHz"; 01783 case LORA_BW_041: return ( char* )"BW 41 kHz"; 01784 case LORA_BW_031: return ( char* )"BW 31 kHz"; 01785 case LORA_BW_020: return ( char* )"BW 20 kHz"; 01786 case LORA_BW_015: return ( char* )"BW 15 kHz"; 01787 case LORA_BW_010: return ( char* )"BW 10 kHz"; 01788 case LORA_BW_007: return ( char* )"BW 7 kHz"; 01789 default: return ( char* )"X"; 01790 } 01791 } 01792 else // Eeprom.EepromData.DemoSettings.ModulationType == PACKET_TYPE_GFSK 01793 { 01794 // quicker than using a float (which is not optimized in MBED) 01795 sprintf( StringText3, "Fd %3d kHz", \ 01796 Eeprom.EepromData.DemoSettings.ModulationParam2 / 1000 ); 01797 return StringText3; 01798 } 01799 } 01800 01801 char* GetRadioModulationParameters3( void ) 01802 { 01803 if( Eeprom.EepromData.DemoSettings.ModulationType == PACKET_TYPE_LORA ) 01804 { 01805 switch( Eeprom.EepromData.DemoSettings.ModulationParam3 ) 01806 { 01807 case LORA_CR_4_5: return ( char* )"CR 4/5"; 01808 case LORA_CR_4_6: return ( char* )"CR 4/6"; 01809 case LORA_CR_4_7: return ( char* )"CR 4/7"; 01810 case LORA_CR_4_8: return ( char* )"CR 4/8"; 01811 default: return ( char* )"X"; 01812 } 01813 } 01814 else // PACKET_TYPE_GFSK 01815 { 01816 switch( Eeprom.EepromData.DemoSettings.ModulationParam3 ) 01817 { 01818 case MOD_SHAPING_OFF: return ( char* )"NONE "; 01819 case MOD_SHAPING_G_BT_03: return ( char* )"G BT .3"; 01820 case MOD_SHAPING_G_BT_05: return ( char* )"G BT .5"; 01821 case MOD_SHAPING_G_BT_07: return ( char* )"G BT .7"; 01822 case MOD_SHAPING_G_BT_1: return ( char* )"G BT 1 "; 01823 default: return ( char* )"X"; 01824 } 01825 } 01826 } 01827 01828 char* GetRadioModulationParameters4( void ) 01829 { 01830 if( Eeprom.EepromData.DemoSettings.ModulationType == PACKET_TYPE_LORA ) 01831 { 01832 if( Eeprom.EepromData.DemoSettings.PacketParam2 == LORA_PACKET_FIXED_LENGTH ) 01833 { 01834 return ( char* )"Fixed length"; 01835 } 01836 else // RADIO_PACKET_VARIABLE_LENGTH 01837 { 01838 return ( char* )"Variable len"; 01839 } 01840 } 01841 else // Eeprom.EepromData.DemoSettings.ModulationType == PACKET_TYPE_GFSK 01842 { 01843 switch( Eeprom.EepromData.DemoSettings.ModulationParam4 ) 01844 { 01845 case RX_BW_4800 : return ( char* )"BW 4.8 kHz"; 01846 case RX_BW_5800 : return ( char* )"BW 5.8 kHz"; 01847 case RX_BW_7300 : return ( char* )"BW 7.3 kHz"; 01848 case RX_BW_9700 : return ( char* )"BW 9.7 kHz"; 01849 case RX_BW_11700 : return ( char* )"BW 11.7 kHz"; 01850 case RX_BW_14600 : return ( char* )"BW 14.6 kHz"; 01851 case RX_BW_19500 : return ( char* )"BW 19.5 kHz"; 01852 case RX_BW_23400 : return ( char* )"BW 23.4 kHz"; 01853 case RX_BW_29300 : return ( char* )"BW 29.3 kHz"; 01854 case RX_BW_39000 : return ( char* )"BW 39 kHz"; 01855 case RX_BW_46900 : return ( char* )"BW 46.9 kHz"; 01856 case RX_BW_58600 : return ( char* )"BW 58.6 kHz"; 01857 case RX_BW_78200 : return ( char* )"BW 78.2 kHz"; 01858 case RX_BW_93800 : return ( char* )"BW 93.8 kHz"; 01859 case RX_BW_117300 : return ( char* )"BW 117 kHz"; 01860 case RX_BW_156200 : return ( char* )"BW 156 kHz"; 01861 case RX_BW_187200 : return ( char* )"BW 187 kHz"; 01862 case RX_BW_234300 : return ( char* )"BW 234 kHz"; 01863 case RX_BW_312000 : return ( char* )"BW 312 kHz"; 01864 case RX_BW_373600 : return ( char* )"BW 373 kHz"; 01865 case RX_BW_467000 : return ( char* )"BW 467 kHz"; 01866 default: return ( char* )"X"; 01867 } 01868 } 01869 } 01870 01871 char* GetRadioFrequency( void ) 01872 { 01873 sprintf( StringText2, "%lu Hz", \ 01874 ( unsigned long )Eeprom.EepromData.DemoSettings.Frequency ); 01875 return StringText2; 01876 } 01877 01878 char* GetRadioFrequencyMHz( void ) 01879 { 01880 // quicker than using a float (which is not optimized in MBED) 01881 sprintf( StringText3, "%3d.%1d MHz", \ 01882 Eeprom.EepromData.DemoSettings.Frequency / 1000000, \ 01883 ( Eeprom.EepromData.DemoSettings.Frequency % 1000000 ) / 100000 ); 01884 return StringText3; 01885 } 01886 01887 char* GetRadioFreqBase( void ) 01888 { 01889 switch( CurrentFreqBase ) 01890 { 01891 case FB1: return ( char* )"1 Hz"; 01892 case FB10: return ( char* )"10 Hz"; 01893 case FB100: return ( char* )"100 Hz"; 01894 case FB1K: return ( char* )"1 kHz"; 01895 case FB10K: return ( char* )"10 kHz"; 01896 case FB100K: return ( char* )"100 kHz"; 01897 case FB1M: return ( char* )"1 MHz"; 01898 case FB10M: return ( char* )"10 MHz"; 01899 default: return ( char* )"X"; 01900 } 01901 } 01902 01903 char* GetRadioFreqBasePS1( void ) 01904 { 01905 if( DeviceConnected != SX1268 ) 01906 { 01907 sprintf( StringText, "%lu Hz", DEMO_CENTRAL_FREQ_PRESET6 ); 01908 } 01909 else 01910 { 01911 sprintf( StringText, "%lu Hz", DEMO_CENTRAL_FREQ_PRESET4 ); 01912 } 01913 return StringText; 01914 } 01915 01916 char* GetRadioFreqBasePS2( void ) 01917 { 01918 if( DeviceConnected != SX1268 ) 01919 { 01920 sprintf( StringText, "%lu Hz", DEMO_CENTRAL_FREQ_PRESET7 ); 01921 } 01922 else 01923 { 01924 sprintf( StringText, "%lu Hz", DEMO_CENTRAL_FREQ_PRESET3 ); 01925 } 01926 return StringText; 01927 } 01928 01929 char* GetRadioFreqBasePS3( void ) 01930 { 01931 if( DeviceConnected != SX1268 ) 01932 { 01933 sprintf( StringText, "%lu Hz", DEMO_CENTRAL_FREQ_PRESET8 ); 01934 } 01935 else 01936 { 01937 sprintf( StringText, "%lu Hz", DEMO_CENTRAL_FREQ_PRESET9 ); 01938 } 01939 return StringText; 01940 } 01941 01942 char* GetRadioTxPower( void ) 01943 { 01944 sprintf( StringText2, "%d dBm", Eeprom.EepromData.DemoSettings.TxPower ); 01945 return StringText2; 01946 } 01947 01948 char* GetRadioPayloadLength( void ) 01949 { 01950 if( Eeprom.EepromData.DemoSettings.ModulationType == PACKET_TYPE_LORA ) 01951 { 01952 sprintf( StringText2, "%d", Eeprom.EepromData.DemoSettings.PacketParam3 ); 01953 } 01954 else // PACKET_TYPE_GFSK 01955 { 01956 sprintf( StringText2, "%d", Eeprom.EepromData.DemoSettings.PacketParam6 ); 01957 } 01958 return StringText2; 01959 } 01960 01961 char* GetMenuDemoMaxNumPacket( void ) 01962 { 01963 if( Eeprom.EepromData.DemoSettings.MaxNumPacket == 0 ) 01964 { 01965 return ( char* )"Infinite"; 01966 } 01967 else 01968 { 01969 sprintf( StringText, "%6d", \ 01970 Eeprom.EepromData.DemoSettings.MaxNumPacket ); 01971 } 01972 return StringText; 01973 } 01974 01975 char* GetMenuDemoNumSentPacket( void ) 01976 { 01977 sprintf( StringText2, "%6d", Eeprom.EepromData.DemoSettings.CntPacketTx ); 01978 return StringText2; 01979 } 01980 01981 char* GetMenuDemoFreqError( void ) 01982 { 01983 if( Eeprom.EepromData.DemoSettings.ModulationType == PACKET_TYPE_LORA ) 01984 { 01985 sprintf( StringText2, "%6d", Eeprom.EepromData.DemoSettings.FreqErrorEst ); 01986 } 01987 else 01988 { 01989 sprintf( StringText2, "N/A" ); 01990 } 01991 return StringText2; 01992 } 01993 01994 char* GetMenuDemoRxOk( void ) 01995 { 01996 sprintf( StringText2, "%6lu", \ 01997 ( unsigned long )( Eeprom.EepromData.DemoSettings.CntPacketRxOK ) ); 01998 return StringText2; 01999 } 02000 02001 char* GetMenuDemoRxKo( void ) 02002 { 02003 sprintf( StringText2, "%6lu", \ 02004 ( unsigned long )( Eeprom.EepromData.DemoSettings.CntPacketRxKO + \ 02005 Eeprom.EepromData.DemoSettings.RxTimeOutCount ) ); 02006 return StringText2; 02007 } 02008 02009 char* GetMenuDemoRxOkSlave( void ) 02010 { 02011 sprintf( StringText3, "%6lu", \ 02012 ( unsigned long )( Eeprom.EepromData.DemoSettings.CntPacketRxOKSlave ) ); 02013 return StringText3; 02014 } 02015 02016 char* GetMenuDemoResultPerCent1( uint32_t value, uint32_t reference ) 02017 { 02018 // quicker than using a float (which is not optimized in MBED) 02019 sprintf( StringText2, "%3d.%02d", \ 02020 ( ( value * 10000 ) / reference ) / 100, \ 02021 ( ( value * 10000 ) / reference ) % 100 ); 02022 return StringText2; 02023 } 02024 02025 char* GetMenuDemoResultPerCent2( uint32_t value, uint32_t reference ) 02026 { 02027 // quicker than using a float (which is not optimized in MBED) 02028 sprintf( StringText3, "%3d.%02d", \ 02029 ( ( value * 10000 ) / reference ) / 100, \ 02030 ( ( value * 10000 ) / reference ) % 100 ); 02031 return StringText3; 02032 } 02033 02034 char* GetMenuDemoRxKoSlave( void ) 02035 { 02036 sprintf( StringText3, "%6lu", \ 02037 ( unsigned long )( Eeprom.EepromData.DemoSettings.CntPacketRxKOSlave ) ); 02038 return StringText3; 02039 } 02040 02041 char* GetMenuDemoRssi( void ) 02042 { 02043 sprintf( StringText2, "%6d", Eeprom.EepromData.DemoSettings.RssiValue ); 02044 return StringText2; 02045 } 02046 02047 char* GetMenuDemoSnr( void ) 02048 { 02049 if( Eeprom.EepromData.DemoSettings.SnrValue >= 0 ) 02050 { 02051 sprintf( StringText2, " /" ); 02052 } 02053 else 02054 { 02055 sprintf( StringText2, "%6d", Eeprom.EepromData.DemoSettings.SnrValue ); 02056 } 02057 return StringText2; 02058 } 02059 02060 char* GetTotalPackets( void ) 02061 { 02062 if( Eeprom.EepromData.DemoSettings.MaxNumPacket == 0 ) 02063 { 02064 return ( char* )"Total: Inf."; 02065 } 02066 else 02067 { 02068 sprintf( StringText, "Total: %5lu", \ 02069 ( unsigned long )( Eeprom.EepromData.DemoSettings.MaxNumPacket ) ); 02070 return StringText; 02071 } 02072 } 02073 02074 char* GetMenuDemoRadioPowerMode( void ) 02075 { 02076 if( Eeprom.EepromData.DemoSettings.RadioPowerMode == USE_LDO ) 02077 { 02078 return ( char* )" LDO"; 02079 } 02080 else 02081 { 02082 return ( char* )" DCDC"; 02083 } 02084 } 02085 02086 char* GetMenuDemoRadioBoostedRx( void ) 02087 { 02088 if( Eeprom.EepromData.DemoSettings.BoostedRx == 0x01 ) 02089 { 02090 return ( char* )" True"; 02091 } 02092 else 02093 { 02094 return ( char* )" False"; 02095 } 02096 } 02097 02098 02099 void CheckScreen( void ) 02100 { 02101 CheckScreenFlag = true; 02102 } 02103 02104 void DebouncedScreen (void ) 02105 { 02106 ScreenBeenDebounced = false; 02107 DebouncedScreenTouch.detach( ); 02108 } 02109 02110 void RadioSettingsCheckError( void ) 02111 { 02112 if( Eeprom.EepromData.DemoSettings.ModulationType == PACKET_TYPE_GFSK ) 02113 { 02114 switch( Eeprom.EepromData.DemoSettings.ModulationParam4 ) 02115 { 02116 case RX_BW_4800: 02117 ErrorParam = ( (Eeprom.EepromData.DemoSettings.ModulationParam2 * 2) + Eeprom.EepromData.DemoSettings.ModulationParam1 ) >= 4800; 02118 break; 02119 02120 case RX_BW_5800: 02121 ErrorParam = ( (Eeprom.EepromData.DemoSettings.ModulationParam2 * 2) + Eeprom.EepromData.DemoSettings.ModulationParam1 ) >= 5800; 02122 break; 02123 02124 case RX_BW_7300: 02125 ErrorParam = ( (Eeprom.EepromData.DemoSettings.ModulationParam2 * 2) + Eeprom.EepromData.DemoSettings.ModulationParam1 ) >= 7300; 02126 break; 02127 02128 case RX_BW_9700: 02129 ErrorParam = ( (Eeprom.EepromData.DemoSettings.ModulationParam2 * 2) + Eeprom.EepromData.DemoSettings.ModulationParam1 ) >= 9700; 02130 break; 02131 02132 case RX_BW_11700: 02133 ErrorParam = ( (Eeprom.EepromData.DemoSettings.ModulationParam2 * 2) + Eeprom.EepromData.DemoSettings.ModulationParam1 ) >= 11700; 02134 break; 02135 02136 case RX_BW_14600: 02137 ErrorParam = ( (Eeprom.EepromData.DemoSettings.ModulationParam2 * 2) + Eeprom.EepromData.DemoSettings.ModulationParam1 ) >= 14600; 02138 break; 02139 02140 case RX_BW_19500: 02141 ErrorParam = ( (Eeprom.EepromData.DemoSettings.ModulationParam2 * 2) + Eeprom.EepromData.DemoSettings.ModulationParam1 ) >= 19500; 02142 break; 02143 02144 case RX_BW_23400: 02145 ErrorParam = ( (Eeprom.EepromData.DemoSettings.ModulationParam2 * 2) + Eeprom.EepromData.DemoSettings.ModulationParam1 ) >= 23400; 02146 break; 02147 02148 case RX_BW_29300: 02149 ErrorParam = ( (Eeprom.EepromData.DemoSettings.ModulationParam2 * 2) + Eeprom.EepromData.DemoSettings.ModulationParam1 ) >= 29300; 02150 break; 02151 02152 case RX_BW_39000: 02153 ErrorParam = ( (Eeprom.EepromData.DemoSettings.ModulationParam2 * 2) + Eeprom.EepromData.DemoSettings.ModulationParam1 ) >= 39000; 02154 break; 02155 02156 case RX_BW_46900: 02157 ErrorParam = ( (Eeprom.EepromData.DemoSettings.ModulationParam2 * 2) + Eeprom.EepromData.DemoSettings.ModulationParam1 ) >= 46900; 02158 break; 02159 02160 case RX_BW_58600: 02161 ErrorParam = ( (Eeprom.EepromData.DemoSettings.ModulationParam2 * 2) + Eeprom.EepromData.DemoSettings.ModulationParam1 ) >= 58600; 02162 break; 02163 02164 case RX_BW_78200: 02165 ErrorParam = ( (Eeprom.EepromData.DemoSettings.ModulationParam2 * 2) + Eeprom.EepromData.DemoSettings.ModulationParam1 ) >= 78200; 02166 break; 02167 02168 case RX_BW_93800: 02169 ErrorParam = ( (Eeprom.EepromData.DemoSettings.ModulationParam2 * 2) + Eeprom.EepromData.DemoSettings.ModulationParam1 ) >= 93800; 02170 break; 02171 02172 case RX_BW_117300: 02173 ErrorParam = ( (Eeprom.EepromData.DemoSettings.ModulationParam2 * 2) + Eeprom.EepromData.DemoSettings.ModulationParam1 ) >= 117300; 02174 break; 02175 02176 case RX_BW_156200: 02177 ErrorParam = ( (Eeprom.EepromData.DemoSettings.ModulationParam2 * 2) + Eeprom.EepromData.DemoSettings.ModulationParam1 ) >= 156200; 02178 break; 02179 02180 case RX_BW_187200: 02181 ErrorParam = ( (Eeprom.EepromData.DemoSettings.ModulationParam2 * 2) + Eeprom.EepromData.DemoSettings.ModulationParam1 ) >= 187200; 02182 break; 02183 02184 case RX_BW_234300: 02185 ErrorParam = ( (Eeprom.EepromData.DemoSettings.ModulationParam2 * 2) + Eeprom.EepromData.DemoSettings.ModulationParam1 ) >= 234300; 02186 break; 02187 02188 case RX_BW_312000: 02189 ErrorParam = ( (Eeprom.EepromData.DemoSettings.ModulationParam2 * 2) + Eeprom.EepromData.DemoSettings.ModulationParam1 ) >= 312000; 02190 break; 02191 02192 case RX_BW_373600: 02193 ErrorParam = ( (Eeprom.EepromData.DemoSettings.ModulationParam2 * 2) + Eeprom.EepromData.DemoSettings.ModulationParam1 ) >= 373600; 02194 break; 02195 02196 case RX_BW_467000: 02197 ErrorParam = ( (Eeprom.EepromData.DemoSettings.ModulationParam2 * 2) + Eeprom.EepromData.DemoSettings.ModulationParam1 ) >= 467000; 02198 break; 02199 02200 default: 02201 ErrorParam = true; 02202 break; 02203 } 02204 if( ErrorParam == true ) 02205 { 02206 MenuObjects[BTN3_VALUE_TEXT].FrontColor = OBJECT_ERROR; 02207 MenuObjects[BTN4_VALUE_TEXT].FrontColor = OBJECT_ERROR; 02208 MenuObjects[BTN6_VALUE_TEXT].FrontColor = OBJECT_ERROR; 02209 } 02210 else 02211 { 02212 RadioSettingsClearError( ); 02213 } 02214 ButtonChangeText( BTN3_BORDER, NULL, ( uint8_t* )GetRadioModulationParameters1( ) ); 02215 ButtonChangeText( BTN4_BORDER, NULL, ( uint8_t* )GetRadioModulationParameters2( ) ); 02216 ButtonChangeText( BTN6_BORDER, NULL, ( uint8_t* )GetRadioModulationParameters4( ) ); 02217 } 02218 } 02219 02220 void RadioSettingsClearError( void ) 02221 { 02222 MenuObjects[BTN3_VALUE_TEXT].FrontColor = TEXT_VALUE; 02223 MenuObjects[BTN4_VALUE_TEXT].FrontColor = TEXT_VALUE; 02224 MenuObjects[BTN6_VALUE_TEXT].FrontColor = TEXT_VALUE; 02225 } 02226 02227 /*! 02228 * \brief Draw button 02229 * 02230 * \param [in] buttonId Id of the button to draw 02231 * \param [in] *text1 Text to draw as label 02232 * \param [in] *text2 Text to draw as value 02233 */ 02234 void DrawActiveButton( uint8_t buttonId, uint8_t* text1, uint8_t* text2 ) 02235 { 02236 GraphObjectDraw( &( MenuObjects[buttonId] ), NULL, NULL, true ); 02237 if( text2 == NULL ) 02238 { 02239 if( text1 != NULL ) 02240 { 02241 GraphObjectDraw( &( MenuObjects[buttonId + 1] ), text1, NULL, false ); 02242 } 02243 } 02244 else 02245 { 02246 if( text1 != NULL ) 02247 { 02248 GraphObjectDraw( &( MenuObjects[buttonId + 2] ), text1, NULL, false ); 02249 } 02250 GraphObjectDraw( &( MenuObjects[buttonId + 3] ), text2, NULL, false ); 02251 } 02252 } 02253 02254 void ButtonChangeText( uint8_t buttonId, uint8_t* text1, uint8_t* text2 ) 02255 { 02256 if( text2 == NULL ) 02257 { 02258 if( text1 != NULL ) 02259 { 02260 GraphObjectDraw( &( MenuObjects[buttonId + 1] ), text1, NULL, false ); 02261 } 02262 } 02263 else 02264 { 02265 if( text1 != NULL ) 02266 { 02267 GraphObjectDraw( &( MenuObjects[buttonId + 2] ), text1, NULL, false ); 02268 } 02269 GraphObjectDraw( &( MenuObjects[buttonId + 3] ), text2, NULL, false ); 02270 } 02271 } 02272 02273 void DrawText( uint8_t lineId, uint8_t* text0, uint8_t* text1, uint8_t* text2 ) 02274 { 02275 if( text0 != NULL ) 02276 { 02277 GraphObjectDraw( &( MenuObjects[lineId] ), text0, NULL, false ); 02278 } 02279 if( text1 != NULL ) 02280 { 02281 GraphObjectDraw( &( MenuObjects[lineId + 1] ), text1, NULL, false ); 02282 } 02283 if( text2 != NULL ) 02284 { 02285 GraphObjectDraw( &( MenuObjects[lineId + 2] ), text2, NULL, false ); 02286 } 02287 } 02288
Generated on Tue Jul 12 2022 15:49:22 by 1.7.2