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:
Thu Dec 11 11:53:23 2014 +0000
Revision:
3:4301d34173cf
Parent:
2:070e9c054796
Child:
4:37a60b9bdb99
Moved HttpServer and mbed-rpc into the DMSupport library. Moved the application and lpc_swim stuff into DMBasicGUI

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 2:070e9c054796 49
embeddedartists 0:dfad71908d59 50 /******************************************************************************
embeddedartists 0:dfad71908d59 51 * Local functions
embeddedartists 0:dfad71908d59 52 *****************************************************************************/
embeddedartists 0:dfad71908d59 53
embeddedartists 0:dfad71908d59 54 static void verticalLine16(uint16_t* framebuffer, int w, int x, int y0, int y1, uint16_t color)
embeddedartists 0:dfad71908d59 55 {
embeddedartists 0:dfad71908d59 56 if (x < w) {
embeddedartists 0:dfad71908d59 57 int h = y1 - y0 + 1;
embeddedartists 0:dfad71908d59 58 uint16_t* fb = framebuffer;
embeddedartists 0:dfad71908d59 59 fb += x;
embeddedartists 0:dfad71908d59 60 fb += y0 * w;
embeddedartists 0:dfad71908d59 61 for (int i = 0; i < h; i++) {
embeddedartists 0:dfad71908d59 62 *fb = color;
embeddedartists 0:dfad71908d59 63 fb += w;
embeddedartists 0:dfad71908d59 64 }
embeddedartists 0:dfad71908d59 65 }
embeddedartists 0:dfad71908d59 66 }
embeddedartists 0:dfad71908d59 67
embeddedartists 0:dfad71908d59 68 /**
embeddedartists 0:dfad71908d59 69 * Draw color bars to the display
embeddedartists 0:dfad71908d59 70 */
embeddedartists 0:dfad71908d59 71 static void drawBars565(uint16_t* framebuffer, int w, int h)
embeddedartists 0:dfad71908d59 72 {
embeddedartists 0:dfad71908d59 73 uint16_t clr;
embeddedartists 0:dfad71908d59 74 uint16_t xgs, ygs, curx, cury, curym, xidx;
embeddedartists 0:dfad71908d59 75 int idx;
embeddedartists 0:dfad71908d59 76
embeddedartists 0:dfad71908d59 77 /* Compute vertical size for bars */
embeddedartists 0:dfad71908d59 78 ygs = h / 3;
embeddedartists 0:dfad71908d59 79
embeddedartists 0:dfad71908d59 80 /* Draw Red bars */
embeddedartists 0:dfad71908d59 81 cury = 0;
embeddedartists 0:dfad71908d59 82 curx = 0;
embeddedartists 0:dfad71908d59 83 curym = ygs - 1;
embeddedartists 0:dfad71908d59 84 xgs = w / RED_COLORS;
embeddedartists 0:dfad71908d59 85 clr = BLACK;
embeddedartists 0:dfad71908d59 86 for (xidx = 0; xidx < RED_COLORS; xidx++)
embeddedartists 0:dfad71908d59 87 {
embeddedartists 0:dfad71908d59 88 //swim_set_pen_color(win1, clr);
embeddedartists 0:dfad71908d59 89 for (idx = 0; idx <= xgs; idx++)
embeddedartists 0:dfad71908d59 90 {
embeddedartists 0:dfad71908d59 91 //swim_put_line(win1, curx, cury, curx, curym);
embeddedartists 0:dfad71908d59 92 //g.put_line(curx, cury, curx, curym, clr);
embeddedartists 0:dfad71908d59 93 verticalLine16(framebuffer, w, curx, cury, curym, clr);
embeddedartists 0:dfad71908d59 94 curx++;
embeddedartists 0:dfad71908d59 95 }
embeddedartists 0:dfad71908d59 96 clr = clr + 0x0800;
embeddedartists 0:dfad71908d59 97 }
embeddedartists 0:dfad71908d59 98
embeddedartists 0:dfad71908d59 99 /* Draw green bars */
embeddedartists 0:dfad71908d59 100 cury = cury + ygs;
embeddedartists 0:dfad71908d59 101 curx = 0;
embeddedartists 0:dfad71908d59 102 curym = cury + (ygs - 1);
embeddedartists 0:dfad71908d59 103 xgs = w / GREEN_COLORS;
embeddedartists 0:dfad71908d59 104 clr = BLACK;
embeddedartists 0:dfad71908d59 105 for (xidx = 0; xidx < GREEN_COLORS; xidx++)
embeddedartists 0:dfad71908d59 106 {
embeddedartists 0:dfad71908d59 107 //swim_set_pen_color(win1, clr);
embeddedartists 0:dfad71908d59 108 for (idx = 0; idx <= xgs; idx++)
embeddedartists 0:dfad71908d59 109 {
embeddedartists 0:dfad71908d59 110 //swim_put_line(win1, curx, cury, curx, curym);
embeddedartists 0:dfad71908d59 111 //g.put_line(curx, cury, curx, curym, clr);
embeddedartists 0:dfad71908d59 112 verticalLine16(framebuffer, w, curx, cury, curym, clr);
embeddedartists 0:dfad71908d59 113 curx++;
embeddedartists 0:dfad71908d59 114 }
embeddedartists 0:dfad71908d59 115 clr = clr + 0x0020;
embeddedartists 0:dfad71908d59 116 }
embeddedartists 0:dfad71908d59 117
embeddedartists 0:dfad71908d59 118 /* Draw blue bars */
embeddedartists 0:dfad71908d59 119 cury = cury + ygs;
embeddedartists 0:dfad71908d59 120 curx = 0;
embeddedartists 0:dfad71908d59 121 curym = h - 1;//cury + (ygs - 1);
embeddedartists 0:dfad71908d59 122 xgs = w / BLUE_COLORS;
embeddedartists 0:dfad71908d59 123 clr = BLACK;
embeddedartists 0:dfad71908d59 124 for (xidx = 0; xidx < BLUE_COLORS; xidx++)
embeddedartists 0:dfad71908d59 125 {
embeddedartists 0:dfad71908d59 126 //swim_set_pen_color(win1, clr);
embeddedartists 0:dfad71908d59 127 for (idx = 0; idx <= xgs; idx++)
embeddedartists 0:dfad71908d59 128 {
embeddedartists 0:dfad71908d59 129 //swim_put_line(win1, curx, cury, curx, curym);
embeddedartists 0:dfad71908d59 130 //g.put_line(curx, cury, curx, curym, clr);
embeddedartists 0:dfad71908d59 131 verticalLine16(framebuffer, w, curx, cury, curym, clr);
embeddedartists 0:dfad71908d59 132 curx++;
embeddedartists 0:dfad71908d59 133 }
embeddedartists 0:dfad71908d59 134 clr = clr + 0x0001;
embeddedartists 0:dfad71908d59 135 }
embeddedartists 0:dfad71908d59 136 }
embeddedartists 0:dfad71908d59 137
embeddedartists 0:dfad71908d59 138
embeddedartists 0:dfad71908d59 139
embeddedartists 0:dfad71908d59 140 void aliveTask(void const* args)
embeddedartists 0:dfad71908d59 141 {
embeddedartists 0:dfad71908d59 142 DMBoard* board = &DMBoard::instance();
embeddedartists 0:dfad71908d59 143
embeddedartists 0:dfad71908d59 144 while(true)
embeddedartists 0:dfad71908d59 145 {
embeddedartists 0:dfad71908d59 146 board->setLED(DMBoard::Led4, false);
embeddedartists 0:dfad71908d59 147 board->setLED(DMBoard::Led1, true);
embeddedartists 0:dfad71908d59 148 Thread::wait(300);
embeddedartists 0:dfad71908d59 149 board->setLED(DMBoard::Led1, false);
embeddedartists 0:dfad71908d59 150 board->setLED(DMBoard::Led2, true);
embeddedartists 0:dfad71908d59 151 Thread::wait(300);
embeddedartists 0:dfad71908d59 152 board->setLED(DMBoard::Led2, false);
embeddedartists 0:dfad71908d59 153 board->setLED(DMBoard::Led3, true);
embeddedartists 0:dfad71908d59 154 Thread::wait(300);
embeddedartists 0:dfad71908d59 155 board->setLED(DMBoard::Led3, false);
embeddedartists 0:dfad71908d59 156 board->setLED(DMBoard::Led4, true);
embeddedartists 0:dfad71908d59 157 Thread::wait(300);
embeddedartists 0:dfad71908d59 158 }
embeddedartists 0:dfad71908d59 159 }
embeddedartists 0:dfad71908d59 160
embeddedartists 0:dfad71908d59 161 /*
embeddedartists 0:dfad71908d59 162 * Reads the /message.txt file from the file system and prints the content
embeddedartists 0:dfad71908d59 163 */
embeddedartists 0:dfad71908d59 164 void readMessageFile(const char* prefix)
embeddedartists 0:dfad71908d59 165 {
embeddedartists 0:dfad71908d59 166 RtosLog* log = DMBoard::instance().logger();
embeddedartists 0:dfad71908d59 167 log->printf("%sTesting to read from USB\n", prefix);
embeddedartists 0:dfad71908d59 168
embeddedartists 1:15ea03d72dd7 169 FILE * fp = fopen("/usb/message.txt", "r");
embeddedartists 0:dfad71908d59 170
embeddedartists 0:dfad71908d59 171 if (fp != NULL) {
embeddedartists 0:dfad71908d59 172 uint8_t* buff = (uint8_t*)malloc(1024+1);
embeddedartists 0:dfad71908d59 173 if (buff == NULL) {
embeddedartists 0:dfad71908d59 174 log->printf("%sFailed to allocate memory for test\n", prefix);
embeddedartists 0:dfad71908d59 175 } else {
embeddedartists 0:dfad71908d59 176 int num = fread(buff, 1, 1024, fp);
embeddedartists 0:dfad71908d59 177 if (num <= 0) {
embeddedartists 0:dfad71908d59 178 log->printf("%sUnable to read file, got %d as result\n", prefix, num);
embeddedartists 0:dfad71908d59 179 } else if (num < 1024) {
embeddedartists 3:4301d34173cf 180 log->printf("%sHave read all %d bytes in the file:\n---\n", prefix, num);
embeddedartists 0:dfad71908d59 181 buff[num] = '\0';
embeddedartists 0:dfad71908d59 182 log->printf((const char*)buff);
embeddedartists 3:4301d34173cf 183 log->printf("\n---\n");
embeddedartists 0:dfad71908d59 184 } else {
embeddedartists 0:dfad71908d59 185 log->printf("%sHave read %d bytes with more to read\n", prefix, num);
embeddedartists 0:dfad71908d59 186 }
embeddedartists 0:dfad71908d59 187 free(buff);
embeddedartists 0:dfad71908d59 188 }
embeddedartists 0:dfad71908d59 189 fclose(fp);
embeddedartists 0:dfad71908d59 190 } else {
embeddedartists 0:dfad71908d59 191 log->printf("%sFILE == NULL\r\n", prefix);
embeddedartists 0:dfad71908d59 192 }
embeddedartists 0:dfad71908d59 193 }
embeddedartists 0:dfad71908d59 194
embeddedartists 0:dfad71908d59 195
embeddedartists 0:dfad71908d59 196 #if defined(DM_BOARD_USE_DISPLAY)
embeddedartists 0:dfad71908d59 197 #define DISPLAY_TASK_PREFIX "[LCD] "
embeddedartists 0:dfad71908d59 198 void displayTask(void const* args)
embeddedartists 0:dfad71908d59 199 {
embeddedartists 0:dfad71908d59 200 // Start display in default mode (16-bit)
embeddedartists 0:dfad71908d59 201 RtosLog* log = DMBoard::instance().logger();
embeddedartists 0:dfad71908d59 202 Display* disp = DMBoard::instance().display();
embeddedartists 0:dfad71908d59 203 Display::DisplayError disperr;
embeddedartists 0:dfad71908d59 204 uint16_t* fb = (uint16_t*)disp->allocateFramebuffer();
embeddedartists 0:dfad71908d59 205 if (fb == NULL) {
embeddedartists 0:dfad71908d59 206 log->printf(DISPLAY_TASK_PREFIX"Failed to allocate memory for framebuffer\r\n");
embeddedartists 0:dfad71908d59 207 mbed_die();
embeddedartists 0:dfad71908d59 208 }
embeddedartists 0:dfad71908d59 209 drawBars565(fb, disp->width(), disp->height());
embeddedartists 0:dfad71908d59 210 disperr = disp->powerUp(fb);
embeddedartists 0:dfad71908d59 211 if (disperr != Display::Ok) {
embeddedartists 0:dfad71908d59 212 log->printf(DISPLAY_TASK_PREFIX"Failed to initialize the display, got error %d\r\n", disperr);
embeddedartists 0:dfad71908d59 213 mbed_die();
embeddedartists 0:dfad71908d59 214 }
embeddedartists 0:dfad71908d59 215
embeddedartists 0:dfad71908d59 216 int h = disp->height();
embeddedartists 0:dfad71908d59 217 int w = disp->width();
embeddedartists 0:dfad71908d59 218 uint16_t COLORS[] = { 0xFFF0, 0xF800, 0x07E0, 0x001F, 0x07FF, 0xF81F };
embeddedartists 0:dfad71908d59 219 int i = 0;
embeddedartists 0:dfad71908d59 220 while(true) {
embeddedartists 0:dfad71908d59 221 uint16_t color = COLORS[i++ % (sizeof(COLORS)/sizeof(COLORS[0]))];
embeddedartists 0:dfad71908d59 222 for (int y = 0; y < h; y++) {
embeddedartists 0:dfad71908d59 223 for (int x = 0; x < w; x++) {
embeddedartists 0:dfad71908d59 224 fb[y*w+x] = color;
embeddedartists 0:dfad71908d59 225 }
embeddedartists 0:dfad71908d59 226 Thread::wait(30);
embeddedartists 0:dfad71908d59 227 }
embeddedartists 0:dfad71908d59 228
embeddedartists 0:dfad71908d59 229 // test to read the message file
embeddedartists 0:dfad71908d59 230 //readMessageFile(DISPLAY_TASK_PREFIX);
embeddedartists 0:dfad71908d59 231 }
embeddedartists 0:dfad71908d59 232 }
embeddedartists 2:070e9c054796 233
embeddedartists 2:070e9c054796 234 #define SWIM_TASK_PREFIX "[SWIM] "
embeddedartists 2:070e9c054796 235 void swimTask(void const* args)
embeddedartists 2:070e9c054796 236 {
embeddedartists 2:070e9c054796 237 RtosLog* log = DMBoard::instance().logger();
embeddedartists 2:070e9c054796 238
embeddedartists 2:070e9c054796 239 log->printf(SWIM_TASK_PREFIX"swimTask started\n");
embeddedartists 2:070e9c054796 240
embeddedartists 2:070e9c054796 241 AppLauncher launcher;
embeddedartists 2:070e9c054796 242 if (launcher.setup()) {
embeddedartists 2:070e9c054796 243 log->printf(SWIM_TASK_PREFIX"Starting menu system\n");
embeddedartists 2:070e9c054796 244 launcher.runToCompletion();
embeddedartists 2:070e9c054796 245 launcher.teardown();
embeddedartists 2:070e9c054796 246 } else {
embeddedartists 2:070e9c054796 247 log->printf(SWIM_TASK_PREFIX"Failed to prepare meny system\n");
embeddedartists 2:070e9c054796 248 }
embeddedartists 2:070e9c054796 249
embeddedartists 2:070e9c054796 250 // Should never end up here
embeddedartists 2:070e9c054796 251 mbed_die();
embeddedartists 2:070e9c054796 252 }
embeddedartists 2:070e9c054796 253
embeddedartists 0:dfad71908d59 254 #endif //DM_BOARD_USE_DISPLAY
embeddedartists 0:dfad71908d59 255
embeddedartists 0:dfad71908d59 256 #define MSD_TASK_PREFIX "[MSD] "
embeddedartists 0:dfad71908d59 257
embeddedartists 0:dfad71908d59 258 void msdTask(void const* args)
embeddedartists 1:15ea03d72dd7 259 {
embeddedartists 1:15ea03d72dd7 260 usbInitGuard.lock();
embeddedartists 1:15ea03d72dd7 261 USBHostMSD* msd = new USBHostMSD("usb");
embeddedartists 1:15ea03d72dd7 262 usbInitGuard.unlock();
embeddedartists 0:dfad71908d59 263 USBHost* host = USBHost::getHostInst();
embeddedartists 0:dfad71908d59 264 RtosLog* log = DMBoard::instance().logger();
embeddedartists 0:dfad71908d59 265
embeddedartists 0:dfad71908d59 266 log->printf(MSD_TASK_PREFIX"msdTask started\n");
embeddedartists 0:dfad71908d59 267
embeddedartists 0:dfad71908d59 268 while(1) {
embeddedartists 0:dfad71908d59 269
embeddedartists 0:dfad71908d59 270 log->printf(MSD_TASK_PREFIX"Attempting to connect...\n");
embeddedartists 0:dfad71908d59 271
embeddedartists 0:dfad71908d59 272 // try to connect a MSD device
embeddedartists 1:15ea03d72dd7 273 bool connected = false;
embeddedartists 1:15ea03d72dd7 274 do {
embeddedartists 1:15ea03d72dd7 275 usbInitGuard.lock();
embeddedartists 1:15ea03d72dd7 276 connected = msd->connect();
embeddedartists 1:15ea03d72dd7 277 usbInitGuard.unlock();
embeddedartists 1:15ea03d72dd7 278 if (!connected) {
embeddedartists 1:15ea03d72dd7 279 //log->printf(MSD_TASK_PREFIX"Failed to connect, waiting and trying again!\n");
embeddedartists 1:15ea03d72dd7 280 Thread::wait(500);
embeddedartists 3:4301d34173cf 281 //DMBoard::instance().buzzer(440, 100);
embeddedartists 0:dfad71908d59 282 }
embeddedartists 1:15ea03d72dd7 283 } while(!connected);
embeddedartists 0:dfad71908d59 284
embeddedartists 0:dfad71908d59 285 log->printf(MSD_TASK_PREFIX"Connected!\n");
embeddedartists 0:dfad71908d59 286
embeddedartists 0:dfad71908d59 287 // read a file
embeddedartists 0:dfad71908d59 288 readMessageFile(MSD_TASK_PREFIX);
embeddedartists 0:dfad71908d59 289
embeddedartists 0:dfad71908d59 290 // if/when the device is disconnected, we try to connect it again
embeddedartists 0:dfad71908d59 291 while(1) {
embeddedartists 0:dfad71908d59 292
embeddedartists 0:dfad71908d59 293 Thread::wait(500);
embeddedartists 0:dfad71908d59 294
embeddedartists 0:dfad71908d59 295 // if device disconnected, try to connect again
embeddedartists 1:15ea03d72dd7 296 if (!msd->connected())
embeddedartists 0:dfad71908d59 297 break;
embeddedartists 0:dfad71908d59 298 }
embeddedartists 0:dfad71908d59 299 log->printf(MSD_TASK_PREFIX"Disconnected\n");
embeddedartists 0:dfad71908d59 300 }
embeddedartists 0:dfad71908d59 301 }
embeddedartists 0:dfad71908d59 302
embeddedartists 0:dfad71908d59 303 #define NET_TASK_PREFIX "[NET] "
embeddedartists 0:dfad71908d59 304
embeddedartists 0:dfad71908d59 305 void netTask(void const* args)
embeddedartists 0:dfad71908d59 306 {
embeddedartists 0:dfad71908d59 307 RtosLog* log = DMBoard::instance().logger();
embeddedartists 0:dfad71908d59 308 log->printf(NET_TASK_PREFIX"EthernetInterface Setting up...\r\n");
embeddedartists 0:dfad71908d59 309 if(eth.init()!=0) { //for DHCP Server
embeddedartists 0:dfad71908d59 310 //if(eth.init(IPAddress,NetMasks,Gateway)!=0) { //for Static IP Address
embeddedartists 0:dfad71908d59 311 log->printf(NET_TASK_PREFIX"EthernetInterface Initialize Error \r\n");
embeddedartists 0:dfad71908d59 312 mbed_die();
embeddedartists 0:dfad71908d59 313 }
embeddedartists 2:070e9c054796 314 while (eth.connect() != 0) {
embeddedartists 2:070e9c054796 315 Thread::wait(1000);
embeddedartists 0:dfad71908d59 316 }
embeddedartists 0:dfad71908d59 317
embeddedartists 2:070e9c054796 318 ethInitialized = true;
embeddedartists 2:070e9c054796 319 ethUsingDHCP = true;
embeddedartists 2:070e9c054796 320
embeddedartists 0:dfad71908d59 321 log->printf(NET_TASK_PREFIX"IP Address is %s\r\n", eth.getIPAddress());
embeddedartists 0:dfad71908d59 322 log->printf(NET_TASK_PREFIX"NetMask is %s\r\n", eth.getNetworkMask());
embeddedartists 0:dfad71908d59 323 log->printf(NET_TASK_PREFIX"Gateway Address is %s\r\n", eth.getGateway());
embeddedartists 0:dfad71908d59 324 log->printf(NET_TASK_PREFIX"Ethernet Setup OK\r\n");
embeddedartists 0:dfad71908d59 325
embeddedartists 0:dfad71908d59 326 HTTPServerAddHandler<SimpleHandler>("/hello"); //Default handler
embeddedartists 0:dfad71908d59 327 FSHandler::mount("/usb", "/");
embeddedartists 0:dfad71908d59 328 HTTPServerAddHandler<FSHandler>("/");
embeddedartists 0:dfad71908d59 329 //HTTPServerAddHandler<RPCHandler>("/rpc");
embeddedartists 0:dfad71908d59 330 //lcd.locate(0,0);
embeddedartists 0:dfad71908d59 331 //lcd.printf("%s",eth.getIPAddress());
embeddedartists 0:dfad71908d59 332 HTTPServerStart(80);
embeddedartists 0:dfad71908d59 333 }
embeddedartists 0:dfad71908d59 334
embeddedartists 1:15ea03d72dd7 335 static uint8_t mouse_button, mouse_x, mouse_y, mouse_z;
embeddedartists 1:15ea03d72dd7 336 void mouseEvent(uint8_t buttons, int8_t x, int8_t y, int8_t z)
embeddedartists 1:15ea03d72dd7 337 {
embeddedartists 1:15ea03d72dd7 338 mouse_button = buttons;
embeddedartists 1:15ea03d72dd7 339 mouse_x = x;
embeddedartists 1:15ea03d72dd7 340 mouse_y = y;
embeddedartists 1:15ea03d72dd7 341 mouse_z = z;
embeddedartists 1:15ea03d72dd7 342 }
embeddedartists 1:15ea03d72dd7 343
embeddedartists 1:15ea03d72dd7 344 #define MOUSE_TASK_PREFIX "[MOUSE] "
embeddedartists 1:15ea03d72dd7 345
embeddedartists 1:15ea03d72dd7 346 void mouseTask(void const* args)
embeddedartists 1:15ea03d72dd7 347 {
embeddedartists 1:15ea03d72dd7 348 usbInitGuard.lock();
embeddedartists 1:15ea03d72dd7 349 USBHostMouse* mouse = new USBHostMouse();
embeddedartists 1:15ea03d72dd7 350 usbInitGuard.unlock();
embeddedartists 1:15ea03d72dd7 351 RtosLog* log = DMBoard::instance().logger();
embeddedartists 1:15ea03d72dd7 352
embeddedartists 1:15ea03d72dd7 353 log->printf(MOUSE_TASK_PREFIX"mouseTask started\n");
embeddedartists 1:15ea03d72dd7 354
embeddedartists 1:15ea03d72dd7 355 while(1) {
embeddedartists 1:15ea03d72dd7 356
embeddedartists 1:15ea03d72dd7 357 log->printf(MOUSE_TASK_PREFIX"Attempting to connect...\n");
embeddedartists 1:15ea03d72dd7 358
embeddedartists 1:15ea03d72dd7 359 // try to connect a mouse
embeddedartists 1:15ea03d72dd7 360 bool connected = false;
embeddedartists 1:15ea03d72dd7 361 do {
embeddedartists 1:15ea03d72dd7 362 usbInitGuard.lock();
embeddedartists 1:15ea03d72dd7 363 connected = mouse->connect();
embeddedartists 1:15ea03d72dd7 364 usbInitGuard.unlock();
embeddedartists 1:15ea03d72dd7 365 if (!connected) {
embeddedartists 1:15ea03d72dd7 366 //log->printf(MOUSE_TASK_PREFIX"Failed to connect, waiting and trying again!\n");
embeddedartists 1:15ea03d72dd7 367 Thread::wait(500);
embeddedartists 1:15ea03d72dd7 368 }
embeddedartists 1:15ea03d72dd7 369 } while(!connected);
embeddedartists 1:15ea03d72dd7 370
embeddedartists 1:15ea03d72dd7 371 log->printf(MOUSE_TASK_PREFIX"Connected!\n");
embeddedartists 1:15ea03d72dd7 372 mouse->attachEvent(mouseEvent);
embeddedartists 1:15ea03d72dd7 373
embeddedartists 1:15ea03d72dd7 374 while(mouse->connected()) {
embeddedartists 1:15ea03d72dd7 375 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 376 Thread::wait(500);
embeddedartists 1:15ea03d72dd7 377 }
embeddedartists 1:15ea03d72dd7 378
embeddedartists 1:15ea03d72dd7 379 log->printf(MOUSE_TASK_PREFIX"Disconnected\n");
embeddedartists 1:15ea03d72dd7 380 }
embeddedartists 1:15ea03d72dd7 381 }
embeddedartists 1:15ea03d72dd7 382
embeddedartists 1:15ea03d72dd7 383 #define CIRCBUFF_SIZE 256
embeddedartists 1:15ea03d72dd7 384 static uint8_t circbuff[CIRCBUFF_SIZE];
embeddedartists 1:15ea03d72dd7 385 static uint32_t circbuff_read = 0;
embeddedartists 1:15ea03d72dd7 386 static uint32_t circbuff_write = 0;
embeddedartists 1:15ea03d72dd7 387 void keyEvent(uint8_t key)
embeddedartists 1:15ea03d72dd7 388 {
embeddedartists 1:15ea03d72dd7 389 circbuff[circbuff_write%CIRCBUFF_SIZE] = key;
embeddedartists 1:15ea03d72dd7 390 circbuff_write++;
embeddedartists 1:15ea03d72dd7 391 }
embeddedartists 1:15ea03d72dd7 392
embeddedartists 1:15ea03d72dd7 393 #define KEY_TASK_PREFIX "[KEY] "
embeddedartists 1:15ea03d72dd7 394
embeddedartists 1:15ea03d72dd7 395 void keyTask(void const* args)
embeddedartists 1:15ea03d72dd7 396 {
embeddedartists 1:15ea03d72dd7 397 usbInitGuard.lock();
embeddedartists 1:15ea03d72dd7 398 USBHostKeyboard* keyboard = new USBHostKeyboard();
embeddedartists 1:15ea03d72dd7 399 usbInitGuard.unlock();
embeddedartists 1:15ea03d72dd7 400
embeddedartists 1:15ea03d72dd7 401 RtosLog* log = DMBoard::instance().logger();
embeddedartists 1:15ea03d72dd7 402 uint8_t buff[10+1] = {0};
embeddedartists 1:15ea03d72dd7 403 int pos;
embeddedartists 1:15ea03d72dd7 404
embeddedartists 1:15ea03d72dd7 405 log->printf(KEY_TASK_PREFIX"keyTask started\n");
embeddedartists 1:15ea03d72dd7 406
embeddedartists 1:15ea03d72dd7 407 while(1) {
embeddedartists 1:15ea03d72dd7 408
embeddedartists 1:15ea03d72dd7 409 log->printf(KEY_TASK_PREFIX"Attempting to connect...\n");
embeddedartists 1:15ea03d72dd7 410
embeddedartists 1:15ea03d72dd7 411 // try to connect a keyboard
embeddedartists 1:15ea03d72dd7 412 bool connected = false;
embeddedartists 1:15ea03d72dd7 413 do {
embeddedartists 1:15ea03d72dd7 414 usbInitGuard.lock();
embeddedartists 1:15ea03d72dd7 415 connected = keyboard->connect();
embeddedartists 1:15ea03d72dd7 416 usbInitGuard.unlock();
embeddedartists 1:15ea03d72dd7 417 if (!connected) {
embeddedartists 1:15ea03d72dd7 418 //log->printf(KEY_TASK_PREFIX"Failed to connect, waiting and trying again!\n");
embeddedartists 1:15ea03d72dd7 419 Thread::wait(1000);
embeddedartists 1:15ea03d72dd7 420 }
embeddedartists 1:15ea03d72dd7 421 } while(!connected);
embeddedartists 1:15ea03d72dd7 422
embeddedartists 1:15ea03d72dd7 423 log->printf(KEY_TASK_PREFIX"Connected!\n");
embeddedartists 1:15ea03d72dd7 424 keyboard->attach(keyEvent);
embeddedartists 1:15ea03d72dd7 425
embeddedartists 1:15ea03d72dd7 426 while(keyboard->connected()) {
embeddedartists 1:15ea03d72dd7 427 for (pos = 0; pos < 10; pos++) {
embeddedartists 1:15ea03d72dd7 428 if (circbuff_read < circbuff_write) {
embeddedartists 1:15ea03d72dd7 429 buff[pos++] = circbuff[circbuff_read%CIRCBUFF_SIZE];
embeddedartists 1:15ea03d72dd7 430 circbuff_read++;
embeddedartists 1:15ea03d72dd7 431 } else {
embeddedartists 1:15ea03d72dd7 432 break;
embeddedartists 1:15ea03d72dd7 433 }
embeddedartists 1:15ea03d72dd7 434 }
embeddedartists 1:15ea03d72dd7 435 if (pos > 0) {
embeddedartists 1:15ea03d72dd7 436 log->printf(KEY_TASK_PREFIX"%s\n", buff);
embeddedartists 1:15ea03d72dd7 437 }
embeddedartists 1:15ea03d72dd7 438 Thread::wait(20);
embeddedartists 1:15ea03d72dd7 439 }
embeddedartists 1:15ea03d72dd7 440
embeddedartists 1:15ea03d72dd7 441 log->printf(KEY_TASK_PREFIX"Disconnected\n");
embeddedartists 1:15ea03d72dd7 442 }
embeddedartists 1:15ea03d72dd7 443 }
embeddedartists 1:15ea03d72dd7 444
embeddedartists 0:dfad71908d59 445 /******************************************************************************
embeddedartists 0:dfad71908d59 446 * Main function
embeddedartists 0:dfad71908d59 447 *****************************************************************************/
embeddedartists 0:dfad71908d59 448 int main()
embeddedartists 0:dfad71908d59 449 {
embeddedartists 0:dfad71908d59 450 DMBoard::BoardError err;
embeddedartists 0:dfad71908d59 451 DMBoard* board = &DMBoard::instance();
embeddedartists 0:dfad71908d59 452 RtosLog* log = board->logger();
embeddedartists 0:dfad71908d59 453 err = board->init();
embeddedartists 0:dfad71908d59 454 if (err != DMBoard::Ok) {
embeddedartists 0:dfad71908d59 455 log->printf("Failed to initialize the board, got error %d\r\n", err);
embeddedartists 0:dfad71908d59 456 mbed_die();
embeddedartists 0:dfad71908d59 457 }
embeddedartists 0:dfad71908d59 458
embeddedartists 0:dfad71908d59 459 log->printf("\n\n---\nMulti-threaded demo\nBuilt: " __DATE__ " at " __TIME__ "\n\n");
embeddedartists 0:dfad71908d59 460
embeddedartists 1:15ea03d72dd7 461 //log->printf("Press button to start...\r\n");
embeddedartists 1:15ea03d72dd7 462 //while(!board->buttonPressed());
embeddedartists 1:15ea03d72dd7 463 //while(board->buttonPressed());
embeddedartists 0:dfad71908d59 464
embeddedartists 0:dfad71908d59 465 Thread tAlive(aliveTask);
embeddedartists 0:dfad71908d59 466 #if defined(DM_BOARD_USE_DISPLAY)
embeddedartists 2:070e9c054796 467 //Thread tDisplay(displayTask, NULL, osPriorityNormal, 8192);
embeddedartists 2:070e9c054796 468 Thread tSwim(swimTask, NULL, osPriorityNormal, 8192);
embeddedartists 0:dfad71908d59 469 #endif
embeddedartists 0:dfad71908d59 470 Thread tMemstick(msdTask, NULL, osPriorityNormal, 8192);
embeddedartists 0:dfad71908d59 471 Thread tNetwork(netTask, NULL, osPriorityNormal, 8192);
embeddedartists 1:15ea03d72dd7 472 Thread tMouse(mouseTask);
embeddedartists 1:15ea03d72dd7 473 Thread tKeyboard(keyTask);
embeddedartists 0:dfad71908d59 474
embeddedartists 0:dfad71908d59 475 while(1) { wait(5); }
embeddedartists 0:dfad71908d59 476 }