The out-of-the-box demo application flashed on all display modules before they are shipped.
Dependencies: DMBasicGUI DMSupport
This is the software that is flashed on the LPC4088 Display Modules before they are shipped from Embedded Artists.
Information
This project works on both the 4.3" and 5" display modules but requires different file systems to handle the different display resolutions.
For the 4.3" displays first drag-n-drop the media/fs_480_raw.fs5 (if you are using the new DAPLINK firmware use fs_480_raw.hex) file to the MBED drive and then drag-n-drop the demo itself. This way both the file system and software are up to date.
For the 5" displays first drag-n-drop the media/fs_800_raw.fsF (if you are using the new DAPLINK firmware use fs_800_raw.hex) file to the MBED drive and then drag-n-drop the demo itself. This way both the file system and software are up to date.
There is a prebuilt version of the demo binary here.
This is what it looks like on a 4.3" display:
The first slide from the Slideshow:
A couple of images from the Image Viewer
main.cpp@5:6ca8470ba8f8, 2019-11-05 (annotated)
- Committer:
- embeddedartists
- Date:
- Tue Nov 05 09:11:36 2019 +0000
- Revision:
- 5:6ca8470ba8f8
- Parent:
- 4:a7cbb22e4348
Updates related to mbed OS 5
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
alindvall | 0:b94e330c98ac | 1 | /****************************************************************************** |
alindvall | 0:b94e330c98ac | 2 | * Includes |
alindvall | 0:b94e330c98ac | 3 | *****************************************************************************/ |
alindvall | 0:b94e330c98ac | 4 | |
alindvall | 0:b94e330c98ac | 5 | #include "mbed.h" |
alindvall | 0:b94e330c98ac | 6 | #include "mbed_interface.h" |
alindvall | 0:b94e330c98ac | 7 | #include "rtos.h" |
alindvall | 0:b94e330c98ac | 8 | #include "EthernetInterface.h" |
alindvall | 0:b94e330c98ac | 9 | #include "HTTPServer.h" |
alindvall | 0:b94e330c98ac | 10 | #include "USBHostMSD.h" |
alindvall | 0:b94e330c98ac | 11 | #include "USBHostMouse.h" |
alindvall | 0:b94e330c98ac | 12 | #include "USBHostKeyboard.h" |
alindvall | 0:b94e330c98ac | 13 | |
alindvall | 0:b94e330c98ac | 14 | #include "DMBoard.h" |
alindvall | 0:b94e330c98ac | 15 | |
alindvall | 0:b94e330c98ac | 16 | #include "AppLauncherSpecial.h" |
alindvall | 0:b94e330c98ac | 17 | #include "meas.h" |
alindvall | 0:b94e330c98ac | 18 | |
alindvall | 0:b94e330c98ac | 19 | #include "AppNetworkSettings.h" |
alindvall | 0:b94e330c98ac | 20 | #include "AppStatus.h" |
alindvall | 0:b94e330c98ac | 21 | #include "AppTouchCalibration.h" |
alindvall | 0:b94e330c98ac | 22 | #include "AppColorPicker.h" |
alindvall | 0:b94e330c98ac | 23 | #include "AppImageViewer.h" |
alindvall | 0:b94e330c98ac | 24 | #include "AppSlideShow.h" |
alindvall | 0:b94e330c98ac | 25 | #include "AppRTCSettings.h" |
alindvall | 0:b94e330c98ac | 26 | #include "AppUSBStatus.h" |
alindvall | 0:b94e330c98ac | 27 | #include "AppDraw.h" |
alindvall | 0:b94e330c98ac | 28 | #include "image_data.h" |
alindvall | 0:b94e330c98ac | 29 | #include "Resource.h" |
alindvall | 0:b94e330c98ac | 30 | |
alindvall | 0:b94e330c98ac | 31 | #include "lpc_swim.h" |
alindvall | 0:b94e330c98ac | 32 | #include "lpc_helvr10.h" |
alindvall | 0:b94e330c98ac | 33 | #include "lpc_winfreesystem14x16.h" |
alindvall | 0:b94e330c98ac | 34 | |
alindvall | 0:b94e330c98ac | 35 | /****************************************************************************** |
alindvall | 0:b94e330c98ac | 36 | * Typedefs and defines |
alindvall | 0:b94e330c98ac | 37 | *****************************************************************************/ |
alindvall | 0:b94e330c98ac | 38 | |
alindvall | 0:b94e330c98ac | 39 | typedef enum { |
alindvall | 0:b94e330c98ac | 40 | Res_ok, |
alindvall | 0:b94e330c98ac | 41 | Res_cancel, |
alindvall | 0:b94e330c98ac | 42 | Res_arrow_up, |
alindvall | 0:b94e330c98ac | 43 | Res_arrow_down, |
alindvall | 0:b94e330c98ac | 44 | Res_arrow_left, |
alindvall | 0:b94e330c98ac | 45 | Res_arrow_right, |
alindvall | 0:b94e330c98ac | 46 | Res_repeat, |
alindvall | 0:b94e330c98ac | 47 | Res_digits, |
alindvall | 0:b94e330c98ac | 48 | Res_background, |
alindvall | 0:b94e330c98ac | 49 | Res_about, |
alindvall | 0:b94e330c98ac | 50 | Res_ColorPickerApp, |
alindvall | 0:b94e330c98ac | 51 | Res_ImageViewerApp, |
alindvall | 0:b94e330c98ac | 52 | Res_SlideshowApp, |
alindvall | 0:b94e330c98ac | 53 | Res_SettingsApp, |
alindvall | 0:b94e330c98ac | 54 | Res_StatusApp, |
alindvall | 0:b94e330c98ac | 55 | //Res_TouchTestApp, |
alindvall | 0:b94e330c98ac | 56 | Res_RtcApp, |
alindvall | 0:b94e330c98ac | 57 | Res_USBStatusApp, |
alindvall | 0:b94e330c98ac | 58 | Res_DrawingApp, |
alindvall | 0:b94e330c98ac | 59 | //Res_CalibrationApp, |
alindvall | 0:b94e330c98ac | 60 | NumResources, |
alindvall | 0:b94e330c98ac | 61 | } resorces_t; |
alindvall | 0:b94e330c98ac | 62 | |
alindvall | 0:b94e330c98ac | 63 | /****************************************************************************** |
alindvall | 0:b94e330c98ac | 64 | * Local variables |
alindvall | 0:b94e330c98ac | 65 | *****************************************************************************/ |
alindvall | 0:b94e330c98ac | 66 | |
alindvall | 0:b94e330c98ac | 67 | static Resource* RESOURCES[NumResources] = {0}; |
alindvall | 0:b94e330c98ac | 68 | |
alindvall | 3:57de4d043115 | 69 | /****************************************************************************** |
alindvall | 3:57de4d043115 | 70 | * Global variables |
alindvall | 3:57de4d043115 | 71 | *****************************************************************************/ |
alindvall | 3:57de4d043115 | 72 | |
alindvall | 3:57de4d043115 | 73 | EthernetInterface eth; |
alindvall | 3:57de4d043115 | 74 | bool ethInitialized = false; |
alindvall | 3:57de4d043115 | 75 | bool ethUsingDHCP = true; |
alindvall | 3:57de4d043115 | 76 | bool haveUSBMSD = false; |
alindvall | 3:57de4d043115 | 77 | |
alindvall | 3:57de4d043115 | 78 | /****************************************************************************** |
alindvall | 3:57de4d043115 | 79 | * Local functions |
alindvall | 3:57de4d043115 | 80 | *****************************************************************************/ |
alindvall | 3:57de4d043115 | 81 | |
alindvall | 0:b94e330c98ac | 82 | static void prepareResources() |
alindvall | 0:b94e330c98ac | 83 | { |
alindvall | 0:b94e330c98ac | 84 | Display* disp = DMBoard::instance().display(); |
alindvall | 0:b94e330c98ac | 85 | |
alindvall | 0:b94e330c98ac | 86 | // select which images to use based on display size |
alindvall | 0:b94e330c98ac | 87 | if (disp->width() == 480) { |
alindvall | 0:b94e330c98ac | 88 | RESOURCES[Res_ok ] = new Resource(img_480x272_ok, img_size_480x272_ok, 40, 40); |
alindvall | 0:b94e330c98ac | 89 | RESOURCES[Res_cancel ] = new Resource(img_480x272_cancel, img_size_480x272_cancel, 40, 40); |
alindvall | 0:b94e330c98ac | 90 | RESOURCES[Res_arrow_up ] = new Resource(img_480x272_arrow_up, img_size_480x272_arrow_up, 52, 52); |
alindvall | 0:b94e330c98ac | 91 | RESOURCES[Res_arrow_down ] = new Resource(img_480x272_arrow_down, img_size_480x272_arrow_down, 52, 52); |
alindvall | 0:b94e330c98ac | 92 | RESOURCES[Res_arrow_left ] = new Resource(img_480x272_arrow_left, img_size_480x272_arrow_left, 52, 52); |
alindvall | 0:b94e330c98ac | 93 | RESOURCES[Res_arrow_right] = new Resource(img_480x272_arrow_right, img_size_480x272_arrow_right, 52, 52); |
alindvall | 0:b94e330c98ac | 94 | RESOURCES[Res_repeat ] = new Resource(img_480x272_repeat, img_size_480x272_repeat, 40, 40); |
alindvall | 0:b94e330c98ac | 95 | RESOURCES[Res_digits ] = new Resource(img_numbers_16b, img_size_numbers_16b, 13, 242); |
alindvall | 0:b94e330c98ac | 96 | |
alindvall | 0:b94e330c98ac | 97 | RESOURCES[Res_ColorPickerApp] = new Resource(img_480x272_super_mono_3d_part2_19, img_size_480x272_super_mono_3d_part2_19, 64, 64); |
alindvall | 0:b94e330c98ac | 98 | RESOURCES[Res_ImageViewerApp] = new Resource(img_480x272_super_mono_3d_48, img_size_480x272_super_mono_3d_48, 64, 64); |
alindvall | 0:b94e330c98ac | 99 | RESOURCES[Res_SlideshowApp ] = new Resource(img_480x272_super_mono_3d_87, img_size_480x272_super_mono_3d_87, 64, 64); |
alindvall | 0:b94e330c98ac | 100 | RESOURCES[Res_SettingsApp ] = new Resource(img_480x272_super_mono_3d_93, img_size_480x272_super_mono_3d_93, 64, 64); |
alindvall | 0:b94e330c98ac | 101 | RESOURCES[Res_StatusApp ] = new Resource(img_480x272_super_mono_3d_part2_68, img_size_480x272_super_mono_3d_part2_68, 64, 64); |
alindvall | 0:b94e330c98ac | 102 | RESOURCES[Res_RtcApp ] = new Resource(img_480x272_super_mono_3d_02, img_size_480x272_super_mono_3d_02, 64, 64); |
alindvall | 0:b94e330c98ac | 103 | RESOURCES[Res_USBStatusApp ] = new Resource(img_480x272_super_mono_3d_57, img_size_480x272_super_mono_3d_57, 64, 64); |
alindvall | 0:b94e330c98ac | 104 | RESOURCES[Res_DrawingApp ] = new Resource(img_480x272_super_mono_3d_22, img_size_480x272_super_mono_3d_22, 64, 64); |
alindvall | 0:b94e330c98ac | 105 | RESOURCES[Res_background ] = new Resource(img_480x272_background, img_size_480x272_background, 364, 57); |
alindvall | 0:b94e330c98ac | 106 | RESOURCES[Res_about ] = new Resource(img_480x272_about, img_size_480x272_about, 240, 245); |
alindvall | 0:b94e330c98ac | 107 | |
alindvall | 0:b94e330c98ac | 108 | swim_set_default_font(&font_helvr10); |
alindvall | 0:b94e330c98ac | 109 | } else { |
alindvall | 0:b94e330c98ac | 110 | RESOURCES[Res_ok ] = new Resource(img_800x480_ok, img_size_800x480_ok, 64, 64); |
alindvall | 0:b94e330c98ac | 111 | RESOURCES[Res_cancel ] = new Resource(img_800x480_cancel, img_size_800x480_cancel, 64, 64); |
alindvall | 0:b94e330c98ac | 112 | RESOURCES[Res_arrow_up ] = new Resource("/qspi/800x480_arrow_up.raw", 128, 128); |
alindvall | 0:b94e330c98ac | 113 | RESOURCES[Res_arrow_down ] = new Resource("/qspi/800x480_arrow_down.raw", 128, 128); |
alindvall | 0:b94e330c98ac | 114 | RESOURCES[Res_arrow_left ] = new Resource("/qspi/800x480_arrow_left.raw", 128, 128); |
alindvall | 0:b94e330c98ac | 115 | RESOURCES[Res_arrow_right] = new Resource("/qspi/800x480_arrow_right.raw", 128, 128); |
alindvall | 0:b94e330c98ac | 116 | RESOURCES[Res_repeat ] = new Resource(img_800x480_repeat, img_size_800x480_repeat, 64, 64); |
alindvall | 0:b94e330c98ac | 117 | RESOURCES[Res_digits ] = new Resource(img_numbers_20b, img_size_numbers_20b, 16, 322); |
alindvall | 0:b94e330c98ac | 118 | |
alindvall | 0:b94e330c98ac | 119 | RESOURCES[Res_ColorPickerApp] = new Resource("/qspi/800x480_super-mono-3d-part2-19.raw", 64, 64); |
alindvall | 0:b94e330c98ac | 120 | RESOURCES[Res_ImageViewerApp] = new Resource("/qspi/800x480_super-mono-3d-48.raw", 64, 64); |
alindvall | 0:b94e330c98ac | 121 | RESOURCES[Res_SlideshowApp ] = new Resource("/qspi/800x480_super-mono-3d-87.raw", 64, 64); |
alindvall | 0:b94e330c98ac | 122 | RESOURCES[Res_SettingsApp ] = new Resource("/qspi/800x480_super-mono-3d-93.raw", 64, 64); |
alindvall | 0:b94e330c98ac | 123 | RESOURCES[Res_StatusApp ] = new Resource("/qspi/800x480_super-mono-3d-part2-68.raw", 64, 64); |
alindvall | 0:b94e330c98ac | 124 | RESOURCES[Res_RtcApp ] = new Resource("/qspi/800x480_super-mono-3d-02.raw", 64, 64); |
alindvall | 0:b94e330c98ac | 125 | RESOURCES[Res_USBStatusApp ] = new Resource("/qspi/800x480_super-mono-3d-57.raw", 64, 64); |
alindvall | 0:b94e330c98ac | 126 | RESOURCES[Res_DrawingApp ] = new Resource("/qspi/800x480_super-mono-3d-22.raw", 64, 64); |
alindvall | 0:b94e330c98ac | 127 | RESOURCES[Res_background ] = new Resource("/qspi/800x480_background.raw", 548, 80); |
alindvall | 0:b94e330c98ac | 128 | RESOURCES[Res_about ] = new Resource("/qspi/800x480_about.raw", 420, 429); |
alindvall | 0:b94e330c98ac | 129 | |
alindvall | 0:b94e330c98ac | 130 | swim_set_default_font(&font_winfreesys14x16); |
alindvall | 0:b94e330c98ac | 131 | } |
alindvall | 0:b94e330c98ac | 132 | } |
alindvall | 0:b94e330c98ac | 133 | |
embeddedartists | 5:6ca8470ba8f8 | 134 | void aliveTask(void) |
alindvall | 0:b94e330c98ac | 135 | { |
alindvall | 0:b94e330c98ac | 136 | DMBoard* board = &DMBoard::instance(); |
alindvall | 0:b94e330c98ac | 137 | |
alindvall | 0:b94e330c98ac | 138 | while(true) |
alindvall | 0:b94e330c98ac | 139 | { |
alindvall | 0:b94e330c98ac | 140 | board->setLED(DMBoard::Led4, false); |
alindvall | 0:b94e330c98ac | 141 | board->setLED(DMBoard::Led1, true); |
embeddedartists | 5:6ca8470ba8f8 | 142 | ThisThread::sleep_for(300); |
alindvall | 0:b94e330c98ac | 143 | board->setLED(DMBoard::Led1, false); |
alindvall | 0:b94e330c98ac | 144 | board->setLED(DMBoard::Led2, true); |
embeddedartists | 5:6ca8470ba8f8 | 145 | ThisThread::sleep_for(300); |
alindvall | 0:b94e330c98ac | 146 | board->setLED(DMBoard::Led2, false); |
alindvall | 0:b94e330c98ac | 147 | board->setLED(DMBoard::Led3, true); |
embeddedartists | 5:6ca8470ba8f8 | 148 | ThisThread::sleep_for(300); |
alindvall | 0:b94e330c98ac | 149 | board->setLED(DMBoard::Led3, false); |
alindvall | 0:b94e330c98ac | 150 | board->setLED(DMBoard::Led4, true); |
embeddedartists | 5:6ca8470ba8f8 | 151 | ThisThread::sleep_for(300); |
alindvall | 0:b94e330c98ac | 152 | } |
alindvall | 0:b94e330c98ac | 153 | } |
alindvall | 0:b94e330c98ac | 154 | |
alindvall | 0:b94e330c98ac | 155 | #if defined(DM_BOARD_USE_DISPLAY) |
alindvall | 0:b94e330c98ac | 156 | |
alindvall | 0:b94e330c98ac | 157 | typedef enum { |
alindvall | 0:b94e330c98ac | 158 | ColorPickerApp, |
alindvall | 0:b94e330c98ac | 159 | ImageViewerApp, |
alindvall | 0:b94e330c98ac | 160 | SlideshowApp, |
alindvall | 0:b94e330c98ac | 161 | SettingsApp, |
alindvall | 0:b94e330c98ac | 162 | StatusApp, |
alindvall | 0:b94e330c98ac | 163 | TouchTestApp, |
alindvall | 0:b94e330c98ac | 164 | RtcApp, |
alindvall | 0:b94e330c98ac | 165 | USBStatusApp, |
alindvall | 0:b94e330c98ac | 166 | DrawingApp, |
alindvall | 0:b94e330c98ac | 167 | CalibrationApp = AppLauncherSpecial::CalibrationApp, |
alindvall | 0:b94e330c98ac | 168 | Placeholder, |
alindvall | 0:b94e330c98ac | 169 | } myapps_t; |
alindvall | 0:b94e330c98ac | 170 | |
alindvall | 0:b94e330c98ac | 171 | static App* launchApp(uint32_t id) |
alindvall | 0:b94e330c98ac | 172 | { |
alindvall | 0:b94e330c98ac | 173 | App* a = NULL; |
alindvall | 0:b94e330c98ac | 174 | switch ((myapps_t)id) { |
alindvall | 0:b94e330c98ac | 175 | case CalibrationApp: |
alindvall | 0:b94e330c98ac | 176 | a = new AppTouchCalibration(); |
alindvall | 0:b94e330c98ac | 177 | ((AppTouchCalibration*)a)->addResource(AppTouchCalibration::Resource_Ok_button, RESOURCES[Res_ok]); |
alindvall | 0:b94e330c98ac | 178 | break; |
alindvall | 0:b94e330c98ac | 179 | case SettingsApp: |
alindvall | 0:b94e330c98ac | 180 | a = new AppNetworkSettings(); |
alindvall | 0:b94e330c98ac | 181 | ((AppNetworkSettings*)a)->addResource(AppNetworkSettings::Resource_Ok_button, RESOURCES[Res_ok]); |
alindvall | 0:b94e330c98ac | 182 | ((AppNetworkSettings*)a)->addResource(AppNetworkSettings::Resource_Cancel_button, RESOURCES[Res_cancel]); |
alindvall | 0:b94e330c98ac | 183 | ((AppNetworkSettings*)a)->addResource(AppNetworkSettings::Resource_ArrowUp_button, RESOURCES[Res_arrow_up]); |
alindvall | 0:b94e330c98ac | 184 | ((AppNetworkSettings*)a)->addResource(AppNetworkSettings::Resource_ArrowDown_button, RESOURCES[Res_arrow_down]); |
alindvall | 0:b94e330c98ac | 185 | ((AppNetworkSettings*)a)->addResource(AppNetworkSettings::Resource_ArrowLeft_button, RESOURCES[Res_arrow_left]); |
alindvall | 0:b94e330c98ac | 186 | ((AppNetworkSettings*)a)->addResource(AppNetworkSettings::Resource_ArrowRight_button, RESOURCES[Res_arrow_right]); |
alindvall | 0:b94e330c98ac | 187 | ((AppNetworkSettings*)a)->addResource(AppNetworkSettings::Resource_Digits, RESOURCES[Res_digits]); |
alindvall | 0:b94e330c98ac | 188 | break; |
alindvall | 0:b94e330c98ac | 189 | case ColorPickerApp: |
alindvall | 0:b94e330c98ac | 190 | a = new AppColorPicker(); |
alindvall | 0:b94e330c98ac | 191 | ((AppColorPicker*)a)->addResource(AppColorPicker::Resource_Ok_button, RESOURCES[Res_ok]); |
alindvall | 0:b94e330c98ac | 192 | break; |
alindvall | 0:b94e330c98ac | 193 | case ImageViewerApp: |
alindvall | 0:b94e330c98ac | 194 | a = new AppImageViewer(); |
alindvall | 0:b94e330c98ac | 195 | ((AppImageViewer*)a)->addResource(AppImageViewer::Resource_Ok_button, RESOURCES[Res_ok]); |
alindvall | 0:b94e330c98ac | 196 | break; |
alindvall | 0:b94e330c98ac | 197 | case SlideshowApp: |
alindvall | 0:b94e330c98ac | 198 | { |
alindvall | 0:b94e330c98ac | 199 | // Select folder for the slideshow based on display size |
alindvall | 0:b94e330c98ac | 200 | Display* d = DMBoard::instance().display(); |
alindvall | 0:b94e330c98ac | 201 | if (d->width() == 480) { |
alindvall | 0:b94e330c98ac | 202 | a = new AppSlideShow("/qspi/slides.txt", "/qspi/480x272", 0, 0); |
alindvall | 0:b94e330c98ac | 203 | } else { |
alindvall | 0:b94e330c98ac | 204 | a = new AppSlideShow("/qspi/slides.txt", "/qspi/800x480", 0, 0); |
alindvall | 0:b94e330c98ac | 205 | } |
alindvall | 0:b94e330c98ac | 206 | |
alindvall | 0:b94e330c98ac | 207 | ((AppSlideShow*)a)->addResource(AppSlideShow::Resource_Ok_button, RESOURCES[Res_ok]); |
alindvall | 0:b94e330c98ac | 208 | ((AppSlideShow*)a)->addResource(AppSlideShow::Resource_Repeat_button, RESOURCES[Res_repeat]); |
alindvall | 0:b94e330c98ac | 209 | } |
alindvall | 0:b94e330c98ac | 210 | break; |
alindvall | 0:b94e330c98ac | 211 | case StatusApp: |
alindvall | 0:b94e330c98ac | 212 | a = new AppStatus(); |
alindvall | 0:b94e330c98ac | 213 | ((AppStatus*)a)->addResource(AppStatus::Resource_Ok_button, RESOURCES[Res_ok]); |
alindvall | 0:b94e330c98ac | 214 | ((AppStatus*)a)->addResource(AppStatus::Resource_About_image, RESOURCES[Res_about]); |
alindvall | 0:b94e330c98ac | 215 | break; |
alindvall | 0:b94e330c98ac | 216 | case RtcApp: |
alindvall | 0:b94e330c98ac | 217 | a = new AppRTCSettings(); |
alindvall | 0:b94e330c98ac | 218 | ((AppRTCSettings*)a)->addResource(AppRTCSettings::Resource_Ok_button, RESOURCES[Res_ok]); |
alindvall | 0:b94e330c98ac | 219 | ((AppRTCSettings*)a)->addResource(AppRTCSettings::Resource_Cancel_button, RESOURCES[Res_cancel]); |
alindvall | 0:b94e330c98ac | 220 | ((AppRTCSettings*)a)->addResource(AppRTCSettings::Resource_ArrowUp_button, RESOURCES[Res_arrow_up]); |
alindvall | 0:b94e330c98ac | 221 | ((AppRTCSettings*)a)->addResource(AppRTCSettings::Resource_ArrowDown_button, RESOURCES[Res_arrow_down]); |
alindvall | 0:b94e330c98ac | 222 | ((AppRTCSettings*)a)->addResource(AppRTCSettings::Resource_ArrowLeft_button, RESOURCES[Res_arrow_left]); |
alindvall | 0:b94e330c98ac | 223 | ((AppRTCSettings*)a)->addResource(AppRTCSettings::Resource_ArrowRight_button, RESOURCES[Res_arrow_right]); |
alindvall | 0:b94e330c98ac | 224 | ((AppRTCSettings*)a)->addResource(AppRTCSettings::Resource_Digits, RESOURCES[Res_digits]); |
alindvall | 0:b94e330c98ac | 225 | break; |
alindvall | 0:b94e330c98ac | 226 | case USBStatusApp: |
alindvall | 0:b94e330c98ac | 227 | a = new AppUSBStatus(); |
alindvall | 0:b94e330c98ac | 228 | ((AppUSBStatus*)a)->addResource(AppUSBStatus::Resource_Ok_button, RESOURCES[Res_ok]); |
alindvall | 0:b94e330c98ac | 229 | break; |
alindvall | 0:b94e330c98ac | 230 | case DrawingApp: |
alindvall | 0:b94e330c98ac | 231 | a = new AppDraw(); |
alindvall | 0:b94e330c98ac | 232 | ((AppDraw*)a)->addResource(AppDraw::Resource_Ok_button, RESOURCES[Res_ok]); |
alindvall | 0:b94e330c98ac | 233 | break; |
alindvall | 0:b94e330c98ac | 234 | default: |
alindvall | 0:b94e330c98ac | 235 | break; |
alindvall | 0:b94e330c98ac | 236 | } |
alindvall | 0:b94e330c98ac | 237 | return a; |
alindvall | 0:b94e330c98ac | 238 | } |
alindvall | 0:b94e330c98ac | 239 | |
alindvall | 0:b94e330c98ac | 240 | #define SWIM_TASK_PREFIX "[SWIM] " |
embeddedartists | 5:6ca8470ba8f8 | 241 | void swimTask(void) |
alindvall | 0:b94e330c98ac | 242 | { |
alindvall | 0:b94e330c98ac | 243 | RtosLog* log = DMBoard::instance().logger(); |
alindvall | 0:b94e330c98ac | 244 | Display* disp = DMBoard::instance().display(); |
alindvall | 0:b94e330c98ac | 245 | |
alindvall | 0:b94e330c98ac | 246 | log->printf(SWIM_TASK_PREFIX"swimTask started\n"); |
alindvall | 0:b94e330c98ac | 247 | |
alindvall | 0:b94e330c98ac | 248 | int iconsize = (disp->width()==480) ? 64 : 128; |
alindvall | 0:b94e330c98ac | 249 | AppLauncherSpecial launcher(iconsize, iconsize); |
alindvall | 0:b94e330c98ac | 250 | launcher.addResource(AppLauncherSpecial::Resource_Background, RESOURCES[Res_background]); |
alindvall | 0:b94e330c98ac | 251 | |
alindvall | 0:b94e330c98ac | 252 | if (launcher.setup()) { |
alindvall | 0:b94e330c98ac | 253 | launcher.addImageButton(SettingsApp, "Network", 0x2d5c, RESOURCES[Res_SettingsApp ]); |
alindvall | 0:b94e330c98ac | 254 | launcher.addImageButton(DrawingApp, "Drawing", 0x2d5c, RESOURCES[Res_DrawingApp ]); |
alindvall | 0:b94e330c98ac | 255 | launcher.addImageButton(SlideshowApp, "Slideshow", 0x2d5c, RESOURCES[Res_SlideshowApp ]); |
alindvall | 0:b94e330c98ac | 256 | launcher.addImageButton(ColorPickerApp, "Color Picker", 0x2d5c, RESOURCES[Res_ColorPickerApp]); |
alindvall | 0:b94e330c98ac | 257 | launcher.addImageButton(ImageViewerApp, "Image Viewer", 0x2d5c, RESOURCES[Res_ImageViewerApp]); |
alindvall | 0:b94e330c98ac | 258 | launcher.addImageButton(StatusApp, "About", 0x2d5c, RESOURCES[Res_StatusApp ]); |
alindvall | 0:b94e330c98ac | 259 | launcher.addImageButton(USBStatusApp, "USB Status", 0x2d5c, RESOURCES[Res_USBStatusApp ]); |
alindvall | 0:b94e330c98ac | 260 | launcher.addImageButton(RtcApp, "Clock", 0x2d5c, RESOURCES[Res_RtcApp ]); |
alindvall | 0:b94e330c98ac | 261 | |
alindvall | 0:b94e330c98ac | 262 | launcher.setAppCreatorFunc(launchApp); |
alindvall | 0:b94e330c98ac | 263 | log->printf(SWIM_TASK_PREFIX"Starting menu system\n"); |
alindvall | 0:b94e330c98ac | 264 | launcher.runToCompletion(); |
alindvall | 0:b94e330c98ac | 265 | launcher.teardown(); |
alindvall | 0:b94e330c98ac | 266 | } else { |
alindvall | 0:b94e330c98ac | 267 | log->printf(SWIM_TASK_PREFIX"Failed to prepare menu system\n"); |
alindvall | 0:b94e330c98ac | 268 | } |
alindvall | 0:b94e330c98ac | 269 | |
alindvall | 0:b94e330c98ac | 270 | // Should never end up here |
alindvall | 0:b94e330c98ac | 271 | mbed_die(); |
alindvall | 0:b94e330c98ac | 272 | } |
alindvall | 0:b94e330c98ac | 273 | |
alindvall | 0:b94e330c98ac | 274 | #endif //DM_BOARD_USE_DISPLAY |
alindvall | 0:b94e330c98ac | 275 | |
alindvall | 0:b94e330c98ac | 276 | |
alindvall | 0:b94e330c98ac | 277 | #define NET_TASK_PREFIX "[NET] " |
alindvall | 0:b94e330c98ac | 278 | |
embeddedartists | 5:6ca8470ba8f8 | 279 | void netTask(void) |
alindvall | 0:b94e330c98ac | 280 | { |
alindvall | 0:b94e330c98ac | 281 | RtosLog* log = DMBoard::instance().logger(); |
alindvall | 0:b94e330c98ac | 282 | log->printf(NET_TASK_PREFIX"EthernetInterface Setting up...\r\n"); |
embeddedartists | 5:6ca8470ba8f8 | 283 | nsapi_error_t net_err = eth.connect(); |
embeddedartists | 5:6ca8470ba8f8 | 284 | |
embeddedartists | 5:6ca8470ba8f8 | 285 | if (net_err != NSAPI_ERROR_OK) { |
embeddedartists | 5:6ca8470ba8f8 | 286 | log->printf(NET_TASK_PREFIX"EthernetInterface connect Error %d\r\n", net_err); |
alindvall | 0:b94e330c98ac | 287 | } |
embeddedartists | 5:6ca8470ba8f8 | 288 | else { |
embeddedartists | 5:6ca8470ba8f8 | 289 | ethInitialized = true; |
embeddedartists | 5:6ca8470ba8f8 | 290 | ethUsingDHCP = true; |
alindvall | 0:b94e330c98ac | 291 | |
embeddedartists | 5:6ca8470ba8f8 | 292 | log->printf(NET_TASK_PREFIX"IP Address is %s\r\n", eth.get_ip_address()); |
embeddedartists | 5:6ca8470ba8f8 | 293 | log->printf(NET_TASK_PREFIX"NetMask is %s\r\n", eth.get_netmask()); |
embeddedartists | 5:6ca8470ba8f8 | 294 | log->printf(NET_TASK_PREFIX"Gateway Address is %s\r\n", eth.get_gateway()); |
embeddedartists | 5:6ca8470ba8f8 | 295 | log->printf(NET_TASK_PREFIX"Ethernet Setup OK\r\n"); |
alindvall | 0:b94e330c98ac | 296 | |
embeddedartists | 5:6ca8470ba8f8 | 297 | HTTPServerAddHandler<SimpleHandler>("/hello"); //Default handler |
embeddedartists | 5:6ca8470ba8f8 | 298 | FSHandler::mount("/mci", "/"); |
embeddedartists | 5:6ca8470ba8f8 | 299 | HTTPServerAddHandler<FSHandler>("/"); |
embeddedartists | 5:6ca8470ba8f8 | 300 | |
embeddedartists | 5:6ca8470ba8f8 | 301 | HTTPServerStart(80); |
embeddedartists | 5:6ca8470ba8f8 | 302 | } |
alindvall | 0:b94e330c98ac | 303 | } |
alindvall | 0:b94e330c98ac | 304 | |
alindvall | 0:b94e330c98ac | 305 | static volatile int8_t mouse_button, mouse_x, mouse_y, mouse_z; |
alindvall | 0:b94e330c98ac | 306 | static uint16_t cursor_x=0, cursor_y=0, mouse_max_x = 0, mouse_max_y = 0; |
alindvall | 0:b94e330c98ac | 307 | void mouseEvent(uint8_t buttons, int8_t x, int8_t y, int8_t z) |
alindvall | 0:b94e330c98ac | 308 | { |
alindvall | 0:b94e330c98ac | 309 | mouse_button = buttons; |
alindvall | 0:b94e330c98ac | 310 | mouse_x = x; |
alindvall | 0:b94e330c98ac | 311 | mouse_y = y; |
alindvall | 0:b94e330c98ac | 312 | mouse_z = z; |
alindvall | 0:b94e330c98ac | 313 | |
alindvall | 0:b94e330c98ac | 314 | if (mouse_max_x == 0) { |
alindvall | 0:b94e330c98ac | 315 | mouse_max_x = DMBoard::instance().display()->width() - 1; |
alindvall | 0:b94e330c98ac | 316 | } |
alindvall | 0:b94e330c98ac | 317 | if (mouse_max_y == 0) { |
alindvall | 0:b94e330c98ac | 318 | mouse_max_y = DMBoard::instance().display()->height() - 1; |
alindvall | 0:b94e330c98ac | 319 | } |
alindvall | 0:b94e330c98ac | 320 | |
alindvall | 0:b94e330c98ac | 321 | if (x < 0) { |
alindvall | 0:b94e330c98ac | 322 | if (cursor_x > -x) { |
alindvall | 0:b94e330c98ac | 323 | cursor_x += x; |
alindvall | 0:b94e330c98ac | 324 | } else { |
alindvall | 0:b94e330c98ac | 325 | cursor_x = 0; |
alindvall | 0:b94e330c98ac | 326 | } |
alindvall | 0:b94e330c98ac | 327 | } else { |
alindvall | 0:b94e330c98ac | 328 | if ((cursor_x + x) > mouse_max_x) { |
alindvall | 0:b94e330c98ac | 329 | cursor_x = mouse_max_x; |
alindvall | 0:b94e330c98ac | 330 | } else { |
alindvall | 0:b94e330c98ac | 331 | cursor_x += x; |
alindvall | 0:b94e330c98ac | 332 | } |
alindvall | 0:b94e330c98ac | 333 | } |
alindvall | 0:b94e330c98ac | 334 | y = y/8; |
alindvall | 0:b94e330c98ac | 335 | if (y < 0) { |
alindvall | 0:b94e330c98ac | 336 | if (cursor_y > -y) { |
alindvall | 0:b94e330c98ac | 337 | cursor_y += y; |
alindvall | 0:b94e330c98ac | 338 | } else { |
alindvall | 0:b94e330c98ac | 339 | cursor_y = 0; |
alindvall | 0:b94e330c98ac | 340 | } |
alindvall | 0:b94e330c98ac | 341 | } else { |
alindvall | 0:b94e330c98ac | 342 | if ((cursor_y + y) > mouse_max_y) { |
alindvall | 0:b94e330c98ac | 343 | cursor_y = mouse_max_y; |
alindvall | 0:b94e330c98ac | 344 | } else { |
alindvall | 0:b94e330c98ac | 345 | cursor_y += y; |
alindvall | 0:b94e330c98ac | 346 | } |
alindvall | 0:b94e330c98ac | 347 | } |
alindvall | 0:b94e330c98ac | 348 | |
alindvall | 0:b94e330c98ac | 349 | //Chip_LCD_Cursor_SetPos(LPC_LCD, cursor_x, cursor_y); |
alindvall | 0:b94e330c98ac | 350 | LPC_LCD->CRSR_XY = (cursor_x & 0x3FF) | ((cursor_y & 0x3FF) << 16); |
alindvall | 0:b94e330c98ac | 351 | } |
alindvall | 0:b94e330c98ac | 352 | |
alindvall | 0:b94e330c98ac | 353 | #define LCD_CURSOR_32x32 0 |
alindvall | 0:b94e330c98ac | 354 | #define LCD_CURSOR_64x64 1 |
alindvall | 0:b94e330c98ac | 355 | #define CURSOR_SIZE LCD_CURSOR_32x32 |
alindvall | 0:b94e330c98ac | 356 | #define CURSOR_H_SIZE 32 |
alindvall | 0:b94e330c98ac | 357 | #define CURSOR_V_SIZE 32 |
alindvall | 0:b94e330c98ac | 358 | #define CURSOR_NUM 0 |
alindvall | 0:b94e330c98ac | 359 | #define CURSOR_H_OFS (10) |
alindvall | 0:b94e330c98ac | 360 | #define CURSOR_V_OFS (6) |
alindvall | 0:b94e330c98ac | 361 | |
alindvall | 0:b94e330c98ac | 362 | const unsigned char __attribute__ ((aligned(4))) Cursor[(CURSOR_H_SIZE / 4) * CURSOR_V_SIZE] = |
alindvall | 0:b94e330c98ac | 363 | { |
alindvall | 0:b94e330c98ac | 364 | 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, |
alindvall | 0:b94e330c98ac | 365 | 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, |
alindvall | 0:b94e330c98ac | 366 | 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, |
alindvall | 0:b94e330c98ac | 367 | 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, |
alindvall | 0:b94e330c98ac | 368 | 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, |
alindvall | 0:b94e330c98ac | 369 | 0xAA, 0xAA, 0xAA, 0xFA, 0xAA, 0xAA, 0xAA, 0xAA, |
alindvall | 0:b94e330c98ac | 370 | 0xAA, 0xAA, 0xAB, 0xFE, 0xAA, 0xAA, 0xAA, 0xAA, |
alindvall | 0:b94e330c98ac | 371 | 0xAA, 0xAA, 0xAB, 0xFE, 0xAA, 0xAA, 0xAA, 0xAA, |
alindvall | 0:b94e330c98ac | 372 | 0xAA, 0xAA, 0xAB, 0xFE, 0xAA, 0xAA, 0xAA, 0xAA, |
alindvall | 0:b94e330c98ac | 373 | 0xAA, 0xAA, 0xAB, 0xFE, 0xAA, 0xAA, 0xAA, 0xAA, |
alindvall | 0:b94e330c98ac | 374 | 0xAA, 0xAA, 0xAB, 0xFF, 0xEA, 0xAA, 0xAA, 0xAA, |
alindvall | 0:b94e330c98ac | 375 | 0xAA, 0xAA, 0xAB, 0xFF, 0xFF, 0xAA, 0xAA, 0xAA, |
alindvall | 0:b94e330c98ac | 376 | 0xAA, 0xAA, 0xAB, 0xFF, 0xFF, 0xFA, 0xAA, 0xAA, |
alindvall | 0:b94e330c98ac | 377 | 0xAA, 0xAA, 0xAB, 0xFF, 0xFF, 0xFE, 0xAA, 0xAA, |
alindvall | 0:b94e330c98ac | 378 | 0xAA, 0xAB, 0xFB, 0xFF, 0xFF, 0xFF, 0xAA, 0xAA, |
alindvall | 0:b94e330c98ac | 379 | 0xAA, 0xAB, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0xAA, |
alindvall | 0:b94e330c98ac | 380 | 0xAA, 0xAB, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0xAA, |
alindvall | 0:b94e330c98ac | 381 | 0xAA, 0xAA, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0xAA, |
alindvall | 0:b94e330c98ac | 382 | 0xAA, 0xAA, 0xBF, 0xFF, 0xFF, 0xFF, 0xAA, 0xAA, |
alindvall | 0:b94e330c98ac | 383 | 0xAA, 0xAA, 0xBF, 0xFF, 0xFF, 0xFF, 0xAA, 0xAA, |
alindvall | 0:b94e330c98ac | 384 | 0xAA, 0xAA, 0xAF, 0xFF, 0xFF, 0xFF, 0xAA, 0xAA, |
alindvall | 0:b94e330c98ac | 385 | 0xAA, 0xAA, 0xAF, 0xFF, 0xFF, 0xFE, 0xAA, 0xAA, |
alindvall | 0:b94e330c98ac | 386 | 0xAA, 0xAA, 0xAB, 0xFF, 0xFF, 0xFE, 0xAA, 0xAA, |
alindvall | 0:b94e330c98ac | 387 | 0xAA, 0xAA, 0xAB, 0xFF, 0xFF, 0xFE, 0xAA, 0xAA, |
alindvall | 0:b94e330c98ac | 388 | 0xAA, 0xAA, 0xAA, 0xFF, 0xFF, 0xFA, 0xAA, 0xAA, |
alindvall | 0:b94e330c98ac | 389 | 0xAA, 0xAA, 0xAA, 0xFF, 0xFF, 0xFA, 0xAA, 0xAA, |
alindvall | 0:b94e330c98ac | 390 | 0xAA, 0xAA, 0xAA, 0xFF, 0xFF, 0xFA, 0xAA, 0xAA, |
alindvall | 0:b94e330c98ac | 391 | 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, |
alindvall | 0:b94e330c98ac | 392 | 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, |
alindvall | 0:b94e330c98ac | 393 | 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, |
alindvall | 0:b94e330c98ac | 394 | 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, |
alindvall | 0:b94e330c98ac | 395 | 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA |
alindvall | 0:b94e330c98ac | 396 | }; |
alindvall | 0:b94e330c98ac | 397 | |
alindvall | 0:b94e330c98ac | 398 | void prepareCursor(bool enable) { |
alindvall | 0:b94e330c98ac | 399 | //Chip_LCD_Cursor_Disable(LPC_LCD, 0); |
alindvall | 0:b94e330c98ac | 400 | LPC_LCD->CRSR_CTRL = (CURSOR_NUM << 4); |
alindvall | 0:b94e330c98ac | 401 | |
alindvall | 0:b94e330c98ac | 402 | if (enable) { |
alindvall | 0:b94e330c98ac | 403 | //Chip_LCD_Cursor_Config(LPC_LCD, LCD_CURSOR_32x32, true); |
alindvall | 0:b94e330c98ac | 404 | LPC_LCD->CRSR_CFG = ((true ? 1 : 0) << 1) | CURSOR_SIZE; |
alindvall | 0:b94e330c98ac | 405 | |
alindvall | 0:b94e330c98ac | 406 | //Chip_LCD_Cursor_WriteImage(LPC_LCD, 0, (void *) Cursor); |
alindvall | 0:b94e330c98ac | 407 | { |
alindvall | 0:b94e330c98ac | 408 | int i, j; |
alindvall | 0:b94e330c98ac | 409 | uint32_t *fifoptr, *crsr_ptr = (uint32_t *) Cursor; |
alindvall | 0:b94e330c98ac | 410 | |
alindvall | 0:b94e330c98ac | 411 | /* Check if Cursor Size was configured as 32x32 or 64x64*/ |
alindvall | 0:b94e330c98ac | 412 | if (CURSOR_SIZE == LCD_CURSOR_32x32) { |
alindvall | 0:b94e330c98ac | 413 | i = CURSOR_NUM * 64; |
alindvall | 0:b94e330c98ac | 414 | j = i + 64; |
alindvall | 0:b94e330c98ac | 415 | } |
alindvall | 0:b94e330c98ac | 416 | else { |
alindvall | 0:b94e330c98ac | 417 | i = 0; |
alindvall | 0:b94e330c98ac | 418 | j = 256; |
alindvall | 0:b94e330c98ac | 419 | } |
alindvall | 0:b94e330c98ac | 420 | fifoptr = (uint32_t *) &(LPC_LCD->CRSR_IMG[0]); |
alindvall | 0:b94e330c98ac | 421 | |
alindvall | 0:b94e330c98ac | 422 | /* Copy Cursor Image content to FIFO */ |
alindvall | 0:b94e330c98ac | 423 | for (; i < j; i++) { |
alindvall | 0:b94e330c98ac | 424 | |
alindvall | 0:b94e330c98ac | 425 | *fifoptr = *crsr_ptr; |
alindvall | 0:b94e330c98ac | 426 | crsr_ptr++; |
alindvall | 0:b94e330c98ac | 427 | fifoptr++; |
alindvall | 0:b94e330c98ac | 428 | } |
alindvall | 0:b94e330c98ac | 429 | } |
alindvall | 0:b94e330c98ac | 430 | |
alindvall | 0:b94e330c98ac | 431 | //Chip_LCD_Cursor_SetClip(LPC_LCD, CURSOR_H_OFS, CURSOR_V_OFS); |
alindvall | 0:b94e330c98ac | 432 | LPC_LCD->CRSR_CLIP = (CURSOR_H_OFS & 0x3F) | ((CURSOR_V_OFS & 0x3F) << 8); |
alindvall | 0:b94e330c98ac | 433 | |
alindvall | 0:b94e330c98ac | 434 | //Chip_LCD_Cursor_SetPos(LPC_LCD, cursor_x, cursor_y); |
alindvall | 0:b94e330c98ac | 435 | |
alindvall | 0:b94e330c98ac | 436 | //Chip_LCD_Cursor_Enable(LPC_LCD, 0); |
alindvall | 0:b94e330c98ac | 437 | LPC_LCD->CRSR_CTRL = (CURSOR_NUM << 4) | 1; |
alindvall | 0:b94e330c98ac | 438 | } |
alindvall | 0:b94e330c98ac | 439 | } |
alindvall | 0:b94e330c98ac | 440 | |
alindvall | 0:b94e330c98ac | 441 | |
alindvall | 0:b94e330c98ac | 442 | #define CIRCBUFF_SIZE 256 |
alindvall | 0:b94e330c98ac | 443 | static volatile uint8_t circbuff[CIRCBUFF_SIZE]; |
alindvall | 0:b94e330c98ac | 444 | static volatile uint32_t circbuff_read = 0; |
alindvall | 0:b94e330c98ac | 445 | static uint32_t circbuff_write = 0; |
alindvall | 0:b94e330c98ac | 446 | void keyEvent(uint8_t key) |
alindvall | 0:b94e330c98ac | 447 | { |
alindvall | 0:b94e330c98ac | 448 | circbuff[circbuff_write%CIRCBUFF_SIZE] = key; |
alindvall | 0:b94e330c98ac | 449 | circbuff_write++; |
alindvall | 0:b94e330c98ac | 450 | } |
alindvall | 0:b94e330c98ac | 451 | |
alindvall | 0:b94e330c98ac | 452 | bool msdConnected = false; |
alindvall | 0:b94e330c98ac | 453 | bool keyboardConnected = false; |
alindvall | 0:b94e330c98ac | 454 | bool mouseConnected = false; |
alindvall | 0:b94e330c98ac | 455 | |
alindvall | 0:b94e330c98ac | 456 | #define USB_TASK_PREFIX "[USB] " |
alindvall | 0:b94e330c98ac | 457 | #define USB_CONNECTION_EVENT (1<<4) |
embeddedartists | 5:6ca8470ba8f8 | 458 | void usbTask(void) |
alindvall | 0:b94e330c98ac | 459 | { |
alindvall | 0:b94e330c98ac | 460 | USBHostMSD* msd = new USBHostMSD("usb"); |
alindvall | 0:b94e330c98ac | 461 | USBHostKeyboard* keyboard = new USBHostKeyboard(); |
alindvall | 0:b94e330c98ac | 462 | USBHostMouse* mouse = new USBHostMouse(); |
alindvall | 0:b94e330c98ac | 463 | USBHost* host = USBHost::getHostInst(); |
embeddedartists | 5:6ca8470ba8f8 | 464 | EventFlags connectionEvent; |
embeddedartists | 5:6ca8470ba8f8 | 465 | host->signalOnConnections(&connectionEvent, USB_CONNECTION_EVENT); |
alindvall | 0:b94e330c98ac | 466 | |
alindvall | 0:b94e330c98ac | 467 | RtosLog* log = DMBoard::instance().logger(); |
alindvall | 0:b94e330c98ac | 468 | |
alindvall | 0:b94e330c98ac | 469 | log->printf(USB_TASK_PREFIX"usbTask started\n"); |
alindvall | 0:b94e330c98ac | 470 | |
alindvall | 0:b94e330c98ac | 471 | prepareCursor(false); |
alindvall | 0:b94e330c98ac | 472 | |
alindvall | 0:b94e330c98ac | 473 | while (true) { |
alindvall | 0:b94e330c98ac | 474 | // wait for connect/disconnect message from USBHost |
embeddedartists | 5:6ca8470ba8f8 | 475 | connectionEvent.wait_any(USB_CONNECTION_EVENT); |
alindvall | 0:b94e330c98ac | 476 | log->printf(USB_TASK_PREFIX"got USB event\n"); |
alindvall | 0:b94e330c98ac | 477 | |
alindvall | 0:b94e330c98ac | 478 | if (msd->connected()) { |
alindvall | 0:b94e330c98ac | 479 | if (!msdConnected) { |
alindvall | 0:b94e330c98ac | 480 | msdConnected = true; |
alindvall | 0:b94e330c98ac | 481 | haveUSBMSD = true; |
alindvall | 0:b94e330c98ac | 482 | log->printf(USB_TASK_PREFIX"USB MassStorage Device - Connected\n"); |
alindvall | 0:b94e330c98ac | 483 | } |
alindvall | 0:b94e330c98ac | 484 | } else { |
alindvall | 0:b94e330c98ac | 485 | if (msdConnected) { |
alindvall | 0:b94e330c98ac | 486 | msdConnected = false; |
alindvall | 0:b94e330c98ac | 487 | haveUSBMSD = false; |
alindvall | 0:b94e330c98ac | 488 | log->printf(USB_TASK_PREFIX"USB MassStorage Device - Ejected\n"); |
alindvall | 0:b94e330c98ac | 489 | } |
alindvall | 0:b94e330c98ac | 490 | |
alindvall | 0:b94e330c98ac | 491 | if (msd->connect()) { |
alindvall | 0:b94e330c98ac | 492 | msdConnected = true; |
alindvall | 0:b94e330c98ac | 493 | haveUSBMSD = true; |
alindvall | 0:b94e330c98ac | 494 | log->printf(USB_TASK_PREFIX"USB MassStorage Device - Connected\n"); |
alindvall | 0:b94e330c98ac | 495 | } |
alindvall | 0:b94e330c98ac | 496 | } |
alindvall | 0:b94e330c98ac | 497 | |
alindvall | 0:b94e330c98ac | 498 | if (keyboard->connected()) { |
alindvall | 0:b94e330c98ac | 499 | if (!keyboardConnected) { |
alindvall | 0:b94e330c98ac | 500 | keyboardConnected = true; |
alindvall | 0:b94e330c98ac | 501 | log->printf(USB_TASK_PREFIX"USB Keyboard - Connected\n"); |
alindvall | 0:b94e330c98ac | 502 | keyboard->attach(keyEvent); |
alindvall | 0:b94e330c98ac | 503 | } |
alindvall | 0:b94e330c98ac | 504 | } else { |
alindvall | 0:b94e330c98ac | 505 | if (keyboardConnected) { |
alindvall | 0:b94e330c98ac | 506 | keyboardConnected = false; |
alindvall | 0:b94e330c98ac | 507 | log->printf(USB_TASK_PREFIX"USB Keyboard - Ejected\n"); |
alindvall | 0:b94e330c98ac | 508 | } |
alindvall | 0:b94e330c98ac | 509 | if (keyboard->connect()) { |
alindvall | 0:b94e330c98ac | 510 | keyboardConnected = true; |
alindvall | 0:b94e330c98ac | 511 | log->printf(USB_TASK_PREFIX"USB Keyboard - Connected\n"); |
alindvall | 0:b94e330c98ac | 512 | keyboard->attach(keyEvent); |
alindvall | 0:b94e330c98ac | 513 | } |
alindvall | 0:b94e330c98ac | 514 | } |
alindvall | 0:b94e330c98ac | 515 | |
alindvall | 0:b94e330c98ac | 516 | if (mouse->connected()) { |
alindvall | 0:b94e330c98ac | 517 | if (!mouseConnected) { |
alindvall | 0:b94e330c98ac | 518 | mouseConnected = true; |
alindvall | 0:b94e330c98ac | 519 | log->printf(USB_TASK_PREFIX"USB Mouse - Connected\n"); |
alindvall | 0:b94e330c98ac | 520 | mouse->attachEvent(mouseEvent); |
alindvall | 0:b94e330c98ac | 521 | prepareCursor(true); |
alindvall | 0:b94e330c98ac | 522 | } |
alindvall | 0:b94e330c98ac | 523 | } else { |
alindvall | 0:b94e330c98ac | 524 | if (mouseConnected) { |
alindvall | 0:b94e330c98ac | 525 | prepareCursor(false); |
alindvall | 0:b94e330c98ac | 526 | mouseConnected = false; |
alindvall | 0:b94e330c98ac | 527 | log->printf(USB_TASK_PREFIX"USB Mouse - Ejected\n"); |
alindvall | 0:b94e330c98ac | 528 | } |
alindvall | 0:b94e330c98ac | 529 | if (mouse->connect()) { |
alindvall | 0:b94e330c98ac | 530 | mouseConnected = true; |
alindvall | 0:b94e330c98ac | 531 | log->printf(USB_TASK_PREFIX"USB Mouse - Connected\n"); |
alindvall | 0:b94e330c98ac | 532 | mouse->attachEvent(mouseEvent); |
alindvall | 0:b94e330c98ac | 533 | prepareCursor(true); |
alindvall | 0:b94e330c98ac | 534 | } |
alindvall | 0:b94e330c98ac | 535 | } |
alindvall | 0:b94e330c98ac | 536 | } |
alindvall | 0:b94e330c98ac | 537 | } |
alindvall | 0:b94e330c98ac | 538 | |
alindvall | 0:b94e330c98ac | 539 | |
alindvall | 0:b94e330c98ac | 540 | |
alindvall | 0:b94e330c98ac | 541 | /****************************************************************************** |
alindvall | 0:b94e330c98ac | 542 | * Main function |
alindvall | 0:b94e330c98ac | 543 | *****************************************************************************/ |
alindvall | 0:b94e330c98ac | 544 | int main() |
alindvall | 0:b94e330c98ac | 545 | { |
alindvall | 0:b94e330c98ac | 546 | DMBoard::BoardError err; |
alindvall | 0:b94e330c98ac | 547 | DMBoard* board = &DMBoard::instance(); |
alindvall | 0:b94e330c98ac | 548 | RtosLog* log = board->logger(); |
alindvall | 0:b94e330c98ac | 549 | err = board->init(); |
alindvall | 0:b94e330c98ac | 550 | if (err != DMBoard::Ok) { |
alindvall | 0:b94e330c98ac | 551 | log->printf("Failed to initialize the board, got error %d\r\n", err); |
alindvall | 0:b94e330c98ac | 552 | log->printf("\nTERMINATING\n"); |
embeddedartists | 5:6ca8470ba8f8 | 553 | ThisThread::sleep_for(2000); // allow RtosLog to flush messages |
alindvall | 0:b94e330c98ac | 554 | mbed_die(); |
alindvall | 0:b94e330c98ac | 555 | } |
alindvall | 0:b94e330c98ac | 556 | |
alindvall | 0:b94e330c98ac | 557 | // select which images to use based on display size |
alindvall | 0:b94e330c98ac | 558 | prepareResources(); |
alindvall | 0:b94e330c98ac | 559 | |
alindvall | 0:b94e330c98ac | 560 | board->buzzer(440,50); |
embeddedartists | 5:6ca8470ba8f8 | 561 | ThisThread::sleep_for(30); |
alindvall | 0:b94e330c98ac | 562 | board->buzzer(660,50); |
embeddedartists | 5:6ca8470ba8f8 | 563 | ThisThread::sleep_for(30); |
alindvall | 0:b94e330c98ac | 564 | board->buzzer(440,50); |
alindvall | 0:b94e330c98ac | 565 | |
alindvall | 4:a7cbb22e4348 | 566 | log->printf("\n\n---\nDemo flashed on new Display Modules.\nBuilt: " __DATE__ " at " __TIME__ "\n\n"); |
alindvall | 0:b94e330c98ac | 567 | |
alindvall | 0:b94e330c98ac | 568 | |
embeddedartists | 5:6ca8470ba8f8 | 569 | Thread tAlive; |
embeddedartists | 5:6ca8470ba8f8 | 570 | tAlive.start(aliveTask); |
alindvall | 0:b94e330c98ac | 571 | #if defined(DM_BOARD_USE_DISPLAY) |
embeddedartists | 5:6ca8470ba8f8 | 572 | Thread tSwim(osPriorityNormal, 8192); |
embeddedartists | 5:6ca8470ba8f8 | 573 | tSwim.start(swimTask); |
alindvall | 0:b94e330c98ac | 574 | #endif |
embeddedartists | 5:6ca8470ba8f8 | 575 | Thread tNetwork(osPriorityNormal, 8192); |
embeddedartists | 5:6ca8470ba8f8 | 576 | tNetwork.start(netTask); |
embeddedartists | 5:6ca8470ba8f8 | 577 | Thread tUSBHandler(osPriorityNormal, 8192); |
embeddedartists | 5:6ca8470ba8f8 | 578 | tUSBHandler.start(usbTask); |
alindvall | 0:b94e330c98ac | 579 | |
alindvall | 0:b94e330c98ac | 580 | while(1) { |
alindvall | 0:b94e330c98ac | 581 | // Wait forever (in 1h increments) to prevent the tAlive, tSwim, |
alindvall | 0:b94e330c98ac | 582 | // tNetwork and tUSBHandler thread from being garbage collected. |
embeddedartists | 5:6ca8470ba8f8 | 583 | ThisThread::sleep_for(3600*1000); |
alindvall | 0:b94e330c98ac | 584 | } |
alindvall | 0:b94e330c98ac | 585 | } |