aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ginput/touch/ADS7843/gmouse_lld_ADS7843.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/ginput/touch/ADS7843/gmouse_lld_ADS7843.c')
-rw-r--r--drivers/ginput/touch/ADS7843/gmouse_lld_ADS7843.c77
1 files changed, 77 insertions, 0 deletions
diff --git a/drivers/ginput/touch/ADS7843/gmouse_lld_ADS7843.c b/drivers/ginput/touch/ADS7843/gmouse_lld_ADS7843.c
new file mode 100644
index 00000000..a58ca938
--- /dev/null
+++ b/drivers/ginput/touch/ADS7843/gmouse_lld_ADS7843.c
@@ -0,0 +1,77 @@
+/*
+ * This file is subject to the terms of the GFX License. If a copy of
+ * the license was not distributed with this file, you can obtain one at:
+ *
+ * http://ugfx.org/license.html
+ */
+
+#include "gfx.h"
+
+#if (GFX_USE_GINPUT && GINPUT_NEED_MOUSE)
+
+#define GMOUSE_DRIVER_VMT GMOUSEVMT_ADS7843
+#include "src/ginput/driver_mouse.h"
+
+// Get the hardware interface
+#include "gmouse_lld_ADS7843_board.h"
+
+// If the board file doesn't specify how many extra bytes it wants - assume 0
+#ifndef BOARD_DATA_SIZE
+ #define BOARD_DATA_SIZE 0
+#endif
+
+#define CMD_X 0xD1
+#define CMD_Y 0x91
+
+void read_xyz(GMouse* m, GMouseReading* pdr)
+{
+ (void)m;
+
+ // No buttons
+ pdr->buttons = 0;
+
+ if (getpin_pressed()) {
+ aquire_bus();
+ pdr->x = read_value(CMD_X);
+ pdr->y = read_value(CMD_Y);
+ pdr->z = 1;
+ release_bus();
+ } else {
+ // Don't touch x and y values here
+ pdr->z = 0;
+ }
+}
+
+const GMouseVMT const GMOUSE_DRIVER_VMT[1] = {{
+ {
+ GDRIVER_TYPE_TOUCH,
+ GMOUSE_VFLG_TOUCH | GMOUSE_VFLG_CALIBRATE | GMOUSE_VFLG_CAL_TEST |
+ GMOUSE_VFLG_ONLY_DOWN | GMOUSE_VFLG_POORUPDOWN,
+ sizeof(GMouse)+BOARD_DATA_SIZE,
+ _gmouseInitDriver,
+ _gmousePostInitDriver,
+ _gmouseDeInitDriver
+ },
+ 1, // z_max - (currently?) not supported
+ 0, // z_min - (currently?) not supported
+ 1, // z_touchon
+ 0, // z_touchoff
+ { // pen_jitter
+ GMOUSE_ADS7843_PEN_CALIBRATE_ERROR, // calibrate
+ GMOUSE_ADS7843_PEN_CLICK_ERROR, // click
+ GMOUSE_ADS7843_PEN_MOVE_ERROR // move
+ },
+ { // finger_jitter
+ GMOUSE_ADS7843_FINGER_CALIBRATE_ERROR, // calibrate
+ GMOUSE_ADS7843_FINGER_CLICK_ERROR, // click
+ GMOUSE_ADS7843_FINGER_MOVE_ERROR // move
+ },
+ init_board, // init
+ 0, // deinit
+ read_xyz, // get
+ 0, // calsave
+ 0 // calload
+}};
+
+#endif /* GFX_USE_GINPUT && GINPUT_NEED_MOUSE */
+