aboutsummaryrefslogtreecommitdiffstats
path: root/boards
diff options
context:
space:
mode:
authorinmarket <andrewh@inmarket.com.au>2014-10-07 21:55:12 +1000
committerinmarket <andrewh@inmarket.com.au>2014-10-07 21:55:12 +1000
commit21ad2c0c585d32bdc0b9f4fe860067aef64f2f60 (patch)
tree462653fb26af84d37266effb35dc7b4aa0e9f357 /boards
parent08e26fcb909de96b5f6476ae606149e618f75036 (diff)
downloaduGFX-21ad2c0c585d32bdc0b9f4fe860067aef64f2f60.tar.gz
uGFX-21ad2c0c585d32bdc0b9f4fe860067aef64f2f60.tar.bz2
uGFX-21ad2c0c585d32bdc0b9f4fe860067aef64f2f60.zip
New mouse board files for MikroMedia STM32 M4 board to use new MCU touch driver
Diffstat (limited to 'boards')
-rw-r--r--boards/base/Mikromedia-STM32-M4-ILI9341/ginput_lld_mouse_board.h85
-rw-r--r--boards/base/Mikromedia-STM32-M4-ILI9341/ginput_lld_mouse_config.h21
-rw-r--r--boards/base/Mikromedia-STM32-M4-ILI9341/gmouse_lld_MCU_board.h96
3 files changed, 96 insertions, 106 deletions
diff --git a/boards/base/Mikromedia-STM32-M4-ILI9341/ginput_lld_mouse_board.h b/boards/base/Mikromedia-STM32-M4-ILI9341/ginput_lld_mouse_board.h
deleted file mode 100644
index 75db2c62..00000000
--- a/boards/base/Mikromedia-STM32-M4-ILI9341/ginput_lld_mouse_board.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * 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
- */
-
-#ifndef _GINPUT_LLD_MOUSE_BOARD_H
-#define _GINPUT_LLD_MOUSE_BOARD_H
-
-#define ADC_NUM_CHANNELS 2
-#define ADC_BUF_DEPTH 1
-
-static const ADCConversionGroup adcgrpcfg = {
- FALSE,
- ADC_NUM_CHANNELS,
- 0,
- 0,
- /* HW dependent part.*/
- 0,
- ADC_CR2_SWSTART,
- 0,
- 0,
- ADC_SQR1_NUM_CH(ADC_NUM_CHANNELS),
- 0,
- ADC_SQR3_SQ2_N(ADC_CHANNEL_IN8) | ADC_SQR3_SQ1_N(ADC_CHANNEL_IN9)
-};
-
-static inline void init_board(void) {
- adcStart(&ADCD1, 0);
-}
-
-static inline void aquire_bus(void) {
-
-}
-
-static inline void release_bus(void) {
-}
-
-static inline void setup_x(void) {
- palSetPad(GPIOB, GPIOB_DRIVEA);
- palClearPad(GPIOB, GPIOB_DRIVEB);
- chThdSleepMilliseconds(2);
-}
-
-static inline void setup_y(void) {
- palClearPad(GPIOB, GPIOB_DRIVEA);
- palSetPad(GPIOB, GPIOB_DRIVEB);
- chThdSleepMilliseconds(2);
-}
-
-static inline void setup_z(void) {
- palClearPad(GPIOB, GPIOB_DRIVEA);
- palClearPad(GPIOB, GPIOB_DRIVEB);
- chThdSleepMilliseconds(2);
-}
-
-static inline uint16_t read_x(void) {
- adcsample_t samples[ADC_NUM_CHANNELS * ADC_BUF_DEPTH];
-
- adcConvert(&ADCD1, &adcgrpcfg, samples, ADC_BUF_DEPTH);
- return samples[1];
-}
-
-static inline uint16_t read_y(void) {
- adcsample_t samples[ADC_NUM_CHANNELS * ADC_BUF_DEPTH];
-
- adcConvert(&ADCD1, &adcgrpcfg, samples, ADC_BUF_DEPTH);
- return samples[0];
-}
-
-static inline uint16_t read_z(void) {
- adcsample_t samples[ADC_NUM_CHANNELS * ADC_BUF_DEPTH];
-
- adcConvert(&ADCD1, &adcgrpcfg, samples, ADC_BUF_DEPTH);
- // z will go from ~200 to ~4000 when pressed
- // auto range this back to 0 to 100
- if (samples[0] > 4000)
- return 100;
- if (samples[0] < 400)
- return 0;
- return (samples[0] - 400) / ((4000-400)/100);
-}
-
-#endif /* _GINPUT_LLD_MOUSE_BOARD_H */
diff --git a/boards/base/Mikromedia-STM32-M4-ILI9341/ginput_lld_mouse_config.h b/boards/base/Mikromedia-STM32-M4-ILI9341/ginput_lld_mouse_config.h
deleted file mode 100644
index 328e6337..00000000
--- a/boards/base/Mikromedia-STM32-M4-ILI9341/ginput_lld_mouse_config.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * 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
- */
-
-#ifndef _LLD_GINPUT_MOUSE_CONFIG_H
-#define _LLD_GINPUT_MOUSE_CONFIG_H
-
-#define GINPUT_MOUSE_EVENT_TYPE GEVENT_TOUCH
-#define GINPUT_MOUSE_NEED_CALIBRATION TRUE
-#define GINPUT_MOUSE_LLD_CALIBRATION_LOADSAVE FALSE
-#define GINPUT_MOUSE_MAX_CALIBRATION_ERROR 12
-#define GINPUT_MOUSE_READ_CYCLES 1
-#define GINPUT_MOUSE_POLL_PERIOD 25
-#define GINPUT_MOUSE_MAX_CLICK_JITTER 2
-#define GINPUT_MOUSE_MAX_MOVE_JITTER 2
-#define GINPUT_MOUSE_CLICK_TIME 500
-
-#endif /* _LLD_GINPUT_MOUSE_CONFIG_H */
diff --git a/boards/base/Mikromedia-STM32-M4-ILI9341/gmouse_lld_MCU_board.h b/boards/base/Mikromedia-STM32-M4-ILI9341/gmouse_lld_MCU_board.h
new file mode 100644
index 00000000..94333067
--- /dev/null
+++ b/boards/base/Mikromedia-STM32-M4-ILI9341/gmouse_lld_MCU_board.h
@@ -0,0 +1,96 @@
+/*
+ * 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
+ */
+
+#ifndef _LLD_GMOUSE_MCU_BOARD_H
+#define _LLD_GMOUSE_MCU_BOARD_H
+
+// We directly define the jitter settings
+#define GMOUSE_MCU_PEN_CALIBRATE_ERROR 8
+#define GMOUSE_MCU_PEN_CLICK_ERROR 4
+#define GMOUSE_MCU_PEN_MOVE_ERROR 4
+#define GMOUSE_MCU_FINGER_CALIBRATE_ERROR 14
+#define GMOUSE_MCU_FINGER_CLICK_ERROR 8
+#define GMOUSE_MCU_FINGER_MOVE_ERROR 8
+
+// Now board specific settings...
+
+#define ADC_NUM_CHANNELS 2
+#define ADC_BUF_DEPTH 1
+
+static const ADCConversionGroup adcgrpcfg = {
+ FALSE,
+ ADC_NUM_CHANNELS,
+ 0,
+ 0,
+ /* HW dependent part.*/
+ 0,
+ ADC_CR2_SWSTART,
+ 0,
+ 0,
+ ADC_SQR1_NUM_CH(ADC_NUM_CHANNELS),
+ 0,
+ ADC_SQR3_SQ2_N(ADC_CHANNEL_IN8) | ADC_SQR3_SQ1_N(ADC_CHANNEL_IN9)
+};
+
+#define BOARD_DATA_SIZE 0 // How many extra bytes to add on the end of the mouse structure for the board's use
+
+#define Z_MIN 0 // The minimum Z reading
+#define Z_MAX 4095 // The maximum Z reading (12 bits)
+#define Z_TOUCHON 4000 // Values between this and Z_MAX are definitely pressed
+#define Z_TOUCHOFF 400 // Values between this and Z_MIN are definitely not pressed
+
+static bool_t init_board(GMouse *m, unsigned driverinstance) {
+ (void) m;
+
+ // Only one touch interface on this board
+ if (driverinstance)
+ return FALSE;
+
+ adcStart(&ADCD1, 0);
+
+ // Set up for reading Z
+ palClearPad(GPIOB, GPIOB_DRIVEA);
+ palClearPad(GPIOB, GPIOB_DRIVEB);
+ chThdSleepMilliseconds(1); // Settling time
+ return TRUE;
+}
+
+static void read_xyz(GMouse *m, GMouseReading *prd) {
+ adcsample_t samples[ADC_NUM_CHANNELS * ADC_BUF_DEPTH];
+ (void) m;
+
+ // No buttons
+ prd->buttons = 0;
+
+ // Get the z reading (assumes we are ready to read z)
+ adcConvert(&ADCD1, &adcgrpcfg, samples, ADC_BUF_DEPTH);
+ prd->z = samples[0];
+
+ // Take a shortcut and don't read x, y if we know we are definitely not touched.
+ if (prd->z >= Z_TOUCHOFF) {
+
+ // Get the x reading
+ palSetPad(GPIOB, GPIOB_DRIVEA);
+ palClearPad(GPIOB, GPIOB_DRIVEB);
+ chThdSleepMilliseconds(2);
+ adcConvert(&ADCD1, &adcgrpcfg, samples, ADC_BUF_DEPTH);
+ prd->x = samples[1];
+
+ // Get the y reading
+ palClearPad(GPIOB, GPIOB_DRIVEA);
+ palSetPad(GPIOB, GPIOB_DRIVEB);
+ chThdSleepMilliseconds(2);
+ adcConvert(&ADCD1, &adcgrpcfg, samples, ADC_BUF_DEPTH);
+ prd->y = samples[0];
+
+ // Set up for reading z again. We know it will be 20ms before we get called again so don't worry about settling time
+ palClearPad(GPIOB, GPIOB_DRIVEA);
+ palClearPad(GPIOB, GPIOB_DRIVEB);
+ }
+}
+
+#endif /* _LLD_GMOUSE_MCU_BOARD_H */