aboutsummaryrefslogtreecommitdiffstats
path: root/demos/games/tetris/Example_Makefiles/stm32f4/gmouse_lld_ADS7843_board.h
diff options
context:
space:
mode:
Diffstat (limited to 'demos/games/tetris/Example_Makefiles/stm32f4/gmouse_lld_ADS7843_board.h')
-rw-r--r--demos/games/tetris/Example_Makefiles/stm32f4/gmouse_lld_ADS7843_board.h99
1 files changed, 99 insertions, 0 deletions
diff --git a/demos/games/tetris/Example_Makefiles/stm32f4/gmouse_lld_ADS7843_board.h b/demos/games/tetris/Example_Makefiles/stm32f4/gmouse_lld_ADS7843_board.h
new file mode 100644
index 00000000..dc8e979e
--- /dev/null
+++ b/demos/games/tetris/Example_Makefiles/stm32f4/gmouse_lld_ADS7843_board.h
@@ -0,0 +1,99 @@
+/*
+ * 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
+ */
+
+/**
+ * @file boards/addons/ginput/touch/ADS7843/ginput_lld_mouse_board_st_stm32f4_discovery.h
+ * @brief GINPUT Touch low level driver source for the ADS7843 on an st_stm32f4_discovery.
+ *
+ * @note This file contains a mix of hardware specific and operating system specific
+ * code. You will need to change it for your CPU and/or operating system.
+ */
+
+#ifndef _GINPUT_LLD_MOUSE_BOARD_H
+#define _GINPUT_LLD_MOUSE_BOARD_H
+
+/*
+ * uGFX port used: ChibiOS/RT
+ *
+ * SCK: GPIOB, 13
+ * MISO: GPIOB, 14
+ * MOSI: GPIOB, 15
+ * CS: GPIOC, 4
+ * IRC: GPIOC, 5
+ *
+ * Note that you can tweak the SPI bus speed
+ */
+static const SPIConfig spicfg = {
+ 0,
+ GPIOC,
+ 4,
+ /* SPI_CR1_BR_2 |*/ SPI_CR1_BR_1 | SPI_CR1_BR_0,
+};
+
+// Resolution and Accuracy Settings
+#define GMOUSE_ADS7843_PEN_CALIBRATE_ERROR 8
+#define GMOUSE_ADS7843_PEN_CLICK_ERROR 6
+#define GMOUSE_ADS7843_PEN_MOVE_ERROR 4
+#define GMOUSE_ADS7843_FINGER_CALIBRATE_ERROR 14
+#define GMOUSE_ADS7843_FINGER_CLICK_ERROR 18
+#define GMOUSE_ADS7843_FINGER_MOVE_ERROR 14
+
+// How much extra data to allocate at the end of the GMouse structure for the board's use
+#define GMOUSE_ADS7843_BOARD_DATA_SIZE 0
+
+static bool_t init_board(GMouse* m, unsigned driverinstance) {
+ (void)m;
+
+ // Only one touch interface on this board
+ if (driverinstance)
+ return FALSE;
+
+ // Set the GPIO modes
+ palSetPadMode(GPIOC, 6, PAL_MODE_OUTPUT_PUSHPULL);
+ palSetPadMode(GPIOC, 4, PAL_MODE_INPUT);
+ palSetPadMode(GPIOA, 5, PAL_MODE_ALTERNATE(5));
+ palSetPadMode(GPIOA, 6, PAL_MODE_ALTERNATE(5));
+ palSetPadMode(GPIOA, 7, PAL_MODE_ALTERNATE(5));
+
+ // Start the SPI peripheral
+ spiStart(&SPID1, &spicfg);
+
+ return TRUE;
+}
+
+static GFXINLINE bool_t getpin_pressed(GMouse* m) {
+ (void) m;
+
+ return (!palReadPad(GPIOC, 4));
+}
+
+static GFXINLINE void aquire_bus(GMouse* m) {
+ (void) m;
+
+ spiAcquireBus(&SPID1);
+ palClearPad(GPIOC, 6);
+}
+
+static GFXINLINE void release_bus(GMouse* m) {
+ (void) m;
+
+ palSetPad(GPIOC, 6);
+ spiReleaseBus(&SPID1);
+}
+
+static GFXINLINE uint16_t read_value(GMouse* m, uint16_t port) {
+ static uint8_t txbuf[3] = {0};
+ static uint8_t rxbuf[3] = {0};
+ (void) m;
+
+ txbuf[0] = port;
+ spiExchange(&SPID1, 3, txbuf, rxbuf);
+
+ return ((uint16_t)rxbuf[1] << 5) | (rxbuf[2] >> 3);
+}
+
+#endif /* _GINPUT_LLD_MOUSE_BOARD_H */