From 5a25b2b7fb257a95fb97502c330364c188242b6c Mon Sep 17 00:00:00 2001 From: Joel Bodenmann Date: Sat, 22 Jun 2013 05:00:48 +0200 Subject: Added FT5x06 GINPUT driver --- .../ginput/touch/FT5x06/ginput_lld_mouse_board.h | 111 +++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 drivers/ginput/touch/FT5x06/ginput_lld_mouse_board.h (limited to 'drivers/ginput/touch/FT5x06/ginput_lld_mouse_board.h') diff --git a/drivers/ginput/touch/FT5x06/ginput_lld_mouse_board.h b/drivers/ginput/touch/FT5x06/ginput_lld_mouse_board.h new file mode 100644 index 00000000..b04c0024 --- /dev/null +++ b/drivers/ginput/touch/FT5x06/ginput_lld_mouse_board.h @@ -0,0 +1,111 @@ +/* + * 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://chibios-gfx.com/license.html + */ + +/** + * @file drivers/ginput/touch/FT5x06/ginput_lld_mouse_board_.h + * @brief GINPUT Touch low level driver source for the FT5x06. + * + * @defgroup Mouse Mouse + * @ingroup GINPUT + * @{ + */ + +#ifndef _GINPUT_LLD_MOUSE_BOARD_H +#define _GINPUT_LLD_MOUSE_BOARD_H + +/* I2C interface #2 - Touchscreen controller */ +static const I2CConfig i2cfg2 = { + OPMODE_I2C, + 400000, + FAST_DUTY_CYCLE_2, +}; + +/** + * @brief Initialise the board for the touch. + * + * @notapi + */ +static void init_board(void) { + i2cStart(&I2CD2, %i2ccfg2); +} + + +/** + * @brief Write a value into a certain register + * + * @param[in] reg The register address + * @param[in] n The amount of bytes (one or two) + * @param[in] val The value + * + * @notapi + */ +static void write_reg(uint8_t reg, uint8_t n, uint16_t val) { + uint8_t txbuf[3]; + + i2cAcquireBus(&I2CD2); + + txbuf[0] = reg; + + if (n == 1) { + txbuf[1] = val; + i2cMasterTransmitTimeout(&I2CD2, FT5x06_ADDR, txbuf, 2, NULL, 0, MS2ST(FT5x06_TIMEOUT)); + } else if (n == 2) { + txbuf[1] = ((val & 0xFF00) >> 8); + txbuf[2] = (val & 0x00FF); + i2cMasterTransmitTimeout(&I2CD2, FT5x06_ADDR, txbuf, 3, NULL, 0, MS2ST(FT5x06_TIMEOUT)); + } + + i2cReleaseBus(&I2CD2); +} + +/** + * @brief Read the value of a certain register + * + * @param[in] reg The register address + * @param[in] n The amount of bytes (one or two) + * + * @return Data read from device (one byte or two depending on n param) + * + * @notapi + */ +static uint16_t read_reg(uint8_t reg, uint8_t n) { + uint8_t txbuf[1], rxbuf[2]; + uint16_t ret; + + rxbuf[0] = 0; + rxbuf[1] = 0; + + i2cAcquireBus(&I2CD2); + + txbuf[0] = reg; + i2cMasterTransmitTimeout(&I2CD2, FT5x06_ADDR, txbuf, 1, rxbuf, n, MS2ST(FT5x06_TIMEOUT)); + + if (n == 1) { + ret = rxbuf[0]; + } else if (n == 2) { + ret = ((rxbuf[0] << 8) | (rxbuf[1] & 0xFF)); + } + + i2cReleaseBus(&I2CD2); + + return ret; +} + +static void read_reg_n(uint8_t reg, uint8_t n, uint8_t *rxbuf) { + uint8_t txbuf[1]; + + i2cAcquireBus(&I2CD2); + + txbuf[0] = reg; + i2cMasterTransmitTimeout(&I2CD2, FT5x06_ADDR, txbuf, 1, rxbuf, n, MS2ST(FT5x06_TIMEOUT)); + + i2cReleaseBus(&I2CD2); +} + +#endif /* _GINPUT_LLD_MOUSE_BOARD_H */ +/** @} */ + -- cgit v1.2.3 From 77a70fe9b8100c7d6bda21f828f3a0c4d1f66159 Mon Sep 17 00:00:00 2001 From: Joel Bodenmann Date: Sat, 22 Jun 2013 14:02:56 +0200 Subject: typo fix --- drivers/ginput/touch/FT5x06/ginput_lld_mouse_board.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/ginput/touch/FT5x06/ginput_lld_mouse_board.h') diff --git a/drivers/ginput/touch/FT5x06/ginput_lld_mouse_board.h b/drivers/ginput/touch/FT5x06/ginput_lld_mouse_board.h index b04c0024..bcc36308 100644 --- a/drivers/ginput/touch/FT5x06/ginput_lld_mouse_board.h +++ b/drivers/ginput/touch/FT5x06/ginput_lld_mouse_board.h @@ -30,7 +30,7 @@ static const I2CConfig i2cfg2 = { * @notapi */ static void init_board(void) { - i2cStart(&I2CD2, %i2ccfg2); + i2cStart(&I2CD2, &i2ccfg2); } -- cgit v1.2.3 From 9aa1e95423f681277d048bed6b9acc5101f2cbe2 Mon Sep 17 00:00:00 2001 From: Joel Bodenmann Date: Sat, 22 Jun 2013 14:05:22 +0200 Subject: one more typo fix... --- drivers/ginput/touch/FT5x06/ginput_lld_mouse_board.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/ginput/touch/FT5x06/ginput_lld_mouse_board.h') diff --git a/drivers/ginput/touch/FT5x06/ginput_lld_mouse_board.h b/drivers/ginput/touch/FT5x06/ginput_lld_mouse_board.h index bcc36308..f8381b65 100644 --- a/drivers/ginput/touch/FT5x06/ginput_lld_mouse_board.h +++ b/drivers/ginput/touch/FT5x06/ginput_lld_mouse_board.h @@ -18,7 +18,7 @@ #define _GINPUT_LLD_MOUSE_BOARD_H /* I2C interface #2 - Touchscreen controller */ -static const I2CConfig i2cfg2 = { +static const I2CConfig i2ccfg2 = { OPMODE_I2C, 400000, FAST_DUTY_CYCLE_2, -- cgit v1.2.3