提交 8ed3e82e 编写于 作者: xuzhuoyi96's avatar xuzhuoyi96

[bsp][stm32f429-disco] register touch device to RT-Thread

上级 b5bb1f57
......@@ -93,7 +93,7 @@ static int32_t touch_write (uint8_t reg, uint8_t val)
- \b 0: function succeeded
- \b -1: function failed
*/
int32_t Touch_Initialize (void)
static rt_err_t stmpe811_touch_init(rt_device_t dev)
{
stmpe811_i2c_bus = rt_i2c_bus_device_find(STMPE811_I2CBUS_NAME);
......@@ -131,7 +131,7 @@ int32_t Touch_Initialize (void)
- \b 0: function succeeded
- \b -1: function failed
*/
int32_t Touch_Uninitialize (void) {
int32_t touch_uninitialize (void) {
touch_write(STMPE811_SYS_CTRL1, 0x02); /* Reset Touch-screen controller */
return 0;
}
......@@ -144,13 +144,13 @@ int32_t Touch_Uninitialize (void) {
- \b 0: function succeeded
- \b -1: function failed
*/
int32_t Touch_GetState (struct touch_state *pState) {
int32_t touch_get_state (struct touch_state *pState)
{
uint8_t val;
uint8_t num;
uint8_t xyz[4];
int32_t res;
uint8_t buf[4];
struct rt_i2c_msg msgs;
struct rt_i2c_msg msgs[2];
/* Read touch status */
res = touch_read(STMPE811_TSC_CTRL, &val);
......@@ -167,19 +167,19 @@ int32_t Touch_GetState (struct touch_state *pState) {
while (num--)
{
msgs.addr = TSC_I2C_ADDR;
msgs.flags = RT_I2C_WR;
msgs.buf = buf;
msgs.len = 1;
msgs[0].addr = TSC_I2C_ADDR;
msgs[0].flags = RT_I2C_WR;
msgs[0].buf = &val;
msgs[0].len = 1;
rt_i2c_transfer(stmpe811_i2c_bus, &msgs, 1);
//rt_i2c_transfer(stmpe811_i2c_bus, &msgs, 1);
//ptrI2C->MasterTransmit (TSC_I2C_ADDR, &val, 1, true);
//while (ptrI2C->GetStatus().busy);
msgs.addr = TSC_I2C_ADDR;
msgs.flags = RT_I2C_RD;
msgs.buf = buf;
msgs.len = 4;
rt_i2c_transfer(stmpe811_i2c_bus, &msgs, 1);
msgs[1].addr = TSC_I2C_ADDR;
msgs[1].flags = RT_I2C_RD;
msgs[1].buf = xyz;
msgs[1].len = 4;
rt_i2c_transfer(stmpe811_i2c_bus, msgs, 2);
//ptrI2C->MasterReceive (TSC_I2C_ADDR, xyz, 4, false);
//while (ptrI2C->GetStatus().busy);
}
......@@ -188,10 +188,43 @@ int32_t Touch_GetState (struct touch_state *pState) {
}
else
{
/* Clear all data in FIFO */
/* Clear all data in FIFO */
touch_write(STMPE811_FIFO_STA, 0x1);
touch_write(STMPE811_FIFO_STA, 0x0);
}
return 0;
}
void touch_show_state()
{
struct touch_state ts;
touch_get_state(&ts);
rt_kprintf("[drv_touch] touch_show_state, x: %d, y: %d, pressed: %d, padding: %d\n", ts.x , ts.y, ts.pressed, ts.padding);
}
MSH_CMD_EXPORT(touch_show_state, show screen coordinate in touching);
static int rt_hw_touch_init(void)
{
rt_device_t touch = RT_NULL;
touch = (struct rt_device *)rt_malloc(sizeof(struct rt_device));
if (touch == RT_NULL)
return RT_ENOMEM; /* no memory yet */
/* init device structure */
touch->type = RT_Device_Class_Unknown;
touch->init = stmpe811_touch_init;
touch->user_data = RT_NULL;
/* create 1/8 second timer */
//rt_timer_create("touch", touch_timer, RT_NULL,
// RT_TICK_PER_SECOND/8, RT_TIMER_FLAG_PERIODIC);
/* register touch device to RT-Thread */
rt_device_register(touch, "touch", RT_DEVICE_FLAG_RDWR);
return RT_EOK;
}
INIT_BOARD_EXPORT(rt_hw_touch_init);
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册