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:
If you click on the Something button:
main.cpp@1:2b9c48157f2d, 2015-03-09 (annotated)
- Committer:
- alindvall
- Date:
- Mon Mar 09 15:32:10 2015 +0000
- Revision:
- 1:2b9c48157f2d
- Parent:
- 0:71e474187082
- Child:
- 4:7a016403f7fd
Updated versions of DMSupport and DMBasicGUI libraries
Who changed what in which revision?
User | Revision | Line number | New 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 | |
alindvall | 0:71e474187082 | 53 | void guiTask(void const* args) |
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); |
alindvall | 0:71e474187082 | 90 | wait_ms(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 | |
alindvall | 0:71e474187082 | 96 | Thread tGui(guiTask, NULL, osPriorityNormal, 8192); |
alindvall | 0:71e474187082 | 97 | |
alindvall | 0:71e474187082 | 98 | while(1) { |
alindvall | 0:71e474187082 | 99 | // Wait forever (in 1h increments) to prevent the tGui |
alindvall | 0:71e474187082 | 100 | // thread from being garbage collected. |
alindvall | 0:71e474187082 | 101 | Thread::wait(3600*1000); |
alindvall | 0:71e474187082 | 102 | } |
alindvall | 0:71e474187082 | 103 | } |
alindvall | 0:71e474187082 | 104 |