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:

/media/uploads/embeddedartists/demo480_cap_000.png /media/uploads/embeddedartists/demo480_cap_001.png /media/uploads/embeddedartists/demo480_cap_002.png /media/uploads/embeddedartists/demo480_cap_004.png /media/uploads/embeddedartists/demo480_cap_006.png /media/uploads/embeddedartists/demo480_cap_007.png /media/uploads/embeddedartists/demo480_cap_008.png
The first slide from the Slideshow:
/media/uploads/embeddedartists/demo480_cap_003.png
A couple of images from the Image Viewer
/media/uploads/embeddedartists/demo480_cap_009.png /media/uploads/embeddedartists/demo480_cap_010.png

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?

UserRevisionLine numberNew 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 }