test export

Dependencies:   DmTftLibrary mbed

Fork of dm_calc by Display Module

Committer:
displaymodule
Date:
Mon Sep 01 10:40:40 2014 +0000
Revision:
3:45df69ebc420
Parent:
2:b17b19212e5a
Removed dependency on mbed-src for LPC1549

Who changed what in which revision?

UserRevisionLine numberNew contents of line
displaymodule 0:3713b01e72fe 1 /**********************************************************************************************
displaymodule 0:3713b01e72fe 2 Copyright (c) 2014 DisplayModule. All rights reserved.
displaymodule 0:3713b01e72fe 3
displaymodule 0:3713b01e72fe 4 Redistribution and use of this source code, part of this source code or any compiled binary
displaymodule 0:3713b01e72fe 5 based on this source code is permitted as long as the above copyright notice and following
displaymodule 0:3713b01e72fe 6 disclaimer is retained.
displaymodule 0:3713b01e72fe 7
displaymodule 0:3713b01e72fe 8 DISCLAIMER:
displaymodule 0:3713b01e72fe 9 THIS SOFTWARE IS SUPPLIED "AS IS" WITHOUT ANY WARRANTIES AND SUPPORT. DISPLAYMODULE ASSUMES
displaymodule 0:3713b01e72fe 10 NO RESPONSIBILITY OR LIABILITY FOR THE USE OF THE SOFTWARE.
displaymodule 0:3713b01e72fe 11 ********************************************************************************************/
displaymodule 0:3713b01e72fe 12
displaymodule 0:3713b01e72fe 13 /******************************************************************************
displaymodule 0:3713b01e72fe 14 * Includes
displaymodule 0:3713b01e72fe 15 *****************************************************************************/
displaymodule 0:3713b01e72fe 16
displaymodule 0:3713b01e72fe 17 #include "mbed.h"
displaymodule 0:3713b01e72fe 18
displaymodule 0:3713b01e72fe 19 #include "DmTftHX8353C.h"
displaymodule 0:3713b01e72fe 20 #include "DmTftS6D0164.h"
displaymodule 0:3713b01e72fe 21 #include "DmTftIli9325.h"
displaymodule 0:3713b01e72fe 22 #include "DmTftIli9341.h"
displaymodule 0:3713b01e72fe 23 #include "DmTftSsd2119.h"
displaymodule 0:3713b01e72fe 24 #include "DmTouch.h"
displaymodule 0:3713b01e72fe 25
displaymodule 0:3713b01e72fe 26 #include "Button.h"
displaymodule 0:3713b01e72fe 27
displaymodule 0:3713b01e72fe 28 /******************************************************************************
displaymodule 0:3713b01e72fe 29 * Typedefs and defines
displaymodule 0:3713b01e72fe 30 *****************************************************************************/
displaymodule 0:3713b01e72fe 31
displaymodule 0:3713b01e72fe 32 typedef enum {
displaymodule 0:3713b01e72fe 33 MODE_WANT_ARG1,
displaymodule 0:3713b01e72fe 34 MODE_WANT_ARG1_OR_OP,
displaymodule 0:3713b01e72fe 35 MODE_WANT_ARG2,
displaymodule 0:3713b01e72fe 36 MODE_WANT_ARG2_OR_OP,
displaymodule 0:3713b01e72fe 37 } calc_mode_t;
displaymodule 0:3713b01e72fe 38
displaymodule 0:3713b01e72fe 39 #define MARGIN 5
displaymodule 0:3713b01e72fe 40
displaymodule 0:3713b01e72fe 41 #define RESULT_MARGIN_X (MARGIN*3)
displaymodule 0:3713b01e72fe 42 #define RESULT_MARGIN_Y (MARGIN*3)
displaymodule 0:3713b01e72fe 43
displaymodule 0:3713b01e72fe 44 #define NUM_BUTTONS (sizeof(captions)/sizeof(captions[0]))
displaymodule 0:3713b01e72fe 45
displaymodule 1:9a3ae682a75e 46 #if 1
displaymodule 1:9a3ae682a75e 47 /* Displays without adapter */
displaymodule 1:9a3ae682a75e 48 #define DM_PIN_SPI_MOSI D11
displaymodule 1:9a3ae682a75e 49 #define DM_PIN_SPI_MISO D12
displaymodule 1:9a3ae682a75e 50 #define DM_PIN_SPI_SCLK D13
displaymodule 1:9a3ae682a75e 51 #define DM_PIN_CS_TOUCH D4
displaymodule 1:9a3ae682a75e 52 #define DM_PIN_CS_TFT D10
displaymodule 1:9a3ae682a75e 53 #define DM_PIN_CS_SDCARD D8
displaymodule 1:9a3ae682a75e 54 #define DM_PIN_CS_FLASH D6
displaymodule 1:9a3ae682a75e 55 #else
displaymodule 1:9a3ae682a75e 56 /* Displays with adapter */
displaymodule 1:9a3ae682a75e 57 #define DM_PIN_SPI_MOSI A0
displaymodule 1:9a3ae682a75e 58 #define DM_PIN_SPI_MISO D9
displaymodule 1:9a3ae682a75e 59 #define DM_PIN_SPI_SCLK A1
displaymodule 1:9a3ae682a75e 60 #define DM_PIN_CS_TOUCH D8
displaymodule 1:9a3ae682a75e 61 #define DM_PIN_CS_TFT A3
displaymodule 1:9a3ae682a75e 62 #define DM_PIN_CS_SDCARD D10
displaymodule 1:9a3ae682a75e 63 #endif
displaymodule 0:3713b01e72fe 64
displaymodule 1:9a3ae682a75e 65 //#define LANDSCAPE
displaymodule 0:3713b01e72fe 66
displaymodule 0:3713b01e72fe 67 /******************************************************************************
displaymodule 0:3713b01e72fe 68 * Local variables
displaymodule 0:3713b01e72fe 69 *****************************************************************************/
displaymodule 0:3713b01e72fe 70
displaymodule 1:9a3ae682a75e 71 //DmTftIli9325 tft; /* DM_TFT28_103 and DM_TFT24_104 */
displaymodule 1:9a3ae682a75e 72 DmTftIli9341 tft; /* DM_TFT28_105 */
displaymodule 0:3713b01e72fe 73 //DmTftSsd2119 tft; /* DM_TFT35_107 */
displaymodule 0:3713b01e72fe 74
displaymodule 1:9a3ae682a75e 75 //DmTouch touch(DmTouch::DM_TFT28_103, DmTouch::Software); /* For LPC4088 QuickStart Board */
displaymodule 0:3713b01e72fe 76 //DmTouch touch(DmTouch::DM_TFT28_103);
displaymodule 1:9a3ae682a75e 77 //DmTouch touch(DmTouch::DM_TFT24_104, DmTouch::Software); /* For LPC4088 QuickStart Board */
displaymodule 1:9a3ae682a75e 78 //DmTouch touch(DmTouch::DM_TFT24_104);
displaymodule 1:9a3ae682a75e 79 DmTouch touch(DmTouch::DM_TFT28_105);
displaymodule 0:3713b01e72fe 80 //DmTouch touch(DmTouch::DM_TFT35_107);
displaymodule 0:3713b01e72fe 81
displaymodule 0:3713b01e72fe 82 DigitalInOut csTouch(DM_PIN_CS_TOUCH, PIN_OUTPUT, PullUp, 1);
displaymodule 0:3713b01e72fe 83 DigitalInOut csDisplay(DM_PIN_CS_TFT, PIN_OUTPUT, PullUp, 1);
displaymodule 0:3713b01e72fe 84 DigitalInOut csSDCard(DM_PIN_CS_SDCARD, PIN_OUTPUT, PullUp, 1);
displaymodule 0:3713b01e72fe 85 #ifdef DM_PIN_CS_FLASH
displaymodule 0:3713b01e72fe 86 DigitalInOut csFlash(DM_PIN_CS_FLASH, PIN_OUTPUT, PullUp, 1);
displaymodule 0:3713b01e72fe 87 #endif
displaymodule 0:3713b01e72fe 88
displaymodule 1:9a3ae682a75e 89 #ifdef LANDSCAPE
displaymodule 1:9a3ae682a75e 90 #define BUTTONS_PER_LINE 6
displaymodule 1:9a3ae682a75e 91 #define BUTTONS_NUM_LINES 3
displaymodule 1:9a3ae682a75e 92 /*
displaymodule 1:9a3ae682a75e 93 * 1 2 3 4 5 +
displaymodule 1:9a3ae682a75e 94 * 6 7 8 9 0 -
displaymodule 1:9a3ae682a75e 95 * * / = clr
displaymodule 1:9a3ae682a75e 96 */
displaymodule 1:9a3ae682a75e 97 const char* captions[] = {
displaymodule 1:9a3ae682a75e 98 "1","2","3","4","5","+",
displaymodule 1:9a3ae682a75e 99 "6","7","8","9","0","-",
displaymodule 1:9a3ae682a75e 100 "*","/","=","clr",
displaymodule 1:9a3ae682a75e 101 };
displaymodule 1:9a3ae682a75e 102 #else
displaymodule 1:9a3ae682a75e 103 #define BUTTONS_PER_LINE 4
displaymodule 1:9a3ae682a75e 104 #define BUTTONS_NUM_LINES 4
displaymodule 1:9a3ae682a75e 105 /*
displaymodule 1:9a3ae682a75e 106 * 1 2 3 +
displaymodule 1:9a3ae682a75e 107 * 4 5 6 -
displaymodule 1:9a3ae682a75e 108 * 7 8 9 *
displaymodule 1:9a3ae682a75e 109 * 0 = clr /
displaymodule 1:9a3ae682a75e 110 */
displaymodule 1:9a3ae682a75e 111 const char* captions[] = {
displaymodule 1:9a3ae682a75e 112 "1","2","3","+",
displaymodule 1:9a3ae682a75e 113 "4","5","6","-",
displaymodule 1:9a3ae682a75e 114 "7","8","9","*",
displaymodule 1:9a3ae682a75e 115 "0","=","clr","/",
displaymodule 1:9a3ae682a75e 116 };
displaymodule 1:9a3ae682a75e 117 #endif
displaymodule 1:9a3ae682a75e 118
displaymodule 0:3713b01e72fe 119 Button* buttons[NUM_BUTTONS];
displaymodule 0:3713b01e72fe 120
displaymodule 0:3713b01e72fe 121 static char buff[25] = {0};
displaymodule 0:3713b01e72fe 122 static bool redrawResult = true;
displaymodule 0:3713b01e72fe 123 static bool clearResult = true;
displaymodule 0:3713b01e72fe 124
displaymodule 0:3713b01e72fe 125 /******************************************************************************
displaymodule 0:3713b01e72fe 126 * Global variables
displaymodule 0:3713b01e72fe 127 *****************************************************************************/
displaymodule 0:3713b01e72fe 128
displaymodule 0:3713b01e72fe 129
displaymodule 0:3713b01e72fe 130 /******************************************************************************
displaymodule 0:3713b01e72fe 131 * Local functions
displaymodule 0:3713b01e72fe 132 *****************************************************************************/
displaymodule 0:3713b01e72fe 133
displaymodule 0:3713b01e72fe 134 void handleClick(uint32_t arg)
displaymodule 0:3713b01e72fe 135 {
displaymodule 0:3713b01e72fe 136 static int val1 = 0;
displaymodule 0:3713b01e72fe 137 static int val2 = 0;
displaymodule 0:3713b01e72fe 138 static int op = 0;
displaymodule 0:3713b01e72fe 139 static calc_mode_t mode = MODE_WANT_ARG1;
displaymodule 0:3713b01e72fe 140 static int strpos = 0;
displaymodule 0:3713b01e72fe 141
displaymodule 0:3713b01e72fe 142 switch (arg)
displaymodule 0:3713b01e72fe 143 {
displaymodule 0:3713b01e72fe 144 case '0':
displaymodule 0:3713b01e72fe 145 case '1':
displaymodule 0:3713b01e72fe 146 case '2':
displaymodule 0:3713b01e72fe 147 case '3':
displaymodule 0:3713b01e72fe 148 case '4':
displaymodule 0:3713b01e72fe 149 case '5':
displaymodule 0:3713b01e72fe 150 case '6':
displaymodule 0:3713b01e72fe 151 case '7':
displaymodule 0:3713b01e72fe 152 case '8':
displaymodule 0:3713b01e72fe 153 case '9':
displaymodule 0:3713b01e72fe 154 if ((mode == MODE_WANT_ARG1) || (mode == MODE_WANT_ARG1_OR_OP)) {
displaymodule 0:3713b01e72fe 155 val1 = val1*10 + (arg - '0');
displaymodule 0:3713b01e72fe 156 mode = MODE_WANT_ARG1_OR_OP;
displaymodule 0:3713b01e72fe 157 buff[strpos++] = arg;
displaymodule 0:3713b01e72fe 158 } else if ((mode == MODE_WANT_ARG2) || (mode == MODE_WANT_ARG2_OR_OP)) {
displaymodule 0:3713b01e72fe 159 val2 = val2*10 + (arg - '0');
displaymodule 0:3713b01e72fe 160 mode = MODE_WANT_ARG2_OR_OP;
displaymodule 0:3713b01e72fe 161 buff[strpos++] = arg;
displaymodule 0:3713b01e72fe 162 }
displaymodule 0:3713b01e72fe 163 break;
displaymodule 0:3713b01e72fe 164 case '+':
displaymodule 0:3713b01e72fe 165 case '-':
displaymodule 0:3713b01e72fe 166 case '*':
displaymodule 0:3713b01e72fe 167 case '/':
displaymodule 0:3713b01e72fe 168 if (mode == MODE_WANT_ARG1_OR_OP) {
displaymodule 0:3713b01e72fe 169 op = arg;
displaymodule 0:3713b01e72fe 170 mode = MODE_WANT_ARG2;
displaymodule 0:3713b01e72fe 171 buff[strpos++] = arg;
displaymodule 0:3713b01e72fe 172 } else if (mode == MODE_WANT_ARG2_OR_OP) {
displaymodule 0:3713b01e72fe 173 // already have "a op b", calculate it and go to "c op"
displaymodule 0:3713b01e72fe 174 switch (op) {
displaymodule 0:3713b01e72fe 175 case '+': val1 = val1 + val2; break;
displaymodule 0:3713b01e72fe 176 case '-': val1 = val1 - val2; break;
displaymodule 0:3713b01e72fe 177 case '*': val1 = val1 * val2; break;
displaymodule 0:3713b01e72fe 178 case '/': val1 = val1 / val2; break;
displaymodule 0:3713b01e72fe 179 }
displaymodule 0:3713b01e72fe 180 op = arg;
displaymodule 0:3713b01e72fe 181 val2 = 0;
displaymodule 0:3713b01e72fe 182 mode = MODE_WANT_ARG2;
displaymodule 0:3713b01e72fe 183 strpos = sprintf(buff, "%d%c", val1, op);
displaymodule 0:3713b01e72fe 184 clearResult = true;
displaymodule 0:3713b01e72fe 185 }
displaymodule 0:3713b01e72fe 186 break;
displaymodule 0:3713b01e72fe 187 case 'c':
displaymodule 0:3713b01e72fe 188 val1 = val2 = op = 0;
displaymodule 0:3713b01e72fe 189 mode = MODE_WANT_ARG1;
displaymodule 0:3713b01e72fe 190 strpos = 0;
displaymodule 0:3713b01e72fe 191 clearResult = true;
displaymodule 0:3713b01e72fe 192 break;
displaymodule 0:3713b01e72fe 193 case '=':
displaymodule 0:3713b01e72fe 194 default:
displaymodule 0:3713b01e72fe 195 if (mode == MODE_WANT_ARG2_OR_OP) {
displaymodule 0:3713b01e72fe 196 // already have "a op b", calculate it and go to "c"
displaymodule 0:3713b01e72fe 197 switch (op) {
displaymodule 0:3713b01e72fe 198 case '+': val1 = val1 + val2; break;
displaymodule 0:3713b01e72fe 199 case '-': val1 = val1 - val2; break;
displaymodule 0:3713b01e72fe 200 case '*': val1 = val1 * val2; break;
displaymodule 0:3713b01e72fe 201 case '/': val1 = val1 / val2; break;
displaymodule 0:3713b01e72fe 202 }
displaymodule 0:3713b01e72fe 203 mode = MODE_WANT_ARG1_OR_OP;
displaymodule 0:3713b01e72fe 204 val2 = 0;
displaymodule 0:3713b01e72fe 205 strpos = sprintf(buff, "%d", val1);
displaymodule 0:3713b01e72fe 206 clearResult = true;
displaymodule 0:3713b01e72fe 207 }
displaymodule 0:3713b01e72fe 208 break;
displaymodule 0:3713b01e72fe 209 }
displaymodule 0:3713b01e72fe 210 buff[strpos] = '\0';
displaymodule 0:3713b01e72fe 211 redrawResult = true;
displaymodule 0:3713b01e72fe 212 }
displaymodule 0:3713b01e72fe 213
displaymodule 0:3713b01e72fe 214 /******************************************************************************
displaymodule 0:3713b01e72fe 215 * Main
displaymodule 0:3713b01e72fe 216 *****************************************************************************/
displaymodule 0:3713b01e72fe 217
displaymodule 0:3713b01e72fe 218 int main() {
displaymodule 0:3713b01e72fe 219 uint16_t x = 0;
displaymodule 0:3713b01e72fe 220 uint16_t y = 0;
displaymodule 0:3713b01e72fe 221 uint16_t w = tft.width();
displaymodule 0:3713b01e72fe 222 uint16_t h = tft.height();
displaymodule 1:9a3ae682a75e 223 uint16_t size = (w - (BUTTONS_PER_LINE + 1)*MARGIN)/BUTTONS_PER_LINE;
displaymodule 1:9a3ae682a75e 224 uint16_t yoff = h - (size + MARGIN)*BUTTONS_NUM_LINES;
displaymodule 0:3713b01e72fe 225 bool down = false;
displaymodule 0:3713b01e72fe 226
displaymodule 0:3713b01e72fe 227 for (int i = 0; i < NUM_BUTTONS;i++) {
displaymodule 1:9a3ae682a75e 228 x = MARGIN + (size + MARGIN) * (i % BUTTONS_PER_LINE);
displaymodule 1:9a3ae682a75e 229 y = yoff + (size + MARGIN) * (i / BUTTONS_PER_LINE);
displaymodule 0:3713b01e72fe 230 buttons[i] = new Button(captions[i], x, y, size, size);
displaymodule 0:3713b01e72fe 231 buttons[i]->setAction(handleClick, captions[i][0]);
displaymodule 0:3713b01e72fe 232 }
displaymodule 0:3713b01e72fe 233
displaymodule 0:3713b01e72fe 234 tft.init();
displaymodule 0:3713b01e72fe 235 tft.clearScreen(BRIGHT_RED);
displaymodule 0:3713b01e72fe 236 tft.fillRectangle(RESULT_MARGIN_X, RESULT_MARGIN_Y, w-RESULT_MARGIN_X, yoff-RESULT_MARGIN_Y, BLACK);
displaymodule 0:3713b01e72fe 237 touch.init();
displaymodule 0:3713b01e72fe 238
displaymodule 0:3713b01e72fe 239 for (int i = 0; i < NUM_BUTTONS; i++) {
displaymodule 0:3713b01e72fe 240 buttons[i]->draw(&tft);
displaymodule 0:3713b01e72fe 241 }
displaymodule 0:3713b01e72fe 242
displaymodule 0:3713b01e72fe 243 while(true) {
displaymodule 0:3713b01e72fe 244 touch.readTouchData(x, y, down);
displaymodule 0:3713b01e72fe 245
displaymodule 2:b17b19212e5a 246 /* The following printouts are for some unexplainable reason needed
displaymodule 2:b17b19212e5a 247 on the LPC4088 QuickStart Board in combination with the MBED online compiler.
displaymodule 2:b17b19212e5a 248 The printouts are not needed when using an external compiler, e.g. Keil uVision
displaymodule 2:b17b19212e5a 249 or LPCXpresso IDE. */
displaymodule 2:b17b19212e5a 250 #if defined(__LPC407x_8x_177x_8x_H__)
displaymodule 2:b17b19212e5a 251 if (down) {
displaymodule 2:b17b19212e5a 252 printf("DOWN %4d, %4d\n", x, y);
displaymodule 2:b17b19212e5a 253 } else {
displaymodule 2:b17b19212e5a 254 printf("UP %4d, %4d\n", x, y);
displaymodule 2:b17b19212e5a 255 }
displaymodule 2:b17b19212e5a 256 #endif
displaymodule 2:b17b19212e5a 257
displaymodule 0:3713b01e72fe 258 for (int i = 0; i < NUM_BUTTONS; i++) {
displaymodule 0:3713b01e72fe 259 if (buttons[i]->handle(x, y, down)) {
displaymodule 0:3713b01e72fe 260 buttons[i]->draw(&tft);
displaymodule 0:3713b01e72fe 261 }
displaymodule 0:3713b01e72fe 262 }
displaymodule 0:3713b01e72fe 263 if (clearResult) {
displaymodule 0:3713b01e72fe 264 clearResult = false;
displaymodule 0:3713b01e72fe 265 tft.fillRectangle(RESULT_MARGIN_X, RESULT_MARGIN_Y, w-RESULT_MARGIN_X, yoff-RESULT_MARGIN_Y, BLACK);
displaymodule 0:3713b01e72fe 266 }
displaymodule 0:3713b01e72fe 267 if (redrawResult) {
displaymodule 0:3713b01e72fe 268 redrawResult = false;
displaymodule 0:3713b01e72fe 269 tft.drawStringCentered(RESULT_MARGIN_X, RESULT_MARGIN_Y, w-RESULT_MARGIN_X, yoff-RESULT_MARGIN_Y, &buff[0]);
displaymodule 0:3713b01e72fe 270 }
displaymodule 0:3713b01e72fe 271 wait(0.02);
displaymodule 0:3713b01e72fe 272 }
displaymodule 0:3713b01e72fe 273 }