Modified version of the DmTftLibrary, optimized for the LPC4088 Experiment Base Board

Dependents:   lpc4088_ebb_dm_calc lpc4088_ebb_dm_bubbles

Fork of DmTftLibrary by Display Module

Revision:
7:6cd8c36cbdb3
Parent:
3:02c19cbc707c
Child:
8:b24f01d148c4
--- a/DmTouch.h	Fri May 23 08:10:09 2014 +0000
+++ b/DmTouch.h	Fri Jul 04 09:26:32 2014 +0000
@@ -15,38 +15,58 @@
 
 #include "dm_platform.h"
 
+typedef struct calibrationMatrix {
+  int32_t  a, b, c,	d, e, f;
+} CalibrationMatrix;
+
 class DmTouch
 {
 public:
   enum Display {
-    DM_TFT28_103,
-    DM_TFT24_104,
-    DM_TFT28_105,
-	DM_TFT35_107,
+    DM_TFT28_103 = 103,
+    DM_TFT24_104 = 104,
+    DM_TFT28_105 = 105,
+	DM_TFT35_107 = 107
+  };
+
+  enum SpiMode {
+	Auto,
+	Software,
+	Hardware
   };
 
 #if defined (DM_TOOLCHAIN_ARDUINO)
-  DmTouch(Display disp, uint8_t cs, int8_t tIrq = -1, uint8_t hardwareSpi = 1, uint8_t clk = -1, uint8_t mosi = -1, uint8_t miso = -1, uint16_t width = 240, uint16_t height = 320);
+  DmTouch(Display disp, SpiMode spiMode=Auto, bool useIrq=true);
 #elif defined (DM_TOOLCHAIN_MBED)
-  DmTouch(Display disp, bool hardwareSPI=true);
+  DmTouch(Display disp, SpiMode spiMode=Hardware);
 #endif
   void init();
   void readTouchData(uint16_t& posX, uint16_t& posY, bool& touching);
-  uint8_t isTouched();
+  bool isTouched();
+  bool getMiddleXY(uint16_t &x, uint16_t &y); // Raw Touch Data, used for calibration
+  void setCalibrationMatrix(CalibrationMatrix calibrationMatrix);
+  void setPrecison(uint8_t samplesPerMeasurement);
+  void waitForTouch();
+  void waitForTouchRelease();
+  uint32_t rescaleFactor() { return 1000000; };
+
 private:
   void spiWrite(uint8_t data);
   uint8_t spiRead();
   uint16_t readData12(uint8_t command);
   void enableIrq();
-
-  uint16_t _width, _height;
-  uint8_t _cs, _clk, _mosi, _miso;
-  uint8_t _irq;
+  void readRawData(uint16_t &x, uint16_t &y);
+  void getAverageXY(uint16_t &x, uint16_t &y);
+  uint16_t getDisplayCoordinateX(uint16_t x_touch, uint16_t y_touch);
+  uint16_t getDisplayCoordinateY(uint16_t x_touch, uint16_t y_touch);
+  uint16_t calculateMiddleValue(uint16_t values[], uint8_t count);
+  bool isSampleValid();
 
-  int _calibLowX, _calibLowY;
-  float _calibModifierX, _calibModifierY;
-  bool _calibInvertedTouch;
   bool _hardwareSpi;
+  uint8_t _samplesPerMeasurement;
+  CalibrationMatrix _calibrationMatrix;
+  uint8_t _cs, _clk, _mosi, _miso;
+  int8_t _irq;
 
 #if defined (DM_TOOLCHAIN_ARDUINO)
   regtype *_pinDC, *_pinCS, *_pinCLK, *_pinMOSI, *_pinMISO, *_pinIrq;
@@ -60,7 +80,3 @@
 
 };
 #endif
-
-
-
-