test export

Dependencies:   DmTftLibrary mbed

Fork of dm_paint by Display Module

Revision:
0:2ee293544fc1
Child:
1:c5ef2d3261d3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Tue May 20 15:39:09 2014 +0000
@@ -0,0 +1,203 @@
+/**********************************************************************************************
+ Copyright (c) 2014 DisplayModule. All rights reserved.
+
+ Redistribution and use of this source code, part of this source code or any compiled binary
+ based on this source code is permitted as long as the above copyright notice and following
+ disclaimer is retained.
+
+ DISCLAIMER:
+ THIS SOFTWARE IS SUPPLIED "AS IS" WITHOUT ANY WARRANTIES AND SUPPORT. DISPLAYMODULE ASSUMES
+ NO RESPONSIBILITY OR LIABILITY FOR THE USE OF THE SOFTWARE.
+ ********************************************************************************************/
+
+/******************************************************************************
+ * Includes
+ *****************************************************************************/
+
+#include "mbed.h"
+
+#include "DmTftHX8353C.h"
+#include "DmTftS6D0164.h"
+#include "DmTftIli9325.h"
+#include "DmTftIli9341.h"
+#include "DmTftSsd2119.h"
+#include "DmTouch.h"
+
+#include "Canvas.h"
+
+/******************************************************************************
+ * Typedefs and defines
+ *****************************************************************************/
+
+typedef enum {
+  Idle,
+  SelectingColor,
+  Drawing,
+} paintMode_t;
+
+typedef struct {
+  uint16_t color;
+  Canvas* canvas;
+} colorButton_t;
+
+#define log(...)
+//#define log(...) printf(__VA_ARGS__)
+
+#define MARGIN       5
+#define BOX_W       30
+#define BOX_H       30
+#define POINT_SIZE   2
+
+#define NUM_BUTTONS  (sizeof(buttons)/sizeof(buttons[0]))
+
+#if 1 /* Displays without adapter */
+#define DM_PIN_SPI_MOSI   D11
+#define DM_PIN_SPI_MISO   D12
+#define DM_PIN_SPI_SCLK   D13
+
+#define DM_PIN_CS_TOUCH   D4
+#define DM_PIN_CS_TFT     D10
+#define DM_PIN_CS_SDCARD  D8
+#define DM_PIN_CS_FLASH   D6
+#else /* Displays with adapter */
+#define DM_PIN_SPI_MOSI   A0
+#define DM_PIN_SPI_MISO   D9
+#define DM_PIN_SPI_SCLK   A1
+
+#define DM_PIN_CS_TOUCH   D8
+#define DM_PIN_CS_TFT     A3
+#define DM_PIN_CS_SDCARD  D10
+#endif
+
+/******************************************************************************
+ * Local variables
+ *****************************************************************************/
+
+//DmTftHX8353C tft;  /* DM_TFT18_101 */
+//DmTftS6D0164 tft;  /* DM_TFT22_102 */
+//DmTftIli9325 tft;  /* DM_TFT28_103 and DM_TFT24_104 */
+DmTftIli9341 tft;  /* DM_TFT28_105 */
+//DmTftSsd2119 tft;   /* DM_TFT35_107 */
+
+//DmTouch touch(DmTouch::DM_TFT28_103, false); /* For LPC4088 QuickStart Board */
+//DmTouch touch(DmTouch::DM_TFT28_103);
+//DmTouch touch(DmTouch::DM_TFT24_104, false); /* For LPC4088 QuickStart Board */
+//DmTouch touch(DmTouch::DM_TFT24_104);
+DmTouch touch(DmTouch::DM_TFT28_105);
+//DmTouch touch(DmTouch::DM_TFT35_107);
+
+DigitalInOut csTouch(DM_PIN_CS_TOUCH, PIN_OUTPUT, PullUp, 1);
+DigitalInOut csDisplay(DM_PIN_CS_TFT, PIN_OUTPUT, PullUp, 1);
+DigitalInOut csSDCard(DM_PIN_CS_SDCARD, PIN_OUTPUT, PullUp, 1);
+#ifdef DM_PIN_CS_FLASH
+  DigitalInOut csFlash(DM_PIN_CS_FLASH, PIN_OUTPUT, PullUp, 1);
+#endif  
+
+/******************************************************************************
+ * Global variables
+ *****************************************************************************/
+
+
+/******************************************************************************
+ * Main
+ *****************************************************************************/
+
+int main() {
+  uint16_t x, y, lastX, lastY;
+  bool penDown;
+  paintMode_t mode = Idle;
+  uint16_t color = WHITE;
+  int activeIdx = 4;
+  int selIdx = 0;
+
+  colorButton_t buttons[] = {
+    { RED, new Canvas(MARGIN, MARGIN, BOX_W, BOX_H, BLACK, RED, 3, GRAY1) },
+    { GREEN, new Canvas(MARGIN+(BOX_W + MARGIN), MARGIN, BOX_W, BOX_H, BLACK, GREEN, 3, GRAY1) },
+    { BLUE, new Canvas(MARGIN+(BOX_W + MARGIN)*2, MARGIN, BOX_W, BOX_H, BLACK, BLUE, 3, GRAY1) },
+    { YELLOW, new Canvas(MARGIN+(BOX_W + MARGIN)*3, MARGIN, BOX_W, BOX_H, BLACK, YELLOW, 3, GRAY1) },
+    { WHITE, new Canvas(MARGIN+(BOX_W + MARGIN)*4, MARGIN, BOX_W, BOX_H, BLACK, WHITE, 3, GRAY1) },
+  };
+  
+  tft.init();
+  
+  for (int i = 0; i < NUM_BUTTONS; i++) {
+    if (color != buttons[i].color) {
+      buttons[i].canvas->enableBorder(false);
+    }
+    buttons[i].canvas->draw(&tft);
+  }
+
+  Canvas drawArea(MARGIN, MARGIN+(BOX_H + MARGIN), tft.width(), tft.height() - MARGIN+(BOX_H + MARGIN));
+  Canvas clearButton(tft.width() - 50 - MARGIN, MARGIN, 50, BOX_H, WHITE, BLACK, 1, WHITE);
+
+  drawArea.draw(&tft);
+  clearButton.draw(&tft);
+  clearButton.drawString(&tft, "clr");
+  
+  touch.init();
+
+  lastX = lastY = 0;  
+  while(true)
+  {
+    touch.readTouchData(x, y, penDown);
+    switch (mode)
+    {
+      case Idle:
+        if (penDown)
+        {
+          if (drawArea.isInside(x, y))
+          {
+            tft.drawPoint(x, y, POINT_SIZE);
+            mode = Drawing;
+            log("start draw\n");
+          } else if (clearButton.isInside(x, y)) {
+            log("Pressed clear!\n");
+            drawArea.draw(&tft);
+          } else {
+            for (int i = 0; i < NUM_BUTTONS; i++) {
+              if (buttons[i].canvas->isInside(x, y)) {
+                mode = SelectingColor;
+                selIdx = i;
+                log("Pen down on button %d\n", i);
+              }
+            }
+          }
+        }
+        break;
+        
+      case SelectingColor:
+        if (!penDown)
+        {
+          if (buttons[selIdx].canvas->isInside(lastX, lastY)) {
+            buttons[activeIdx].canvas->enableBorder(false);
+            buttons[activeIdx].canvas->draw(&tft);
+
+            log("Pen up => actual click on color %d!\n", selIdx);
+            
+            color = buttons[selIdx].color;
+            tft.setTextColor(BLACK, color);
+
+            activeIdx = selIdx;
+            buttons[activeIdx].canvas->enableBorder(true);
+            buttons[activeIdx].canvas->draw(&tft);
+          }
+          
+          mode = Idle;
+        }
+        break;
+        
+      case Drawing:
+        if (penDown && drawArea.isInside(x, y)) {
+          tft.drawPoint(x, y, POINT_SIZE);
+          log("painting\n");
+        } else if (!penDown) {
+          mode = Idle;
+          log("end draw\n");
+        }
+        break;
+    }
+    lastX = x;
+    lastY = y;
+    wait(0.002);
+  }
+}