Conversion of DisplayModule's DmTouch to work with UniGraphics as display driver rather than their own DmTftLib.
Fork of DmTouch_UniGraphic by
DmTouch.h@0:fd018d3e7dab, 2016-01-20 (annotated)
- Committer:
- JLarkin
- Date:
- Wed Jan 20 07:25:22 2016 +0000
- Revision:
- 0:fd018d3e7dab
Created DmTouch version which works with UniGraphic rather than DmTftLib.
Who changed what in which revision?
User | Revision | Line number | New 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 |