Conversion of DisplayModule's DmTouch to work with UniGraphics as display driver rather than their own DmTftLib.

Fork of DmTouch_UniGraphic by Whitworth-EN173-2016

Committer:
JLarkin
Date:
Thu Jan 21 16:40:25 2016 +0000
Revision:
1:852bf4b0714f
Parent:
0:fd018d3e7dab
Completed modifications on remaining panel types.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JLarkin 0:fd018d3e7dab 1 /**********************************************************************************************
JLarkin 0:fd018d3e7dab 2 Copyright (c) 2014 DisplayModule. All rights reserved.
JLarkin 0:fd018d3e7dab 3
JLarkin 0:fd018d3e7dab 4 Redistribution and use of this source code, part of this source code or any compiled binary
JLarkin 0:fd018d3e7dab 5 based on this source code is permitted as long as the above copyright notice and following
JLarkin 0:fd018d3e7dab 6 disclaimer is retained.
JLarkin 0:fd018d3e7dab 7
JLarkin 0:fd018d3e7dab 8 DISCLAIMER:
JLarkin 0:fd018d3e7dab 9 THIS SOFTWARE IS SUPPLIED "AS IS" WITHOUT ANY WARRANTIES AND SUPPORT. DISPLAYMODULE ASSUMES
JLarkin 0:fd018d3e7dab 10 NO RESPONSIBILITY OR LIABILITY FOR THE USE OF THE SOFTWARE.
JLarkin 0:fd018d3e7dab 11 ********************************************************************************************/
JLarkin 0:fd018d3e7dab 12
JLarkin 0:fd018d3e7dab 13 #ifndef DM_TOUCH_h
JLarkin 0:fd018d3e7dab 14 #define DM_TOUCH_h
JLarkin 0:fd018d3e7dab 15
JLarkin 0:fd018d3e7dab 16 #include "mbed.h"
JLarkin 0:fd018d3e7dab 17 //#include "dm_platform.h" // What is needed from dm_platform.h?
JLarkin 0:fd018d3e7dab 18
JLarkin 0:fd018d3e7dab 19 #define sbi(reg, _bitmask) (*(reg) = 1)
JLarkin 0:fd018d3e7dab 20 #define cbi(reg, _bitmask) (*(reg) = 0)
JLarkin 0:fd018d3e7dab 21 #define delay(ms) wait_ms(ms)
JLarkin 0:fd018d3e7dab 22 #define pulse_high(reg, _bitmask) do { *(reg) = 1; *(reg) = 0; } while(0)
JLarkin 0:fd018d3e7dab 23 #define pulse_low(reg, _bitmask) do { *(reg) = 0; *(reg) = 1; } while(0)
JLarkin 0:fd018d3e7dab 24 #define slow_pulse_high(reg, _bitmask) do {\
JLarkin 0:fd018d3e7dab 25 *(reg) = 1; \
JLarkin 0:fd018d3e7dab 26 slow_pulse_delay(); \
JLarkin 0:fd018d3e7dab 27 *(reg) = 0; \
JLarkin 0:fd018d3e7dab 28 slow_pulse_delay(); \
JLarkin 0:fd018d3e7dab 29 } while(0)
JLarkin 0:fd018d3e7dab 30 #define slow_pulse_low(reg, _bitmask) do {\
JLarkin 0:fd018d3e7dab 31 *(reg) = 0; \
JLarkin 0:fd018d3e7dab 32 slow_pulse_delay(); \
JLarkin 0:fd018d3e7dab 33 *(reg) = 1; \
JLarkin 0:fd018d3e7dab 34 slow_pulse_delay(); \
JLarkin 0:fd018d3e7dab 35 } while(0)
JLarkin 0:fd018d3e7dab 36 #define slow_pulse_delay()
JLarkin 0:fd018d3e7dab 37
JLarkin 0:fd018d3e7dab 38 typedef struct calibrationMatrix {
JLarkin 0:fd018d3e7dab 39 int a, b, c, d, e, f;
JLarkin 0:fd018d3e7dab 40 } CalibrationMatrix;
JLarkin 0:fd018d3e7dab 41
JLarkin 0:fd018d3e7dab 42 class DmTouch
JLarkin 0:fd018d3e7dab 43 {
JLarkin 0:fd018d3e7dab 44 public:
JLarkin 0:fd018d3e7dab 45 enum Display {
JLarkin 0:fd018d3e7dab 46 DM_TFT28_103 = 103,
JLarkin 0:fd018d3e7dab 47 DM_TFT24_104 = 104,
JLarkin 0:fd018d3e7dab 48 DM_TFT28_105 = 105,
JLarkin 0:fd018d3e7dab 49 DM_TFT35_107 = 107,
JLarkin 0:fd018d3e7dab 50 DM_TFT43_108 = 108,
JLarkin 0:fd018d3e7dab 51 DM_TFT50_111 = 111
JLarkin 0:fd018d3e7dab 52 };
JLarkin 0:fd018d3e7dab 53
JLarkin 0:fd018d3e7dab 54 enum SpiMode {
JLarkin 0:fd018d3e7dab 55 Auto,
JLarkin 0:fd018d3e7dab 56 Software,
JLarkin 0:fd018d3e7dab 57 Hardware
JLarkin 0:fd018d3e7dab 58 };
JLarkin 0:fd018d3e7dab 59
JLarkin 0:fd018d3e7dab 60 enum TouchId{
JLarkin 0:fd018d3e7dab 61 IC_8875 = 0x8875,
JLarkin 0:fd018d3e7dab 62 IC_2046 = 0x2046
JLarkin 0:fd018d3e7dab 63 };
JLarkin 0:fd018d3e7dab 64
JLarkin 0:fd018d3e7dab 65 DmTouch(Display disp, PinName mosi, PinName miso, PinName clk, PinName cs, PinName irq); // Add cs and irq to input parameters
JLarkin 0:fd018d3e7dab 66 void init();
JLarkin 0:fd018d3e7dab 67 void readTouchData(uint16_t& posX, uint16_t& posY, bool& touching);
JLarkin 0:fd018d3e7dab 68 bool isTouched();
JLarkin 0:fd018d3e7dab 69 bool getMiddleXY(uint16_t &x, uint16_t &y); // Raw Touch Data, used for calibration
JLarkin 0:fd018d3e7dab 70 void setCalibrationMatrix(CalibrationMatrix calibrationMatrix);
JLarkin 0:fd018d3e7dab 71 void setPrecison(uint8_t samplesPerMeasurement);
JLarkin 0:fd018d3e7dab 72 void waitForTouch();
JLarkin 0:fd018d3e7dab 73 void waitForTouchRelease();
JLarkin 0:fd018d3e7dab 74 uint32_t rescaleFactor() { return 1000000; };
JLarkin 0:fd018d3e7dab 75 Display getDisplay() { return _disp; };
JLarkin 0:fd018d3e7dab 76 static CalibrationMatrix getDefaultCalibrationData(Display disp); // (JML) Added to this class because avoid DmTouchCalibration initially
JLarkin 0:fd018d3e7dab 77 void setOrientation(char orient); // Set screen orientation mode
JLarkin 0:fd018d3e7dab 78
JLarkin 0:fd018d3e7dab 79 private:
JLarkin 0:fd018d3e7dab 80 void spiWrite(uint8_t data);
JLarkin 0:fd018d3e7dab 81 uint8_t spiRead();
JLarkin 0:fd018d3e7dab 82 uint16_t readData12(uint8_t command);
JLarkin 0:fd018d3e7dab 83 void enableIrq();
JLarkin 0:fd018d3e7dab 84 void readRawData(uint16_t &x, uint16_t &y);
JLarkin 0:fd018d3e7dab 85 void getAverageXY(uint16_t &x, uint16_t &y);
JLarkin 0:fd018d3e7dab 86 uint16_t getDisplayCoordinateX(uint16_t x_touch, uint16_t y_touch);
JLarkin 0:fd018d3e7dab 87 uint16_t getDisplayCoordinateY(uint16_t x_touch, uint16_t y_touch);
JLarkin 0:fd018d3e7dab 88 uint16_t calculateMiddleValue(uint16_t values[], uint8_t count);
JLarkin 0:fd018d3e7dab 89 bool isSampleValid();
JLarkin 0:fd018d3e7dab 90
JLarkin 0:fd018d3e7dab 91 Display _disp;
JLarkin 0:fd018d3e7dab 92 uint16_t _width, _height;
JLarkin 0:fd018d3e7dab 93 bool _hardwareSpi;
JLarkin 0:fd018d3e7dab 94 uint8_t _samplesPerMeasurement;
JLarkin 0:fd018d3e7dab 95 CalibrationMatrix _calibrationMatrix;
JLarkin 0:fd018d3e7dab 96 uint16_t _touch_id;
JLarkin 0:fd018d3e7dab 97 char _orient; // Adjust to changes in screen orientation
JLarkin 0:fd018d3e7dab 98
JLarkin 0:fd018d3e7dab 99 PinName _cs, _clk, _mosi, _miso, _irq;
JLarkin 0:fd018d3e7dab 100 DigitalOut *_pinDC, *_pinCS, *_pinCLK, *_pinMOSI, *_led;
JLarkin 0:fd018d3e7dab 101 DigitalIn *_pinMISO, *_pinIrq;
JLarkin 0:fd018d3e7dab 102 SPI *_spi;
JLarkin 0:fd018d3e7dab 103 };
JLarkin 0:fd018d3e7dab 104 #endif