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:
alindvall
Date:
Tue Apr 28 12:21:14 2015 +0000
Revision:
4:a7cbb22e4348
Parent:
0:b94e330c98ac
Child:
5:6ca8470ba8f8
Updated to latest version of the DMSupport and DMBasicGUI libraries

Who changed what in which revision?

UserRevisionLine numberNew contents of line
alindvall 0:b94e330c98ac 1 /*
alindvall 0:b94e330c98ac 2 * Copyright 2014 Embedded Artists AB
alindvall 0:b94e330c98ac 3 *
alindvall 0:b94e330c98ac 4 * Licensed under the Apache License, Version 2.0 (the "License");
alindvall 0:b94e330c98ac 5 * you may not use this file except in compliance with the License.
alindvall 0:b94e330c98ac 6 * You may obtain a copy of the License at
alindvall 0:b94e330c98ac 7 *
alindvall 0:b94e330c98ac 8 * http://www.apache.org/licenses/LICENSE-2.0
alindvall 0:b94e330c98ac 9 *
alindvall 0:b94e330c98ac 10 * Unless required by applicable law or agreed to in writing, software
alindvall 0:b94e330c98ac 11 * distributed under the License is distributed on an "AS IS" BASIS,
alindvall 0:b94e330c98ac 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
alindvall 0:b94e330c98ac 13 * See the License for the specific language governing permissions and
alindvall 0:b94e330c98ac 14 * limitations under the License.
alindvall 0:b94e330c98ac 15 */
alindvall 0:b94e330c98ac 16
alindvall 0:b94e330c98ac 17
alindvall 0:b94e330c98ac 18 #include "mbed.h"
alindvall 0:b94e330c98ac 19 #include "EthernetInterface.h"
alindvall 0:b94e330c98ac 20 #include "AppDraw.h"
alindvall 0:b94e330c98ac 21 #include "lpc_swim_font.h"
alindvall 0:b94e330c98ac 22 #include "lpc_colors.h"
alindvall 0:b94e330c98ac 23
alindvall 0:b94e330c98ac 24 /******************************************************************************
alindvall 0:b94e330c98ac 25 * Defines and typedefs
alindvall 0:b94e330c98ac 26 *****************************************************************************/
alindvall 0:b94e330c98ac 27
alindvall 0:b94e330c98ac 28 #define BTN_OFF 20
alindvall 0:b94e330c98ac 29
alindvall 0:b94e330c98ac 30 /******************************************************************************
alindvall 0:b94e330c98ac 31 * Local variables
alindvall 0:b94e330c98ac 32 *****************************************************************************/
alindvall 0:b94e330c98ac 33
alindvall 0:b94e330c98ac 34 static const COLOR_T COLORS[] = {
alindvall 0:b94e330c98ac 35 RED,
alindvall 0:b94e330c98ac 36 GREEN,
alindvall 0:b94e330c98ac 37 BLUE,
alindvall 0:b94e330c98ac 38 CYAN,
alindvall 0:b94e330c98ac 39 MAGENTA,
alindvall 0:b94e330c98ac 40 YELLOW,
alindvall 0:b94e330c98ac 41 BLACK,
alindvall 0:b94e330c98ac 42 };
alindvall 0:b94e330c98ac 43
alindvall 0:b94e330c98ac 44 /******************************************************************************
alindvall 0:b94e330c98ac 45 * Private functions
alindvall 0:b94e330c98ac 46 *****************************************************************************/
alindvall 0:b94e330c98ac 47
alindvall 0:b94e330c98ac 48 static void buttonClicked(uint32_t x)
alindvall 0:b94e330c98ac 49 {
alindvall 0:b94e330c98ac 50 bool* done = (bool*)x;
alindvall 0:b94e330c98ac 51 *done = true;
alindvall 0:b94e330c98ac 52 }
alindvall 0:b94e330c98ac 53
alindvall 0:b94e330c98ac 54 void AppDraw::draw()
alindvall 0:b94e330c98ac 55 {
alindvall 0:b94e330c98ac 56 // Prepare fullscreen
alindvall 0:b94e330c98ac 57 swim_window_open(_win,
alindvall 0:b94e330c98ac 58 _disp->width(), _disp->height(), // full size
alindvall 0:b94e330c98ac 59 (COLOR_T*)_fb,
alindvall 0:b94e330c98ac 60 0,0,_disp->width()-1, _disp->height()-1, // window position and size
alindvall 0:b94e330c98ac 61 0, // border
alindvall 0:b94e330c98ac 62 WHITE, WHITE, BLACK); // colors: pen, backgr, forgr
alindvall 0:b94e330c98ac 63
alindvall 0:b94e330c98ac 64 _btn = new ImageButton(_win->fb, _win->xpmax - BTN_OFF - _resOk->width(), _win->ypmax - BTN_OFF - _resOk->height(), _resOk->width(), _resOk->height());
alindvall 0:b94e330c98ac 65 _btn->loadImages(_resOk);
alindvall 0:b94e330c98ac 66 _btn->draw();
alindvall 0:b94e330c98ac 67 }
alindvall 0:b94e330c98ac 68
alindvall 0:b94e330c98ac 69 /******************************************************************************
alindvall 0:b94e330c98ac 70 * Public functions
alindvall 0:b94e330c98ac 71 *****************************************************************************/
alindvall 0:b94e330c98ac 72
alindvall 0:b94e330c98ac 73 AppDraw::AppDraw() : _disp(NULL), _win(NULL), _fb(NULL), _btn(NULL), _resOk(NULL)
alindvall 0:b94e330c98ac 74 {
alindvall 0:b94e330c98ac 75 }
alindvall 0:b94e330c98ac 76
alindvall 0:b94e330c98ac 77 AppDraw::~AppDraw()
alindvall 0:b94e330c98ac 78 {
alindvall 0:b94e330c98ac 79 teardown();
alindvall 0:b94e330c98ac 80 }
alindvall 0:b94e330c98ac 81
alindvall 0:b94e330c98ac 82 bool AppDraw::setup()
alindvall 0:b94e330c98ac 83 {
alindvall 0:b94e330c98ac 84 _disp = DMBoard::instance().display();
alindvall 0:b94e330c98ac 85 _win = (SWIM_WINDOW_T*)malloc(sizeof(SWIM_WINDOW_T));
alindvall 0:b94e330c98ac 86 _fb = _disp->allocateFramebuffer();
alindvall 0:b94e330c98ac 87
alindvall 0:b94e330c98ac 88 return (_win != NULL && _fb != NULL);
alindvall 0:b94e330c98ac 89 }
alindvall 0:b94e330c98ac 90
alindvall 0:b94e330c98ac 91 void AppDraw::runToCompletion()
alindvall 0:b94e330c98ac 92 {
alindvall 0:b94e330c98ac 93 // Alternative 1: use the calling thread's context to run in
alindvall 0:b94e330c98ac 94 bool done = false;
alindvall 0:b94e330c98ac 95 draw();
alindvall 0:b94e330c98ac 96 _btn->setAction(buttonClicked, (uint32_t)&done);
alindvall 0:b94e330c98ac 97 void* oldFB = _disp->swapFramebuffer(_fb);
alindvall 0:b94e330c98ac 98
alindvall 0:b94e330c98ac 99 // Wait for touches
alindvall 0:b94e330c98ac 100 TouchPanel* touch = DMBoard::instance().touchPanel();
alindvall 0:b94e330c98ac 101 bool ignore;
alindvall 0:b94e330c98ac 102 int fingers = 0;
alindvall 0:b94e330c98ac 103 touch->info(&ignore, &fingers, &ignore);
alindvall 0:b94e330c98ac 104 if (fingers > MaxSupportedFingers) {
alindvall 0:b94e330c98ac 105 fingers = MaxSupportedFingers;
alindvall 0:b94e330c98ac 106 }
alindvall 0:b94e330c98ac 107 while(!done) {
alindvall 0:b94e330c98ac 108 // wait for a new touch signal (signal is sent from AppLauncher,
alindvall 0:b94e330c98ac 109 // which listens for touch events)
alindvall 0:b94e330c98ac 110 Thread::signal_wait(0x1);
alindvall 0:b94e330c98ac 111 if (touch->read(_coords, fingers) == TouchPanel::TouchError_Ok) {
alindvall 0:b94e330c98ac 112 for (int i = 0; i < fingers; i++) {
alindvall 0:b94e330c98ac 113 if (_coords[i].z > 0) {
alindvall 0:b94e330c98ac 114 _win->pen = COLORS[i];
alindvall 0:b94e330c98ac 115 swim_put_circle(_win, _coords[i].x, _coords[i].y, 2, 1);
alindvall 0:b94e330c98ac 116 }
alindvall 0:b94e330c98ac 117 }
alindvall 0:b94e330c98ac 118 if (_btn->handle(_coords[0].x, _coords[0].y, _coords[0].z > 0)) {
alindvall 0:b94e330c98ac 119 _btn->draw();
alindvall 0:b94e330c98ac 120 }
alindvall 0:b94e330c98ac 121 }
alindvall 0:b94e330c98ac 122 }
alindvall 0:b94e330c98ac 123
alindvall 0:b94e330c98ac 124 // User has clicked the button, restore the original FB
alindvall 0:b94e330c98ac 125 _disp->swapFramebuffer(oldFB);
alindvall 0:b94e330c98ac 126 swim_window_close(_win);
alindvall 0:b94e330c98ac 127 }
alindvall 0:b94e330c98ac 128
alindvall 0:b94e330c98ac 129 bool AppDraw::teardown()
alindvall 0:b94e330c98ac 130 {
alindvall 0:b94e330c98ac 131 if (_win != NULL) {
alindvall 0:b94e330c98ac 132 free(_win);
alindvall 0:b94e330c98ac 133 _win = NULL;
alindvall 0:b94e330c98ac 134 }
alindvall 0:b94e330c98ac 135 if (_fb != NULL) {
alindvall 0:b94e330c98ac 136 free(_fb);
alindvall 0:b94e330c98ac 137 _fb = NULL;
alindvall 0:b94e330c98ac 138 }
alindvall 0:b94e330c98ac 139 if (_btn != NULL) {
alindvall 0:b94e330c98ac 140 delete _btn;
alindvall 0:b94e330c98ac 141 _btn = NULL;
alindvall 0:b94e330c98ac 142 }
alindvall 0:b94e330c98ac 143 return true;
alindvall 0:b94e330c98ac 144 }
alindvall 0:b94e330c98ac 145
alindvall 0:b94e330c98ac 146
alindvall 0:b94e330c98ac 147 void AppDraw::addResource(Resources id, Resource* res)
alindvall 0:b94e330c98ac 148 {
alindvall 0:b94e330c98ac 149 _resOk = res;
alindvall 0:b94e330c98ac 150 }
alindvall 0:b94e330c98ac 151