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

Committer:
embeddedartists
Date:
Thu Sep 11 14:28:32 2014 +0000
Revision:
12:eb97ccfe7c3f
Parent:
10:d263094e666d
Tweaked to get better/stable touch events

Who changed what in which revision?

UserRevisionLine numberNew contents of line
displaymodule 0:d6ff5fa503e8 1 /**********************************************************************************************
displaymodule 0:d6ff5fa503e8 2 Copyright (c) 2014 DisplayModule. All rights reserved.
displaymodule 0:d6ff5fa503e8 3
displaymodule 0:d6ff5fa503e8 4 Redistribution and use of this source code, part of this source code or any compiled binary
displaymodule 0:d6ff5fa503e8 5 based on this source code is permitted as long as the above copyright notice and following
displaymodule 0:d6ff5fa503e8 6 disclaimer is retained.
displaymodule 0:d6ff5fa503e8 7
displaymodule 0:d6ff5fa503e8 8 DISCLAIMER:
displaymodule 0:d6ff5fa503e8 9 THIS SOFTWARE IS SUPPLIED "AS IS" WITHOUT ANY WARRANTIES AND SUPPORT. DISPLAYMODULE ASSUMES
displaymodule 0:d6ff5fa503e8 10 NO RESPONSIBILITY OR LIABILITY FOR THE USE OF THE SOFTWARE.
displaymodule 0:d6ff5fa503e8 11 ********************************************************************************************/
displaymodule 0:d6ff5fa503e8 12
displaymodule 0:d6ff5fa503e8 13 #ifndef DM_TOUCH_h
displaymodule 0:d6ff5fa503e8 14 #define DM_TOUCH_h
displaymodule 0:d6ff5fa503e8 15
displaymodule 0:d6ff5fa503e8 16 #include "dm_platform.h"
displaymodule 0:d6ff5fa503e8 17
displaymodule 7:6cd8c36cbdb3 18 typedef struct calibrationMatrix {
displaymodule 7:6cd8c36cbdb3 19 int32_t a, b, c, d, e, f;
displaymodule 7:6cd8c36cbdb3 20 } CalibrationMatrix;
displaymodule 7:6cd8c36cbdb3 21
displaymodule 0:d6ff5fa503e8 22 class DmTouch
displaymodule 0:d6ff5fa503e8 23 {
displaymodule 0:d6ff5fa503e8 24 public:
displaymodule 0:d6ff5fa503e8 25 enum Display {
displaymodule 7:6cd8c36cbdb3 26 DM_TFT28_103 = 103,
displaymodule 7:6cd8c36cbdb3 27 DM_TFT24_104 = 104,
displaymodule 7:6cd8c36cbdb3 28 DM_TFT28_105 = 105,
displaymodule 7:6cd8c36cbdb3 29 DM_TFT35_107 = 107
displaymodule 7:6cd8c36cbdb3 30 };
displaymodule 7:6cd8c36cbdb3 31
displaymodule 7:6cd8c36cbdb3 32 enum SpiMode {
displaymodule 7:6cd8c36cbdb3 33 Auto,
displaymodule 7:6cd8c36cbdb3 34 Software,
displaymodule 7:6cd8c36cbdb3 35 Hardware
displaymodule 0:d6ff5fa503e8 36 };
displaymodule 0:d6ff5fa503e8 37
displaymodule 0:d6ff5fa503e8 38 #if defined (DM_TOOLCHAIN_ARDUINO)
displaymodule 7:6cd8c36cbdb3 39 DmTouch(Display disp, SpiMode spiMode=Auto, bool useIrq=true);
displaymodule 0:d6ff5fa503e8 40 #elif defined (DM_TOOLCHAIN_MBED)
displaymodule 7:6cd8c36cbdb3 41 DmTouch(Display disp, SpiMode spiMode=Hardware);
displaymodule 0:d6ff5fa503e8 42 #endif
displaymodule 0:d6ff5fa503e8 43 void init();
displaymodule 0:d6ff5fa503e8 44 void readTouchData(uint16_t& posX, uint16_t& posY, bool& touching);
displaymodule 7:6cd8c36cbdb3 45 bool isTouched();
displaymodule 7:6cd8c36cbdb3 46 bool getMiddleXY(uint16_t &x, uint16_t &y); // Raw Touch Data, used for calibration
displaymodule 7:6cd8c36cbdb3 47 void setCalibrationMatrix(CalibrationMatrix calibrationMatrix);
displaymodule 7:6cd8c36cbdb3 48 void setPrecison(uint8_t samplesPerMeasurement);
displaymodule 7:6cd8c36cbdb3 49 void waitForTouch();
displaymodule 7:6cd8c36cbdb3 50 void waitForTouchRelease();
displaymodule 7:6cd8c36cbdb3 51 uint32_t rescaleFactor() { return 1000000; };
displaymodule 10:d263094e666d 52 Display getDisplay() { return _disp; };
displaymodule 7:6cd8c36cbdb3 53
displaymodule 0:d6ff5fa503e8 54 private:
displaymodule 0:d6ff5fa503e8 55 void spiWrite(uint8_t data);
displaymodule 0:d6ff5fa503e8 56 uint8_t spiRead();
displaymodule 0:d6ff5fa503e8 57 uint16_t readData12(uint8_t command);
displaymodule 0:d6ff5fa503e8 58 void enableIrq();
displaymodule 7:6cd8c36cbdb3 59 void readRawData(uint16_t &x, uint16_t &y);
displaymodule 7:6cd8c36cbdb3 60 void getAverageXY(uint16_t &x, uint16_t &y);
displaymodule 7:6cd8c36cbdb3 61 uint16_t getDisplayCoordinateX(uint16_t x_touch, uint16_t y_touch);
displaymodule 7:6cd8c36cbdb3 62 uint16_t getDisplayCoordinateY(uint16_t x_touch, uint16_t y_touch);
displaymodule 7:6cd8c36cbdb3 63 uint16_t calculateMiddleValue(uint16_t values[], uint8_t count);
displaymodule 7:6cd8c36cbdb3 64 bool isSampleValid();
displaymodule 0:d6ff5fa503e8 65
displaymodule 10:d263094e666d 66 Display _disp;
displaymodule 10:d263094e666d 67 uint16_t _width, _height;
displaymodule 0:d6ff5fa503e8 68 bool _hardwareSpi;
displaymodule 7:6cd8c36cbdb3 69 uint8_t _samplesPerMeasurement;
displaymodule 7:6cd8c36cbdb3 70 CalibrationMatrix _calibrationMatrix;
displaymodule 7:6cd8c36cbdb3 71 uint8_t _cs, _clk, _mosi, _miso;
displaymodule 7:6cd8c36cbdb3 72 int8_t _irq;
displaymodule 0:d6ff5fa503e8 73
displaymodule 0:d6ff5fa503e8 74 #if defined (DM_TOOLCHAIN_ARDUINO)
displaymodule 0:d6ff5fa503e8 75 regtype *_pinDC, *_pinCS, *_pinCLK, *_pinMOSI, *_pinMISO, *_pinIrq;
displaymodule 0:d6ff5fa503e8 76 regsize _bitmaskDC, _bitmaskCS, _bitmaskCLK, _bitmaskMOSI, _bitmaskMISO, _bitmaskIrq;
displaymodule 0:d6ff5fa503e8 77 uint8_t _spiSettings;
displaymodule 0:d6ff5fa503e8 78 #elif defined (DM_TOOLCHAIN_MBED)
displaymodule 3:02c19cbc707c 79 DigitalOut *_pinDC, *_pinCS, *_pinCLK, *_pinMOSI, *_led;
displaymodule 8:b24f01d148c4 80 DigitalIn *_pinMISO;
displaymodule 0:d6ff5fa503e8 81 SPI *_spi;
displaymodule 0:d6ff5fa503e8 82 #endif
displaymodule 0:d6ff5fa503e8 83
displaymodule 0:d6ff5fa503e8 84 };
displaymodule 0:d6ff5fa503e8 85 #endif