123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- #include "app_config.h"
- #include "SYD9557M.h"
- #include "asm/gpio.h"
- #include "timer.h"
- #include "event.h"
- #include "asm/power_interface.h"
- #if TCFG_TOUCHPAD_ENABLE
- #if 0
- #define iic_init(iic) hw_iic_init(iic)
- #define iic_uninit(iic) hw_iic_uninit(iic)
- #define iic_start(iic) hw_iic_start(iic)
- #define iic_stop(iic) hw_iic_stop(iic)
- #define iic_tx_byte(iic, byte) hw_iic_tx_byte(iic, byte)
- #define iic_rx_byte(iic, ack) hw_iic_rx_byte(iic, ack)
- #define iic_read_buf(iic, buf, len) hw_iic_read_buf(iic, buf, len)
- #define iic_write_buf(iic, buf, len) hw_iic_write_buf(iic, buf, len)
- #define iic_suspend(iic) hw_iic_suspend(iic)
- #define iic_resume(iic) hw_iic_resume(iic)
- #else
- #define iic_init(iic) soft_iic_init(iic)
- #define iic_uninit(iic) soft_iic_uninit(iic)
- #define iic_start(iic) soft_iic_start(iic)
- #define iic_stop(iic) soft_iic_stop(iic)
- #define iic_tx_byte(iic, byte) soft_iic_tx_byte(iic, byte)
- #define iic_rx_byte(iic, ack) soft_iic_rx_byte(iic, ack)
- #define iic_read_buf(iic, buf, len) soft_iic_read_buf(iic, buf, len)
- #define iic_write_buf(iic, buf, len) soft_iic_write_buf(iic, buf, len)
- #define iic_suspend(iic) soft_iic_suspend(iic)
- #define iic_resume(iic) soft_iic_resume(iic)
- #endif
- #define INT_IO IO_PORTB_04
- #define SYD9557M_READ_ADDR 0x49
- #define SYD9557M_WRITE_ADDR 0x48
- static u8 iic_hdl = 0;
- u8 syd9557m_get_ndata(u8 r_chip_id, u8 *buf, u8 data_len)
- {
- u8 read_len = 0;
- iic_start(iic_hdl);
- if (0 == iic_tx_byte(iic_hdl, SYD9557M_WRITE_ADDR)) {
- log_e("\n gsen iic rd err 0\n");
- read_len = 0;
- goto __gdend;
- }
- delay(50);
- if (0 == iic_tx_byte(iic_hdl, 0x01)) {
- log_e("\n gsen iic rd err 2\n");
- read_len = 0;
- goto __gdend;
- }
- delay(50);
- iic_start(iic_hdl);
- if (0 == iic_tx_byte(iic_hdl, SYD9557M_READ_ADDR)) {
- log_e("\n gsen iic rd err 3\n");
- read_len = 0;
- goto __gdend;
- }
- for (; data_len > 1; data_len--) {
- *buf++ = iic_rx_byte(iic_hdl, 1);
- read_len ++;
- }
- *buf = iic_rx_byte(iic_hdl, 0);
- read_len ++;
- __gdend:
- iic_stop(iic_hdl);
- delay(50);
- return read_len;
- }
- void syd9557_timer_hdl(void *arg)
- {
- u8 i = 0;
- u8 data[5] = {0};
- struct sys_event e;
- if (gpio_read(INT_IO) == 0) {
- syd9557m_get_ndata(SYD9557M_READ_ADDR, data, 5);
- //put_buf(data, 5);
- memset(&e, 0x0, sizeof(e));
- e.type = SYS_TOUCHPAD_EVENT;
- if (data[0] != TOUCHPAD_NO_GESTURE && data[0] < TOUCHPAD_MAX_GESTURE) { //手势事件优先
- e.u.touchpad.gesture_event = data[0];
- }
- e.u.touchpad.x = data[2];
- e.u.touchpad.y = data[3];
- sys_event_notify(&e);
- }
- }
- void syd9557m_init(u8 iic)
- {
- int i = 0;
- iic_hdl = iic;
- iic_init(iic);
- gpio_set_direction(INT_IO, 1);
- gpio_set_die(INT_IO, 1);
- gpio_set_pull_up(INT_IO, 1);
- gpio_set_pull_down(INT_IO, 0);
- sys_s_hi_timer_add(NULL, syd9557_timer_hdl, 2);
- lvd_extern_wakeup_enable(); //要根据封装来选择是否可以使用LVD唤醒, 6531C这个封装LVD是PB4
- }
- #endif
|