XPT2046.h
Go to the documentation of this file.
1 /****
2  * XPT2046.h
3  *
4  * Copyright 2021 mikee47 <mike@sillyhouse.net>
5  *
6  * This file is part of the Sming-Graphics Library
7  *
8  * This library is free software: you can redistribute it and/or modify it under the terms of the
9  * GNU General Public License as published by the Free Software Foundation, version 3 or later.
10  *
11  * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
12  * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
13  * See the GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License along with this library.
16  * If not, see <https://www.gnu.org/licenses/>.
17  *
18  * @author: May 2021 - mikee47 <mike@sillyhouse.net>
19  *
20  ****/
21 
22 #pragma once
23 
24 #include "../Touch.h"
25 #include <HSPI/Device.h>
26 #include <Platform/System.h>
27 #include <SimpleTimer.h>
28 
29 namespace Graphics
30 {
31 class XPT2046 : private HSPI::Device, public Touch
32 {
33 public:
34  static constexpr uint16_t sampleMax{0x0fff};
35 
37  {
38  }
39 
41  {
42  }
43 
45  {
46  timer.stop();
47  }
48 
49  bool begin(HSPI::PinSet pinSet, uint8_t chipSelect, uint8_t irqPin = PIN_NONE);
50 
51  void end()
52  {
53  timer.stop();
54  }
55 
56  /* Touch */
57 
58  Size getNativeSize() const override
59  {
60  return Size{sampleMax, sampleMax};
61  }
62 
63  State getState() const override
64  {
65  return State{Point(xraw, yraw), zraw};
66  }
67 
69  {
70  if(!updateRequested) {
71  beginUpdate();
72  }
73  }
74 
75 private:
76  HSPI::IoModes getSupportedIoModes() const override
77  {
78  return HSPI::IoMode::SPI;
79  }
80 
81  static void isr();
82  static void staticOnChange(void* param)
83  {
84  static_cast<XPT2046*>(param)->beginUpdate();
85  }
86  void beginUpdate();
87 
88  static bool IRAM_ATTR staticRequestComplete(HSPI::Request& req)
89  {
90  System.queueCallback(staticUpdate, req.param);
91  return true;
92  }
93  static void staticUpdate(void* param)
94  {
95  static_cast<XPT2046*>(param)->update();
96  }
97  void update();
98 
99  void printBuffer(const char* tag);
100 
101  SimpleTimer timer;
102  HSPI::Request req;
103  uint16_t buffer[10];
104  uint8_t irqPin{PIN_NONE};
105  bool updateRequested{false};
106  uint16_t xraw{0};
107  uint16_t yraw{0};
108  uint16_t zraw{0};
109  uint8_t offcount{0};
110 };
111 
112 } // namespace Graphics
XPT2046(HSPI::Controller &controller, Graphics::Device &device)
Definition: XPT2046.h:40
PinSet
How SPI hardware pins are connected.
Definition: Common.h:108
TPoint< int16_t > Point
Definition: Libraries/Graphics/src/include/Graphics/Types.h:280
Definition: XPT2046.h:31
void * param
User parameter.
Definition: HardwareSPI/src/include/HSPI/Request.h:72
Definition: Touch.h:30
Defines an SPI Request Packet.
Definition: HardwareSPI/src/include/HSPI/Request.h:57
Size getNativeSize() const override
Get physical size of display.
Definition: XPT2046.h:58
SystemClass System
Global instance of system object.
Definition: Common.h:34
A physical display device.
Definition: Libraries/Graphics/src/include/Graphics/Device.h:32
One bit per clock, MISO stage concurrent with MISO (full-duplex)
static constexpr uint16_t sampleMax
Definition: XPT2046.h:34
Controller & controller
Definition: Libraries/HardwareSPI/src/include/HSPI/Device.h:195
Definition: Touch.h:33
static bool queueCallback(TaskCallback32 callback, uint32_t param=0)
Queue a deferred callback.
Device * device
Definition: Touch.h:92
Size of rectangular area (width x height)
Definition: Libraries/Graphics/src/include/Graphics/Types.h:105
~XPT2046()
Definition: XPT2046.h:44
bool begin(HSPI::PinSet pinSet, uint8_t chipSelect, uint8_t irqPin=PIN_NONE)
void stop()
Stops timer.
Definition: CallbackTimer.h:223
Manage a set of bit values using enumeration.
Definition: BitSet.h:44
void requestUpdate()
Definition: XPT2046.h:68
static constexpr uint8_t PIN_NONE
Undefined I/O pin value.
Definition: Libraries/Graphics/src/include/Graphics/Types.h:37
State getState() const override
Get current state.
Definition: XPT2046.h:63
Manages access to SPI hardware.
Definition: HardwareSPI/src/include/HSPI/Controller.h:51
Definition: Virtual.h:30
void end()
Definition: XPT2046.h:51
XPT2046(HSPI::Controller &controller)
Definition: XPT2046.h:36
Manages a specific SPI device instance attached to a controller.
Definition: Libraries/HardwareSPI/src/include/HSPI/Device.h:44