Example using the support package for LPC4088 DisplayModule

Dependencies:   DMBasicGUI DMSupport

Example using a lot of the features in the software package for the LPC4088 Display Module.

This project can be selected as a template when creating a new project based on the LPC4088 Display Module.

Information

This project works on the 4.3" display modules.

Some of the apps works on the 5" display modules. The ImageViewer and Slideshow app will show the images distorted as it does not take the resolution into consideration.

Information

The USB Status app is disabled. The Image viewer looks for images in the root of SD cards, USB memory sticks or the file system on the QSPI flash. The Slideshow app expects to find a slideshow script in /mci/elec14/ea_logo.txt.

This is what it looks like on the 4.3" display:

/media/uploads/embeddedartists/everything_cap_000.png /media/uploads/embeddedartists/everything_cap_001.png /media/uploads/embeddedartists/everything_cap_003.png /media/uploads/embeddedartists/everything_cap_004.png /media/uploads/embeddedartists/everything_cap_006.png /media/uploads/embeddedartists/everything_cap_008.png

Committer:
embeddedartists
Date:
Fri Dec 19 16:44:03 2014 +0100
Revision:
6:8007691f78dc
Parent:
4:37a60b9bdb99
Child:
7:c8bef6a4b019
Cleanup

Who changed what in which revision?

UserRevisionLine numberNew contents of line
embeddedartists 0:dfad71908d59 1 /******************************************************************************
embeddedartists 0:dfad71908d59 2 * Includes
embeddedartists 0:dfad71908d59 3 *****************************************************************************/
embeddedartists 0:dfad71908d59 4
embeddedartists 0:dfad71908d59 5 #include "mbed.h"
embeddedartists 0:dfad71908d59 6 #include "mbed_interface.h"
embeddedartists 0:dfad71908d59 7 #include "rtos.h"
embeddedartists 0:dfad71908d59 8 #include "EthernetInterface.h"
embeddedartists 0:dfad71908d59 9 #include "HTTPServer.h"
embeddedartists 0:dfad71908d59 10 #include "mbed_rpc.h"
embeddedartists 0:dfad71908d59 11 #include "USBHostMSD.h"
embeddedartists 1:15ea03d72dd7 12 #include "USBHostMouse.h"
embeddedartists 1:15ea03d72dd7 13 #include "USBHostKeyboard.h"
embeddedartists 0:dfad71908d59 14
embeddedartists 0:dfad71908d59 15 #include "DMBoard.h"
embeddedartists 0:dfad71908d59 16
embeddedartists 2:070e9c054796 17 #include "AppLauncher.h"
embeddedartists 2:070e9c054796 18 #include "meas.h"
embeddedartists 2:070e9c054796 19
embeddedartists 2:070e9c054796 20
embeddedartists 0:dfad71908d59 21 /******************************************************************************
embeddedartists 0:dfad71908d59 22 * Typedefs and defines
embeddedartists 0:dfad71908d59 23 *****************************************************************************/
embeddedartists 0:dfad71908d59 24
embeddedartists 0:dfad71908d59 25 /* Number of colors in 565 mode */
embeddedartists 0:dfad71908d59 26 #define NUM_COLORS 65536
embeddedartists 0:dfad71908d59 27 /* Number of red colors in 565 mode */
embeddedartists 0:dfad71908d59 28 #define RED_COLORS 0x20
embeddedartists 0:dfad71908d59 29 /* Number of green colors in 565 mode */
embeddedartists 0:dfad71908d59 30 #define GREEN_COLORS 0x40
embeddedartists 0:dfad71908d59 31 /* Number of blue colors in 565 mode */
embeddedartists 0:dfad71908d59 32 #define BLUE_COLORS 0x20
embeddedartists 0:dfad71908d59 33 /* Black color, 565 mode */
embeddedartists 0:dfad71908d59 34 #define BLACK 0x0000
embeddedartists 0:dfad71908d59 35
embeddedartists 0:dfad71908d59 36 /******************************************************************************
embeddedartists 0:dfad71908d59 37 * Local variables
embeddedartists 0:dfad71908d59 38 *****************************************************************************/
embeddedartists 0:dfad71908d59 39
embeddedartists 1:15ea03d72dd7 40 Mutex usbInitGuard;
embeddedartists 0:dfad71908d59 41
embeddedartists 0:dfad71908d59 42 /******************************************************************************
embeddedartists 0:dfad71908d59 43 * Global variables
embeddedartists 0:dfad71908d59 44 *****************************************************************************/
embeddedartists 0:dfad71908d59 45
embeddedartists 2:070e9c054796 46 EthernetInterface eth;
embeddedartists 2:070e9c054796 47 bool ethInitialized = false;
embeddedartists 2:070e9c054796 48 bool ethUsingDHCP = true;
embeddedartists 4:37a60b9bdb99 49 bool haveUSBMSD = false;
embeddedartists 2:070e9c054796 50
embeddedartists 0:dfad71908d59 51 /******************************************************************************
embeddedartists 0:dfad71908d59 52 * Local functions
embeddedartists 0:dfad71908d59 53 *****************************************************************************/
embeddedartists 0:dfad71908d59 54
embeddedartists 0:dfad71908d59 55 void aliveTask(void const* args)
embeddedartists 0:dfad71908d59 56 {
embeddedartists 0:dfad71908d59 57 DMBoard* board = &DMBoard::instance();
embeddedartists 0:dfad71908d59 58
embeddedartists 0:dfad71908d59 59 while(true)
embeddedartists 0:dfad71908d59 60 {
embeddedartists 0:dfad71908d59 61 board->setLED(DMBoard::Led4, false);
embeddedartists 0:dfad71908d59 62 board->setLED(DMBoard::Led1, true);
embeddedartists 0:dfad71908d59 63 Thread::wait(300);
embeddedartists 0:dfad71908d59 64 board->setLED(DMBoard::Led1, false);
embeddedartists 0:dfad71908d59 65 board->setLED(DMBoard::Led2, true);
embeddedartists 0:dfad71908d59 66 Thread::wait(300);
embeddedartists 0:dfad71908d59 67 board->setLED(DMBoard::Led2, false);
embeddedartists 0:dfad71908d59 68 board->setLED(DMBoard::Led3, true);
embeddedartists 0:dfad71908d59 69 Thread::wait(300);
embeddedartists 0:dfad71908d59 70 board->setLED(DMBoard::Led3, false);
embeddedartists 0:dfad71908d59 71 board->setLED(DMBoard::Led4, true);
embeddedartists 0:dfad71908d59 72 Thread::wait(300);
embeddedartists 0:dfad71908d59 73 }
embeddedartists 0:dfad71908d59 74 }
embeddedartists 0:dfad71908d59 75
embeddedartists 0:dfad71908d59 76 /*
embeddedartists 0:dfad71908d59 77 * Reads the /message.txt file from the file system and prints the content
embeddedartists 0:dfad71908d59 78 */
embeddedartists 0:dfad71908d59 79 void readMessageFile(const char* prefix)
embeddedartists 0:dfad71908d59 80 {
embeddedartists 0:dfad71908d59 81 RtosLog* log = DMBoard::instance().logger();
embeddedartists 0:dfad71908d59 82 log->printf("%sTesting to read from USB\n", prefix);
embeddedartists 0:dfad71908d59 83
embeddedartists 1:15ea03d72dd7 84 FILE * fp = fopen("/usb/message.txt", "r");
embeddedartists 0:dfad71908d59 85
embeddedartists 0:dfad71908d59 86 if (fp != NULL) {
embeddedartists 0:dfad71908d59 87 uint8_t* buff = (uint8_t*)malloc(1024+1);
embeddedartists 0:dfad71908d59 88 if (buff == NULL) {
embeddedartists 0:dfad71908d59 89 log->printf("%sFailed to allocate memory for test\n", prefix);
embeddedartists 0:dfad71908d59 90 } else {
embeddedartists 0:dfad71908d59 91 int num = fread(buff, 1, 1024, fp);
embeddedartists 0:dfad71908d59 92 if (num <= 0) {
embeddedartists 0:dfad71908d59 93 log->printf("%sUnable to read file, got %d as result\n", prefix, num);
embeddedartists 0:dfad71908d59 94 } else if (num < 1024) {
embeddedartists 3:4301d34173cf 95 log->printf("%sHave read all %d bytes in the file:\n---\n", prefix, num);
embeddedartists 0:dfad71908d59 96 buff[num] = '\0';
embeddedartists 0:dfad71908d59 97 log->printf((const char*)buff);
embeddedartists 3:4301d34173cf 98 log->printf("\n---\n");
embeddedartists 0:dfad71908d59 99 } else {
embeddedartists 0:dfad71908d59 100 log->printf("%sHave read %d bytes with more to read\n", prefix, num);
embeddedartists 0:dfad71908d59 101 }
embeddedartists 0:dfad71908d59 102 free(buff);
embeddedartists 0:dfad71908d59 103 }
embeddedartists 0:dfad71908d59 104 fclose(fp);
embeddedartists 0:dfad71908d59 105 } else {
embeddedartists 0:dfad71908d59 106 log->printf("%sFILE == NULL\r\n", prefix);
embeddedartists 0:dfad71908d59 107 }
embeddedartists 0:dfad71908d59 108 }
embeddedartists 0:dfad71908d59 109
embeddedartists 0:dfad71908d59 110
embeddedartists 0:dfad71908d59 111 #if defined(DM_BOARD_USE_DISPLAY)
embeddedartists 2:070e9c054796 112
embeddedartists 2:070e9c054796 113 #define SWIM_TASK_PREFIX "[SWIM] "
embeddedartists 2:070e9c054796 114 void swimTask(void const* args)
embeddedartists 2:070e9c054796 115 {
embeddedartists 2:070e9c054796 116 RtosLog* log = DMBoard::instance().logger();
embeddedartists 2:070e9c054796 117
embeddedartists 2:070e9c054796 118 log->printf(SWIM_TASK_PREFIX"swimTask started\n");
embeddedartists 4:37a60b9bdb99 119
embeddedartists 2:070e9c054796 120 AppLauncher launcher;
embeddedartists 2:070e9c054796 121 if (launcher.setup()) {
embeddedartists 4:37a60b9bdb99 122
embeddedartists 6:8007691f78dc 123 //// With icons as buttons we need the USB memory stick to with the image files
embeddedartists 6:8007691f78dc 124 //if (!haveUSBMSD) {
embeddedartists 6:8007691f78dc 125 // log->printf("Waiting for USB MSD to be connected!\n");
embeddedartists 6:8007691f78dc 126 // do {
embeddedartists 6:8007691f78dc 127 // Thread::wait(1000);
embeddedartists 6:8007691f78dc 128 // } while(!haveUSBMSD);
embeddedartists 6:8007691f78dc 129 //}
embeddedartists 4:37a60b9bdb99 130
embeddedartists 2:070e9c054796 131 log->printf(SWIM_TASK_PREFIX"Starting menu system\n");
embeddedartists 2:070e9c054796 132 launcher.runToCompletion();
embeddedartists 2:070e9c054796 133 launcher.teardown();
embeddedartists 2:070e9c054796 134 } else {
embeddedartists 4:37a60b9bdb99 135 log->printf(SWIM_TASK_PREFIX"Failed to prepare menu system\n");
embeddedartists 2:070e9c054796 136 }
embeddedartists 2:070e9c054796 137
embeddedartists 2:070e9c054796 138 // Should never end up here
embeddedartists 2:070e9c054796 139 mbed_die();
embeddedartists 2:070e9c054796 140 }
embeddedartists 2:070e9c054796 141
embeddedartists 0:dfad71908d59 142 #endif //DM_BOARD_USE_DISPLAY
embeddedartists 0:dfad71908d59 143
embeddedartists 0:dfad71908d59 144 #define MSD_TASK_PREFIX "[MSD] "
embeddedartists 0:dfad71908d59 145
embeddedartists 0:dfad71908d59 146 void msdTask(void const* args)
embeddedartists 1:15ea03d72dd7 147 {
embeddedartists 1:15ea03d72dd7 148 usbInitGuard.lock();
embeddedartists 1:15ea03d72dd7 149 USBHostMSD* msd = new USBHostMSD("usb");
embeddedartists 1:15ea03d72dd7 150 usbInitGuard.unlock();
embeddedartists 0:dfad71908d59 151 USBHost* host = USBHost::getHostInst();
embeddedartists 0:dfad71908d59 152 RtosLog* log = DMBoard::instance().logger();
embeddedartists 0:dfad71908d59 153
embeddedartists 0:dfad71908d59 154 log->printf(MSD_TASK_PREFIX"msdTask started\n");
embeddedartists 0:dfad71908d59 155
embeddedartists 0:dfad71908d59 156 while(1) {
embeddedartists 0:dfad71908d59 157
embeddedartists 0:dfad71908d59 158 log->printf(MSD_TASK_PREFIX"Attempting to connect...\n");
embeddedartists 0:dfad71908d59 159
embeddedartists 0:dfad71908d59 160 // try to connect a MSD device
embeddedartists 1:15ea03d72dd7 161 bool connected = false;
embeddedartists 1:15ea03d72dd7 162 do {
embeddedartists 1:15ea03d72dd7 163 usbInitGuard.lock();
embeddedartists 1:15ea03d72dd7 164 connected = msd->connect();
embeddedartists 1:15ea03d72dd7 165 usbInitGuard.unlock();
embeddedartists 1:15ea03d72dd7 166 if (!connected) {
embeddedartists 1:15ea03d72dd7 167 //log->printf(MSD_TASK_PREFIX"Failed to connect, waiting and trying again!\n");
embeddedartists 1:15ea03d72dd7 168 Thread::wait(500);
embeddedartists 3:4301d34173cf 169 //DMBoard::instance().buzzer(440, 100);
embeddedartists 0:dfad71908d59 170 }
embeddedartists 1:15ea03d72dd7 171 } while(!connected);
embeddedartists 0:dfad71908d59 172
embeddedartists 0:dfad71908d59 173 log->printf(MSD_TASK_PREFIX"Connected!\n");
embeddedartists 4:37a60b9bdb99 174 haveUSBMSD = true;
embeddedartists 0:dfad71908d59 175
embeddedartists 0:dfad71908d59 176 // read a file
embeddedartists 4:37a60b9bdb99 177 //readMessageFile(MSD_TASK_PREFIX);
embeddedartists 0:dfad71908d59 178
embeddedartists 0:dfad71908d59 179 // if/when the device is disconnected, we try to connect it again
embeddedartists 0:dfad71908d59 180 while(1) {
embeddedartists 0:dfad71908d59 181
embeddedartists 0:dfad71908d59 182 Thread::wait(500);
embeddedartists 0:dfad71908d59 183
embeddedartists 0:dfad71908d59 184 // if device disconnected, try to connect again
embeddedartists 4:37a60b9bdb99 185 if (!msd->connected()) {
embeddedartists 0:dfad71908d59 186 break;
embeddedartists 4:37a60b9bdb99 187 }
embeddedartists 0:dfad71908d59 188 }
embeddedartists 4:37a60b9bdb99 189 haveUSBMSD = false;
embeddedartists 0:dfad71908d59 190 log->printf(MSD_TASK_PREFIX"Disconnected\n");
embeddedartists 0:dfad71908d59 191 }
embeddedartists 0:dfad71908d59 192 }
embeddedartists 0:dfad71908d59 193
embeddedartists 0:dfad71908d59 194 #define NET_TASK_PREFIX "[NET] "
embeddedartists 0:dfad71908d59 195
embeddedartists 0:dfad71908d59 196 void netTask(void const* args)
embeddedartists 0:dfad71908d59 197 {
embeddedartists 0:dfad71908d59 198 RtosLog* log = DMBoard::instance().logger();
embeddedartists 0:dfad71908d59 199 log->printf(NET_TASK_PREFIX"EthernetInterface Setting up...\r\n");
embeddedartists 0:dfad71908d59 200 if(eth.init()!=0) { //for DHCP Server
embeddedartists 0:dfad71908d59 201 //if(eth.init(IPAddress,NetMasks,Gateway)!=0) { //for Static IP Address
embeddedartists 0:dfad71908d59 202 log->printf(NET_TASK_PREFIX"EthernetInterface Initialize Error \r\n");
embeddedartists 0:dfad71908d59 203 mbed_die();
embeddedartists 0:dfad71908d59 204 }
embeddedartists 2:070e9c054796 205 while (eth.connect() != 0) {
embeddedartists 2:070e9c054796 206 Thread::wait(1000);
embeddedartists 0:dfad71908d59 207 }
embeddedartists 0:dfad71908d59 208
embeddedartists 2:070e9c054796 209 ethInitialized = true;
embeddedartists 2:070e9c054796 210 ethUsingDHCP = true;
embeddedartists 2:070e9c054796 211
embeddedartists 0:dfad71908d59 212 log->printf(NET_TASK_PREFIX"IP Address is %s\r\n", eth.getIPAddress());
embeddedartists 0:dfad71908d59 213 log->printf(NET_TASK_PREFIX"NetMask is %s\r\n", eth.getNetworkMask());
embeddedartists 0:dfad71908d59 214 log->printf(NET_TASK_PREFIX"Gateway Address is %s\r\n", eth.getGateway());
embeddedartists 0:dfad71908d59 215 log->printf(NET_TASK_PREFIX"Ethernet Setup OK\r\n");
embeddedartists 0:dfad71908d59 216
embeddedartists 0:dfad71908d59 217 HTTPServerAddHandler<SimpleHandler>("/hello"); //Default handler
embeddedartists 0:dfad71908d59 218 FSHandler::mount("/usb", "/");
embeddedartists 0:dfad71908d59 219 HTTPServerAddHandler<FSHandler>("/");
embeddedartists 0:dfad71908d59 220 //HTTPServerAddHandler<RPCHandler>("/rpc");
embeddedartists 0:dfad71908d59 221 //lcd.locate(0,0);
embeddedartists 0:dfad71908d59 222 //lcd.printf("%s",eth.getIPAddress());
embeddedartists 0:dfad71908d59 223 HTTPServerStart(80);
embeddedartists 0:dfad71908d59 224 }
embeddedartists 0:dfad71908d59 225
embeddedartists 1:15ea03d72dd7 226 static uint8_t mouse_button, mouse_x, mouse_y, mouse_z;
embeddedartists 1:15ea03d72dd7 227 void mouseEvent(uint8_t buttons, int8_t x, int8_t y, int8_t z)
embeddedartists 1:15ea03d72dd7 228 {
embeddedartists 1:15ea03d72dd7 229 mouse_button = buttons;
embeddedartists 1:15ea03d72dd7 230 mouse_x = x;
embeddedartists 1:15ea03d72dd7 231 mouse_y = y;
embeddedartists 1:15ea03d72dd7 232 mouse_z = z;
embeddedartists 1:15ea03d72dd7 233 }
embeddedartists 1:15ea03d72dd7 234
embeddedartists 1:15ea03d72dd7 235 #define MOUSE_TASK_PREFIX "[MOUSE] "
embeddedartists 1:15ea03d72dd7 236
embeddedartists 1:15ea03d72dd7 237 void mouseTask(void const* args)
embeddedartists 1:15ea03d72dd7 238 {
embeddedartists 1:15ea03d72dd7 239 usbInitGuard.lock();
embeddedartists 1:15ea03d72dd7 240 USBHostMouse* mouse = new USBHostMouse();
embeddedartists 1:15ea03d72dd7 241 usbInitGuard.unlock();
embeddedartists 1:15ea03d72dd7 242 RtosLog* log = DMBoard::instance().logger();
embeddedartists 1:15ea03d72dd7 243
embeddedartists 1:15ea03d72dd7 244 log->printf(MOUSE_TASK_PREFIX"mouseTask started\n");
embeddedartists 1:15ea03d72dd7 245
embeddedartists 1:15ea03d72dd7 246 while(1) {
embeddedartists 1:15ea03d72dd7 247
embeddedartists 1:15ea03d72dd7 248 log->printf(MOUSE_TASK_PREFIX"Attempting to connect...\n");
embeddedartists 1:15ea03d72dd7 249
embeddedartists 1:15ea03d72dd7 250 // try to connect a mouse
embeddedartists 1:15ea03d72dd7 251 bool connected = false;
embeddedartists 1:15ea03d72dd7 252 do {
embeddedartists 1:15ea03d72dd7 253 usbInitGuard.lock();
embeddedartists 1:15ea03d72dd7 254 connected = mouse->connect();
embeddedartists 1:15ea03d72dd7 255 usbInitGuard.unlock();
embeddedartists 1:15ea03d72dd7 256 if (!connected) {
embeddedartists 1:15ea03d72dd7 257 //log->printf(MOUSE_TASK_PREFIX"Failed to connect, waiting and trying again!\n");
embeddedartists 1:15ea03d72dd7 258 Thread::wait(500);
embeddedartists 1:15ea03d72dd7 259 }
embeddedartists 1:15ea03d72dd7 260 } while(!connected);
embeddedartists 1:15ea03d72dd7 261
embeddedartists 1:15ea03d72dd7 262 log->printf(MOUSE_TASK_PREFIX"Connected!\n");
embeddedartists 1:15ea03d72dd7 263 mouse->attachEvent(mouseEvent);
embeddedartists 1:15ea03d72dd7 264
embeddedartists 1:15ea03d72dd7 265 while(mouse->connected()) {
embeddedartists 1:15ea03d72dd7 266 log->printf(MOUSE_TASK_PREFIX"Buttons: 0x%02x, X %3d, Y %3d, Z %3d\n", mouse_button, mouse_x, mouse_y, mouse_z);
embeddedartists 1:15ea03d72dd7 267 Thread::wait(500);
embeddedartists 1:15ea03d72dd7 268 }
embeddedartists 1:15ea03d72dd7 269
embeddedartists 1:15ea03d72dd7 270 log->printf(MOUSE_TASK_PREFIX"Disconnected\n");
embeddedartists 1:15ea03d72dd7 271 }
embeddedartists 1:15ea03d72dd7 272 }
embeddedartists 1:15ea03d72dd7 273
embeddedartists 1:15ea03d72dd7 274 #define CIRCBUFF_SIZE 256
embeddedartists 1:15ea03d72dd7 275 static uint8_t circbuff[CIRCBUFF_SIZE];
embeddedartists 1:15ea03d72dd7 276 static uint32_t circbuff_read = 0;
embeddedartists 1:15ea03d72dd7 277 static uint32_t circbuff_write = 0;
embeddedartists 1:15ea03d72dd7 278 void keyEvent(uint8_t key)
embeddedartists 1:15ea03d72dd7 279 {
embeddedartists 1:15ea03d72dd7 280 circbuff[circbuff_write%CIRCBUFF_SIZE] = key;
embeddedartists 1:15ea03d72dd7 281 circbuff_write++;
embeddedartists 1:15ea03d72dd7 282 }
embeddedartists 1:15ea03d72dd7 283
embeddedartists 1:15ea03d72dd7 284 #define KEY_TASK_PREFIX "[KEY] "
embeddedartists 1:15ea03d72dd7 285
embeddedartists 1:15ea03d72dd7 286 void keyTask(void const* args)
embeddedartists 1:15ea03d72dd7 287 {
embeddedartists 1:15ea03d72dd7 288 usbInitGuard.lock();
embeddedartists 1:15ea03d72dd7 289 USBHostKeyboard* keyboard = new USBHostKeyboard();
embeddedartists 1:15ea03d72dd7 290 usbInitGuard.unlock();
embeddedartists 1:15ea03d72dd7 291
embeddedartists 1:15ea03d72dd7 292 RtosLog* log = DMBoard::instance().logger();
embeddedartists 1:15ea03d72dd7 293 uint8_t buff[10+1] = {0};
embeddedartists 1:15ea03d72dd7 294 int pos;
embeddedartists 1:15ea03d72dd7 295
embeddedartists 1:15ea03d72dd7 296 log->printf(KEY_TASK_PREFIX"keyTask started\n");
embeddedartists 1:15ea03d72dd7 297
embeddedartists 1:15ea03d72dd7 298 while(1) {
embeddedartists 1:15ea03d72dd7 299
embeddedartists 1:15ea03d72dd7 300 log->printf(KEY_TASK_PREFIX"Attempting to connect...\n");
embeddedartists 1:15ea03d72dd7 301
embeddedartists 1:15ea03d72dd7 302 // try to connect a keyboard
embeddedartists 1:15ea03d72dd7 303 bool connected = false;
embeddedartists 1:15ea03d72dd7 304 do {
embeddedartists 1:15ea03d72dd7 305 usbInitGuard.lock();
embeddedartists 1:15ea03d72dd7 306 connected = keyboard->connect();
embeddedartists 1:15ea03d72dd7 307 usbInitGuard.unlock();
embeddedartists 1:15ea03d72dd7 308 if (!connected) {
embeddedartists 1:15ea03d72dd7 309 //log->printf(KEY_TASK_PREFIX"Failed to connect, waiting and trying again!\n");
embeddedartists 1:15ea03d72dd7 310 Thread::wait(1000);
embeddedartists 1:15ea03d72dd7 311 }
embeddedartists 1:15ea03d72dd7 312 } while(!connected);
embeddedartists 1:15ea03d72dd7 313
embeddedartists 1:15ea03d72dd7 314 log->printf(KEY_TASK_PREFIX"Connected!\n");
embeddedartists 1:15ea03d72dd7 315 keyboard->attach(keyEvent);
embeddedartists 1:15ea03d72dd7 316
embeddedartists 1:15ea03d72dd7 317 while(keyboard->connected()) {
embeddedartists 1:15ea03d72dd7 318 for (pos = 0; pos < 10; pos++) {
embeddedartists 1:15ea03d72dd7 319 if (circbuff_read < circbuff_write) {
embeddedartists 1:15ea03d72dd7 320 buff[pos++] = circbuff[circbuff_read%CIRCBUFF_SIZE];
embeddedartists 1:15ea03d72dd7 321 circbuff_read++;
embeddedartists 1:15ea03d72dd7 322 } else {
embeddedartists 1:15ea03d72dd7 323 break;
embeddedartists 1:15ea03d72dd7 324 }
embeddedartists 1:15ea03d72dd7 325 }
embeddedartists 1:15ea03d72dd7 326 if (pos > 0) {
embeddedartists 1:15ea03d72dd7 327 log->printf(KEY_TASK_PREFIX"%s\n", buff);
embeddedartists 1:15ea03d72dd7 328 }
embeddedartists 1:15ea03d72dd7 329 Thread::wait(20);
embeddedartists 1:15ea03d72dd7 330 }
embeddedartists 1:15ea03d72dd7 331
embeddedartists 1:15ea03d72dd7 332 log->printf(KEY_TASK_PREFIX"Disconnected\n");
embeddedartists 1:15ea03d72dd7 333 }
embeddedartists 1:15ea03d72dd7 334 }
embeddedartists 1:15ea03d72dd7 335
embeddedartists 0:dfad71908d59 336 /******************************************************************************
embeddedartists 0:dfad71908d59 337 * Main function
embeddedartists 0:dfad71908d59 338 *****************************************************************************/
embeddedartists 0:dfad71908d59 339 int main()
embeddedartists 0:dfad71908d59 340 {
embeddedartists 0:dfad71908d59 341 DMBoard::BoardError err;
embeddedartists 0:dfad71908d59 342 DMBoard* board = &DMBoard::instance();
embeddedartists 0:dfad71908d59 343 RtosLog* log = board->logger();
embeddedartists 0:dfad71908d59 344 err = board->init();
embeddedartists 0:dfad71908d59 345 if (err != DMBoard::Ok) {
embeddedartists 0:dfad71908d59 346 log->printf("Failed to initialize the board, got error %d\r\n", err);
embeddedartists 0:dfad71908d59 347 mbed_die();
embeddedartists 0:dfad71908d59 348 }
embeddedartists 0:dfad71908d59 349
embeddedartists 0:dfad71908d59 350 log->printf("\n\n---\nMulti-threaded demo\nBuilt: " __DATE__ " at " __TIME__ "\n\n");
embeddedartists 0:dfad71908d59 351
embeddedartists 1:15ea03d72dd7 352 //log->printf("Press button to start...\r\n");
embeddedartists 1:15ea03d72dd7 353 //while(!board->buttonPressed());
embeddedartists 1:15ea03d72dd7 354 //while(board->buttonPressed());
embeddedartists 0:dfad71908d59 355
embeddedartists 0:dfad71908d59 356 Thread tAlive(aliveTask);
embeddedartists 0:dfad71908d59 357 #if defined(DM_BOARD_USE_DISPLAY)
embeddedartists 2:070e9c054796 358 Thread tSwim(swimTask, NULL, osPriorityNormal, 8192);
embeddedartists 0:dfad71908d59 359 #endif
embeddedartists 0:dfad71908d59 360 Thread tMemstick(msdTask, NULL, osPriorityNormal, 8192);
embeddedartists 0:dfad71908d59 361 Thread tNetwork(netTask, NULL, osPriorityNormal, 8192);
embeddedartists 1:15ea03d72dd7 362 Thread tMouse(mouseTask);
embeddedartists 1:15ea03d72dd7 363 Thread tKeyboard(keyTask);
embeddedartists 0:dfad71908d59 364
embeddedartists 0:dfad71908d59 365 while(1) { wait(5); }
embeddedartists 0:dfad71908d59 366 }