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 */