Example using the application launcher.

Dependencies:   DMBasicGUI DMSupport

Example use of the AppLauncher class in the DMBasicGUI library.

This project is used in the TBD guide as a starting point when creating your own menu system. It can also be selected as a template when creating a new project based on the LPC4088 Display Module.

Information

This project works on both the 4.3" and 5" display modules.

This is what it looks like:

/media/uploads/embeddedartists/launcher_cap_000.png

If you click on the Something button:

/media/uploads/embeddedartists/launcher_cap_001.png

Committer:
embeddedartists
Date:
Mon Nov 04 15:12:28 2019 +0000
Revision:
4:7a016403f7fd
Parent:
1:2b9c48157f2d
Updates related to mbed OS 5

Who changed what in which revision?

UserRevisionLine numberNew contents of line
alindvall 0:71e474187082 1 /******************************************************************************
alindvall 0:71e474187082 2 * Includes
alindvall 0:71e474187082 3 *****************************************************************************/
alindvall 0:71e474187082 4
alindvall 0:71e474187082 5 #include "mbed.h"
alindvall 0:71e474187082 6 #include "mbed_interface.h"
alindvall 0:71e474187082 7 #include "rtos.h"
alindvall 0:71e474187082 8
alindvall 0:71e474187082 9 #include "DMBoard.h"
alindvall 0:71e474187082 10
alindvall 0:71e474187082 11 #include "AppLauncher.h"
alindvall 0:71e474187082 12 #include "AppTouchCalibration.h"
alindvall 0:71e474187082 13
alindvall 0:71e474187082 14 #include "AppTemplate.h"
alindvall 0:71e474187082 15 #include "image_data.h"
alindvall 0:71e474187082 16
alindvall 0:71e474187082 17
alindvall 0:71e474187082 18 /******************************************************************************
alindvall 0:71e474187082 19 * Typedefs and defines
alindvall 0:71e474187082 20 *****************************************************************************/
alindvall 0:71e474187082 21
alindvall 0:71e474187082 22 typedef enum {
alindvall 0:71e474187082 23 MyFirstApp,
alindvall 0:71e474187082 24
alindvall 0:71e474187082 25 // Add an application ID here
alindvall 0:71e474187082 26
alindvall 0:71e474187082 27 CalibrationApp = AppLauncher::CalibrationApp,
alindvall 0:71e474187082 28 } myapps_t;
alindvall 0:71e474187082 29
alindvall 0:71e474187082 30 /******************************************************************************
alindvall 0:71e474187082 31 * Local functions
alindvall 0:71e474187082 32 *****************************************************************************/
alindvall 0:71e474187082 33
alindvall 0:71e474187082 34 static App* launchApp(uint32_t id)
alindvall 0:71e474187082 35 {
alindvall 0:71e474187082 36 App* a = NULL;
alindvall 0:71e474187082 37 switch ((myapps_t)id) {
alindvall 0:71e474187082 38 case CalibrationApp:
alindvall 0:71e474187082 39 a = new AppTouchCalibration();
alindvall 0:71e474187082 40 break;
alindvall 0:71e474187082 41 case MyFirstApp:
alindvall 0:71e474187082 42 a = new AppTemplate();
alindvall 0:71e474187082 43 break;
alindvall 0:71e474187082 44
alindvall 0:71e474187082 45 // Create your application here
alindvall 0:71e474187082 46
alindvall 0:71e474187082 47 default:
alindvall 0:71e474187082 48 break;
alindvall 0:71e474187082 49 }
alindvall 0:71e474187082 50 return a;
alindvall 0:71e474187082 51 }
alindvall 0:71e474187082 52
embeddedartists 4:7a016403f7fd 53 void guiTask(void)
alindvall 0:71e474187082 54 {
alindvall 0:71e474187082 55 RtosLog* log = DMBoard::instance().logger();
alindvall 0:71e474187082 56
alindvall 0:71e474187082 57 log->printf("guiTask started\n");
alindvall 0:71e474187082 58
alindvall 0:71e474187082 59 AppLauncher launcher;
alindvall 0:71e474187082 60
alindvall 0:71e474187082 61
alindvall 0:71e474187082 62 if (launcher.setup()) {
alindvall 0:71e474187082 63 launcher.addImageButton(MyFirstApp, "Something", RED, img_empty, img_size_empty);
alindvall 0:71e474187082 64
alindvall 0:71e474187082 65 // Add more buttons here
alindvall 0:71e474187082 66
alindvall 0:71e474187082 67 launcher.setAppCreatorFunc(launchApp);
alindvall 0:71e474187082 68 log->printf("Starting menu system\n");
alindvall 0:71e474187082 69 launcher.runToCompletion();
alindvall 0:71e474187082 70 launcher.teardown();
alindvall 0:71e474187082 71 } else {
alindvall 0:71e474187082 72 log->printf("Failed to prepare menu system\n");
alindvall 0:71e474187082 73 }
alindvall 0:71e474187082 74
alindvall 0:71e474187082 75 // Should never end up here
alindvall 0:71e474187082 76 mbed_die();
alindvall 0:71e474187082 77 }
alindvall 0:71e474187082 78
alindvall 0:71e474187082 79 /******************************************************************************
alindvall 0:71e474187082 80 * Main function
alindvall 0:71e474187082 81 *****************************************************************************/
alindvall 0:71e474187082 82 int main()
alindvall 0:71e474187082 83 {
alindvall 0:71e474187082 84 DMBoard::BoardError err;
alindvall 0:71e474187082 85 DMBoard* board = &DMBoard::instance();
alindvall 0:71e474187082 86 RtosLog* log = board->logger();
alindvall 0:71e474187082 87 err = board->init();
alindvall 0:71e474187082 88 if (err != DMBoard::Ok) {
alindvall 0:71e474187082 89 log->printf("Failed to initialize the board, got error %d\r\n", err);
embeddedartists 4:7a016403f7fd 90 ThisThread::sleep_for(2000); // allow RtosLog to flush messages
alindvall 0:71e474187082 91 mbed_die();
alindvall 0:71e474187082 92 }
alindvall 0:71e474187082 93
alindvall 0:71e474187082 94 log->printf("\n\n---\nApplication Launcher Example\nBuilt: " __DATE__ " at " __TIME__ "\n\n");
alindvall 1:2b9c48157f2d 95
embeddedartists 4:7a016403f7fd 96 Thread tGui(osPriorityNormal, 8192);
embeddedartists 4:7a016403f7fd 97 tGui.start(guiTask);
alindvall 0:71e474187082 98
alindvall 0:71e474187082 99 while(1) {
alindvall 0:71e474187082 100 // Wait forever (in 1h increments) to prevent the tGui
alindvall 0:71e474187082 101 // thread from being garbage collected.
embeddedartists 4:7a016403f7fd 102 ThisThread::sleep_for(3600*1000);
alindvall 0:71e474187082 103 }
alindvall 0:71e474187082 104 }
alindvall 0:71e474187082 105