800*320工程文件+初始demo提交
This commit is contained in:
170
SW/components/drivers/bsp/touchpad/driver_touchpad.c
Normal file
170
SW/components/drivers/bsp/touchpad/driver_touchpad.c
Normal file
@ -0,0 +1,170 @@
|
||||
#include <stdint.h>
|
||||
|
||||
#include "driver_touchpad.h"
|
||||
#include "FreeRTOS.h"
|
||||
#include "task.h"
|
||||
|
||||
//#define TOUCHPAD_SH8601A
|
||||
//#define TOUCHPAD_ICNA3310
|
||||
//#define TOUCHPAD_CHSC586
|
||||
//#define TOUCHPAD_CHSC6x
|
||||
//#define TOUCHPAD_CTP820
|
||||
#define TOUCHPAD_FT6336U
|
||||
|
||||
#ifdef TOUCHPAD_SH8601A
|
||||
#define TOUCHPAD_IIC_SLAVE_ADDRESS (0x2C<<1) // from sh8601a
|
||||
#endif
|
||||
#ifdef TOUCHPAD_ICNA3310
|
||||
#define TOUCHPAD_IIC_SLAVE_ADDRESS (0x48 << 1) // from icna3310
|
||||
#endif
|
||||
#ifdef TOUCHPAD_CTP820
|
||||
#define TOUCHPAD_IIC_SLAVE_ADDRESS (0x15 << 1) // from ctp820
|
||||
#endif
|
||||
|
||||
#ifdef TOUCHPAD_FT6336U
|
||||
#define TOUCHPAD_IIC_SLAVE_ADDRESS (0x71) // from ft6336u
|
||||
#endif
|
||||
|
||||
#ifdef TOUCHPAD_CHSC586
|
||||
extern bool semi_touch_read_coordinate(int16_t *x, int16_t *y);
|
||||
extern int semi_touch_init();
|
||||
#endif
|
||||
|
||||
#ifdef TOUCHPAD_CHSC6x
|
||||
bool chsc6x_read_touch_info(int16_t *x, int16_t *y);
|
||||
void chsc6x_init(void);
|
||||
#endif
|
||||
|
||||
bool touchpad_read(int16_t *x, int16_t *y)
|
||||
{
|
||||
#ifdef TOUCHPAD_SH8601A
|
||||
uint8_t buffer[8];
|
||||
bool pressed = false;
|
||||
|
||||
i2c_memory_read(&i2c_touchpad_handle, TOUCHPAD_IIC_SLAVE_ADDRESS, 0, buffer, 8);
|
||||
|
||||
if (buffer[2] != 0) {
|
||||
*x = ((buffer[3]&0x0f)<<8) | buffer[4];
|
||||
*y = ((buffer[5]&0x0f)<<8) | buffer[6];
|
||||
pressed = true;
|
||||
}
|
||||
else {
|
||||
pressed = false;
|
||||
}
|
||||
|
||||
return pressed;
|
||||
#endif
|
||||
#ifdef TOUCHPAD_ICNA3310
|
||||
uint8_t buffer[9];
|
||||
bool pressed = false;
|
||||
|
||||
i2c_memory_read(&i2c_touchpad_handle, TOUCHPAD_IIC_SLAVE_ADDRESS, 0x1000, buffer, 9);
|
||||
|
||||
if (buffer[1] == 1) {
|
||||
*x = ((buffer[4]&0x0f)<<8) | buffer[3];
|
||||
*y = ((buffer[6]&0x0f)<<8) | buffer[5];
|
||||
pressed = true;
|
||||
}
|
||||
else {
|
||||
pressed = false;
|
||||
}
|
||||
|
||||
return pressed;
|
||||
#endif
|
||||
|
||||
#ifdef TOUCHPAD_CHSC586
|
||||
return semi_touch_read_coordinate(x, y);
|
||||
#endif
|
||||
|
||||
#ifdef TOUCHPAD_CHSC6x
|
||||
return chsc6x_read_touch_info(x, y);
|
||||
#endif
|
||||
|
||||
#ifdef TOUCHPAD_CTP820
|
||||
uint8_t buffer[7];
|
||||
bool pressed = false;
|
||||
|
||||
i2c_memory_read(&i2c_touchpad_handle, TOUCHPAD_IIC_SLAVE_ADDRESS, 0x00, buffer, 7);
|
||||
|
||||
if (buffer[2] == 1) {
|
||||
*x = ((buffer[3]&0x0f)<<8) | buffer[4];
|
||||
*y = ((buffer[5]&0x0f)<<8) | buffer[6];
|
||||
pressed = true;
|
||||
}
|
||||
else {
|
||||
pressed = false;
|
||||
}
|
||||
|
||||
return pressed;
|
||||
#endif
|
||||
|
||||
#ifdef TOUCHPAD_FT6336U
|
||||
uint8_t buffer[7];
|
||||
bool pressed = false;
|
||||
i2c_memory_read(&i2c_touchpad_handle, TOUCHPAD_IIC_SLAVE_ADDRESS, 0x00, buffer, 7);
|
||||
if (buffer[2] == 1) {
|
||||
*x = ((buffer[3]&0x0f)<<8) | buffer[4];
|
||||
*y = ((buffer[5]&0x0f)<<8) | buffer[6];
|
||||
pressed = true;
|
||||
}
|
||||
else {
|
||||
pressed = false;
|
||||
}
|
||||
|
||||
return pressed;
|
||||
#endif
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void touchpad_init(void)
|
||||
{
|
||||
#ifdef TOUCHPAD_ICNA3310
|
||||
/* reset touch pad chip */
|
||||
__TOUCHPAD_RESET_SET();
|
||||
__TOUCHPAD_DELAY_MS(10);
|
||||
__TOUCHPAD_RESET_CLEAR();
|
||||
__TOUCHPAD_DELAY_MS(5);
|
||||
__TOUCHPAD_RESET_SET();
|
||||
__TOUCHPAD_DELAY_MS(200);
|
||||
#endif
|
||||
|
||||
#ifdef TOUCHPAD_CHSC586
|
||||
semi_touch_init();
|
||||
#endif
|
||||
|
||||
#ifdef TOUCHPAD_CHSC6x
|
||||
chsc6x_init();
|
||||
#endif
|
||||
|
||||
#ifdef TOUCHPAD_CTP820
|
||||
/* reset touch pad chip */
|
||||
__TOUCHPAD_RESET_SET();
|
||||
__TOUCHPAD_DELAY_MS(10);
|
||||
__TOUCHPAD_RESET_CLEAR();
|
||||
__TOUCHPAD_DELAY_MS(10);
|
||||
__TOUCHPAD_RESET_SET();
|
||||
__TOUCHPAD_DELAY_MS(50);
|
||||
#endif
|
||||
|
||||
#ifdef TOUCHPAD_FT6336U
|
||||
/* reset touch pad chip */
|
||||
__TOUCHPAD_RESET_SET();
|
||||
__TOUCHPAD_RESET_CLEAR();
|
||||
vTaskDelay(10);
|
||||
__TOUCHPAD_RESET_SET();
|
||||
vTaskDelay(250);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void touchpad_sleep(void)
|
||||
{
|
||||
|
||||
#ifdef TOUCHPAD_CTP820
|
||||
uint8_t value = 0x03;
|
||||
i2c_memory_write(&i2c_touchpad_handle, TOUCHPAD_IIC_SLAVE_ADDRESS, 0xE5, &value, 1);
|
||||
|
||||
#endif
|
||||
|
||||
}
|
Reference in New Issue
Block a user