test export

Dependencies:   DmTftLibrary mbed

Fork of dm_calc by Display Module

Committer:
displaymodule
Date:
Tue May 20 15:36:25 2014 +0000
Revision:
0:3713b01e72fe
Child:
1:9a3ae682a75e
First version

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 0:3713b01e72fe 46 #if 0 /* Displays without adapter */
displaymodule 0:3713b01e72fe 47 #define DM_PIN_SPI_MOSI D11
displaymodule 0:3713b01e72fe 48 #define DM_PIN_SPI_MISO D12
displaymodule 0:3713b01e72fe 49 #define DM_PIN_SPI_SCLK D13
displaymodule 0:3713b01e72fe 50
displaymodule 0:3713b01e72fe 51 #define DM_PIN_CS_TOUCH D4
displaymodule 0:3713b01e72fe 52 #define DM_PIN_CS_TFT D10
displaymodule 0:3713b01e72fe 53 #define DM_PIN_CS_SDCARD D8
displaymodule 0:3713b01e72fe 54 #define DM_PIN_CS_FLASH D6
displaymodule 0:3713b01e72fe 55 #else /* Displays with adapter */
displaymodule 0:3713b01e72fe 56 #define DM_PIN_SPI_MOSI A0
displaymodule 0:3713b01e72fe 57 #define DM_PIN_SPI_MISO D9
displaymodule 0:3713b01e72fe 58 #define DM_PIN_SPI_SCLK A1
displaymodule 0:3713b01e72fe 59
displaymodule 0:3713b01e72fe 60 #define DM_PIN_CS_TOUCH D8
displaymodule 0:3713b01e72fe 61 #define DM_PIN_CS_TFT A3
displaymodule 0:3713b01e72fe 62 #define DM_PIN_CS_SDCARD D10
displaymodule 0:3713b01e72fe 63 #endif
displaymodule 0:3713b01e72fe 64
displaymodule 0:3713b01e72fe 65 /******************************************************************************
displaymodule 0:3713b01e72fe 66 * Local variables
displaymodule 0:3713b01e72fe 67 *****************************************************************************/
displaymodule 0:3713b01e72fe 68
displaymodule 0:3713b01e72fe 69 //DmTftHX8353C tft; /* DM_TFT18_101 */
displaymodule 0:3713b01e72fe 70 //DmTftS6D0164 tft; /* DM_TFT22_102 */
displaymodule 0:3713b01e72fe 71 DmTftIli9325 tft; /* DM_TFT28_103 and DM_TFT24_104 */
displaymodule 0:3713b01e72fe 72 //DmTftIli9341 tft; /* DM_TFT28_105 */
displaymodule 0:3713b01e72fe 73 //DmTftSsd2119 tft; /* DM_TFT35_107 */
displaymodule 0:3713b01e72fe 74
displaymodule 0:3713b01e72fe 75 //DmTouch touch(DmTouch::DM_TFT28_103, false); /* For LPC4088 QuickStart Board */
displaymodule 0:3713b01e72fe 76 //DmTouch touch(DmTouch::DM_TFT28_103);
displaymodule 0:3713b01e72fe 77 //DmTouch touch(DmTouch::DM_TFT24_104, false); /* For LPC4088 QuickStart Board */
displaymodule 0:3713b01e72fe 78 DmTouch touch(DmTouch::DM_TFT24_104);
displaymodule 0:3713b01e72fe 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 0:3713b01e72fe 89 /*
displaymodule 0:3713b01e72fe 90 * 7 8 9 +
displaymodule 0:3713b01e72fe 91 * 4 5 6 -
displaymodule 0:3713b01e72fe 92 * 3 2 1 *
displaymodule 0:3713b01e72fe 93 * 0 = clr /
displaymodule 0:3713b01e72fe 94 */
displaymodule 0:3713b01e72fe 95 const char* captions[] = {
displaymodule 0:3713b01e72fe 96 "7","8","9","+",
displaymodule 0:3713b01e72fe 97 "4","5","6","-",
displaymodule 0:3713b01e72fe 98 "3","2","1","*",
displaymodule 0:3713b01e72fe 99 "0","=","clr","/",
displaymodule 0:3713b01e72fe 100 };
displaymodule 0:3713b01e72fe 101 Button* buttons[NUM_BUTTONS];
displaymodule 0:3713b01e72fe 102
displaymodule 0:3713b01e72fe 103 static char buff[25] = {0};
displaymodule 0:3713b01e72fe 104 static bool redrawResult = true;
displaymodule 0:3713b01e72fe 105 static bool clearResult = true;
displaymodule 0:3713b01e72fe 106
displaymodule 0:3713b01e72fe 107 #ifdef DEBUG
displaymodule 0:3713b01e72fe 108 static char debug[25] = {0};
displaymodule 0:3713b01e72fe 109 static char debug2[25] = {0};
displaymodule 0:3713b01e72fe 110 static int debug_pos = 0;
displaymodule 0:3713b01e72fe 111 #endif
displaymodule 0:3713b01e72fe 112
displaymodule 0:3713b01e72fe 113 /******************************************************************************
displaymodule 0:3713b01e72fe 114 * Global variables
displaymodule 0:3713b01e72fe 115 *****************************************************************************/
displaymodule 0:3713b01e72fe 116
displaymodule 0:3713b01e72fe 117
displaymodule 0:3713b01e72fe 118 /******************************************************************************
displaymodule 0:3713b01e72fe 119 * Local functions
displaymodule 0:3713b01e72fe 120 *****************************************************************************/
displaymodule 0:3713b01e72fe 121
displaymodule 0:3713b01e72fe 122 void handleClick(uint32_t arg)
displaymodule 0:3713b01e72fe 123 {
displaymodule 0:3713b01e72fe 124 static int val1 = 0;
displaymodule 0:3713b01e72fe 125 static int val2 = 0;
displaymodule 0:3713b01e72fe 126 static int op = 0;
displaymodule 0:3713b01e72fe 127 static calc_mode_t mode = MODE_WANT_ARG1;
displaymodule 0:3713b01e72fe 128 static int strpos = 0;
displaymodule 0:3713b01e72fe 129
displaymodule 0:3713b01e72fe 130 #ifdef DEBUG
displaymodule 0:3713b01e72fe 131 debug2[debug_pos] = '0'+mode;
displaymodule 0:3713b01e72fe 132 debug[debug_pos] = arg;
displaymodule 0:3713b01e72fe 133 debug_pos++;
displaymodule 0:3713b01e72fe 134 debug[debug_pos] = '\0';
displaymodule 0:3713b01e72fe 135 debug_pos = debug_pos%25;
displaymodule 0:3713b01e72fe 136 #endif
displaymodule 0:3713b01e72fe 137 switch (arg)
displaymodule 0:3713b01e72fe 138 {
displaymodule 0:3713b01e72fe 139 case '0':
displaymodule 0:3713b01e72fe 140 case '1':
displaymodule 0:3713b01e72fe 141 case '2':
displaymodule 0:3713b01e72fe 142 case '3':
displaymodule 0:3713b01e72fe 143 case '4':
displaymodule 0:3713b01e72fe 144 case '5':
displaymodule 0:3713b01e72fe 145 case '6':
displaymodule 0:3713b01e72fe 146 case '7':
displaymodule 0:3713b01e72fe 147 case '8':
displaymodule 0:3713b01e72fe 148 case '9':
displaymodule 0:3713b01e72fe 149 if ((mode == MODE_WANT_ARG1) || (mode == MODE_WANT_ARG1_OR_OP)) {
displaymodule 0:3713b01e72fe 150 val1 = val1*10 + (arg - '0');
displaymodule 0:3713b01e72fe 151 mode = MODE_WANT_ARG1_OR_OP;
displaymodule 0:3713b01e72fe 152 buff[strpos++] = arg;
displaymodule 0:3713b01e72fe 153 } else if ((mode == MODE_WANT_ARG2) || (mode == MODE_WANT_ARG2_OR_OP)) {
displaymodule 0:3713b01e72fe 154 val2 = val2*10 + (arg - '0');
displaymodule 0:3713b01e72fe 155 mode = MODE_WANT_ARG2_OR_OP;
displaymodule 0:3713b01e72fe 156 buff[strpos++] = arg;
displaymodule 0:3713b01e72fe 157 }
displaymodule 0:3713b01e72fe 158 break;
displaymodule 0:3713b01e72fe 159 case '+':
displaymodule 0:3713b01e72fe 160 case '-':
displaymodule 0:3713b01e72fe 161 case '*':
displaymodule 0:3713b01e72fe 162 case '/':
displaymodule 0:3713b01e72fe 163 if (mode == MODE_WANT_ARG1_OR_OP) {
displaymodule 0:3713b01e72fe 164 op = arg;
displaymodule 0:3713b01e72fe 165 mode = MODE_WANT_ARG2;
displaymodule 0:3713b01e72fe 166 buff[strpos++] = arg;
displaymodule 0:3713b01e72fe 167 } else if (mode == MODE_WANT_ARG2_OR_OP) {
displaymodule 0:3713b01e72fe 168 // already have "a op b", calculate it and go to "c op"
displaymodule 0:3713b01e72fe 169 switch (op) {
displaymodule 0:3713b01e72fe 170 case '+': val1 = val1 + val2; break;
displaymodule 0:3713b01e72fe 171 case '-': val1 = val1 - val2; break;
displaymodule 0:3713b01e72fe 172 case '*': val1 = val1 * val2; break;
displaymodule 0:3713b01e72fe 173 case '/': val1 = val1 / val2; break;
displaymodule 0:3713b01e72fe 174 }
displaymodule 0:3713b01e72fe 175 op = arg;
displaymodule 0:3713b01e72fe 176 val2 = 0;
displaymodule 0:3713b01e72fe 177 mode = MODE_WANT_ARG2;
displaymodule 0:3713b01e72fe 178 strpos = sprintf(buff, "%d%c", val1, op);
displaymodule 0:3713b01e72fe 179 clearResult = true;
displaymodule 0:3713b01e72fe 180 }
displaymodule 0:3713b01e72fe 181 break;
displaymodule 0:3713b01e72fe 182 case 'c':
displaymodule 0:3713b01e72fe 183 val1 = val2 = op = 0;
displaymodule 0:3713b01e72fe 184 mode = MODE_WANT_ARG1;
displaymodule 0:3713b01e72fe 185 strpos = 0;
displaymodule 0:3713b01e72fe 186 clearResult = true;
displaymodule 0:3713b01e72fe 187 break;
displaymodule 0:3713b01e72fe 188 case '=':
displaymodule 0:3713b01e72fe 189 default:
displaymodule 0:3713b01e72fe 190 if (mode == MODE_WANT_ARG2_OR_OP) {
displaymodule 0:3713b01e72fe 191 // already have "a op b", calculate it and go to "c"
displaymodule 0:3713b01e72fe 192 switch (op) {
displaymodule 0:3713b01e72fe 193 case '+': val1 = val1 + val2; break;
displaymodule 0:3713b01e72fe 194 case '-': val1 = val1 - val2; break;
displaymodule 0:3713b01e72fe 195 case '*': val1 = val1 * val2; break;
displaymodule 0:3713b01e72fe 196 case '/': val1 = val1 / val2; break;
displaymodule 0:3713b01e72fe 197 }
displaymodule 0:3713b01e72fe 198 mode = MODE_WANT_ARG1_OR_OP;
displaymodule 0:3713b01e72fe 199 val2 = 0;
displaymodule 0:3713b01e72fe 200 strpos = sprintf(buff, "%d", val1);
displaymodule 0:3713b01e72fe 201 clearResult = true;
displaymodule 0:3713b01e72fe 202 }
displaymodule 0:3713b01e72fe 203 break;
displaymodule 0:3713b01e72fe 204 }
displaymodule 0:3713b01e72fe 205 buff[strpos] = '\0';
displaymodule 0:3713b01e72fe 206 redrawResult = true;
displaymodule 0:3713b01e72fe 207 }
displaymodule 0:3713b01e72fe 208
displaymodule 0:3713b01e72fe 209 /******************************************************************************
displaymodule 0:3713b01e72fe 210 * Main
displaymodule 0:3713b01e72fe 211 *****************************************************************************/
displaymodule 0:3713b01e72fe 212
displaymodule 0:3713b01e72fe 213 int main() {
displaymodule 0:3713b01e72fe 214 uint16_t x = 0;
displaymodule 0:3713b01e72fe 215 uint16_t y = 0;
displaymodule 0:3713b01e72fe 216 uint16_t w = tft.width();
displaymodule 0:3713b01e72fe 217 uint16_t h = tft.height();
displaymodule 0:3713b01e72fe 218 uint16_t size = (w - 5*MARGIN)/4;
displaymodule 0:3713b01e72fe 219 uint16_t yoff = h - (size + MARGIN)*4;
displaymodule 0:3713b01e72fe 220 bool down = false;
displaymodule 0:3713b01e72fe 221
displaymodule 0:3713b01e72fe 222 for (int i = 0; i < NUM_BUTTONS;i++) {
displaymodule 0:3713b01e72fe 223 x = MARGIN + (size + MARGIN) * (i % 4);
displaymodule 0:3713b01e72fe 224 y = yoff + (size + MARGIN) * (i / 4);
displaymodule 0:3713b01e72fe 225 buttons[i] = new Button(captions[i], x, y, size, size);
displaymodule 0:3713b01e72fe 226 buttons[i]->setAction(handleClick, captions[i][0]);
displaymodule 0:3713b01e72fe 227 }
displaymodule 0:3713b01e72fe 228
displaymodule 0:3713b01e72fe 229 tft.init();
displaymodule 0:3713b01e72fe 230 tft.clearScreen(BRIGHT_RED);
displaymodule 0:3713b01e72fe 231 tft.fillRectangle(RESULT_MARGIN_X, RESULT_MARGIN_Y, w-RESULT_MARGIN_X, yoff-RESULT_MARGIN_Y, BLACK);
displaymodule 0:3713b01e72fe 232 touch.init();
displaymodule 0:3713b01e72fe 233
displaymodule 0:3713b01e72fe 234 for (int i = 0; i < NUM_BUTTONS; i++) {
displaymodule 0:3713b01e72fe 235 buttons[i]->draw(&tft);
displaymodule 0:3713b01e72fe 236 }
displaymodule 0:3713b01e72fe 237
displaymodule 0:3713b01e72fe 238 while(true) {
displaymodule 0:3713b01e72fe 239 touch.readTouchData(x, y, down);
displaymodule 0:3713b01e72fe 240
displaymodule 0:3713b01e72fe 241 for (int i = 0; i < NUM_BUTTONS; i++) {
displaymodule 0:3713b01e72fe 242 if (buttons[i]->handle(x, y, down)) {
displaymodule 0:3713b01e72fe 243 buttons[i]->draw(&tft);
displaymodule 0:3713b01e72fe 244 }
displaymodule 0:3713b01e72fe 245 }
displaymodule 0:3713b01e72fe 246 if (clearResult) {
displaymodule 0:3713b01e72fe 247 clearResult = false;
displaymodule 0:3713b01e72fe 248 tft.fillRectangle(RESULT_MARGIN_X, RESULT_MARGIN_Y, w-RESULT_MARGIN_X, yoff-RESULT_MARGIN_Y, BLACK);
displaymodule 0:3713b01e72fe 249 }
displaymodule 0:3713b01e72fe 250 if (redrawResult) {
displaymodule 0:3713b01e72fe 251 redrawResult = false;
displaymodule 0:3713b01e72fe 252 tft.drawStringCentered(RESULT_MARGIN_X, RESULT_MARGIN_Y, w-RESULT_MARGIN_X, yoff-RESULT_MARGIN_Y, &buff[0]);
displaymodule 0:3713b01e72fe 253 #ifdef DEBUG
displaymodule 0:3713b01e72fe 254 tft.drawString(5, 5, &debug[0]);
displaymodule 0:3713b01e72fe 255 tft.drawString(5, 25, &debug2[0]);
displaymodule 0:3713b01e72fe 256 tft.drawNumber(5, 45, val1, 6);
displaymodule 0:3713b01e72fe 257 tft.drawNumber(5, 65, val2, 6);
displaymodule 0:3713b01e72fe 258 tft.drawString(5, 25, &debug2[0]);
displaymodule 0:3713b01e72fe 259 #endif
displaymodule 0:3713b01e72fe 260 }
displaymodule 0:3713b01e72fe 261 wait(0.02);
displaymodule 0:3713b01e72fe 262 }
displaymodule 0:3713b01e72fe 263 }