diff options
Diffstat (limited to 'fw/fe310/eos/eve/eve_touch_engine.c')
-rw-r--r-- | fw/fe310/eos/eve/eve_touch_engine.c | 48 |
1 files changed, 39 insertions, 9 deletions
diff --git a/fw/fe310/eos/eve/eve_touch_engine.c b/fw/fe310/eos/eve/eve_touch_engine.c index 2c75ca0..7c5b39f 100644 --- a/fw/fe310/eos/eve/eve_touch_engine.c +++ b/fw/fe310/eos/eve/eve_touch_engine.c @@ -26,36 +26,66 @@ static const uint32_t _reg_track[] = { REG_TRACKER_4 }; -void eve_touch_init_engine(void) { +void eve_touch_init_engine(uint16_t engine) { /* configure touch */ eve_write8(REG_CPURESET, 2); /* touch engine reset */ - eve_write16(REG_TOUCH_CONFIG, 0x4000); /* host mode multi touch */ + eve_write16(REG_TOUCH_CONFIG, engine); /* set touch engine */ eve_write8(REG_CTOUCH_EXTENDED, 0x00); /* set extended mode */ eve_write8(REG_CPURESET, 0); /* clear reset */ - eve_touch_ehost_enter(0, 0x8000, 0x8000); - eve_touch_ehost_end(); + if (engine == EVE_TOUCH_ENGINE_HOST) { + eve_touch_ehost_enter(0, 0x8000, 0x8000); + eve_touch_ehost_end(); + } } -void eve_touch_start(void) { +uint16_t eve_touch_get_engine(void) { + return (eve_read16(REG_TOUCH_CONFIG) & EVE_TOUCH_ENGINE_MASK); +} + +void eve_touch_set_engine(uint16_t engine) { + uint16_t reg = eve_read16(REG_TOUCH_CONFIG); + + reg &= ~EVE_TOUCH_ENGINE_MASK; + reg |= engine; + + eve_write8(REG_CPURESET, 2); /* touch engine reset */ + eve_write8(REG_TOUCH_CONFIG, reg); /* set touch engine */ + eve_write8(REG_CPURESET, 0); /* clear reset */ + + if (engine == EVE_TOUCH_ENGINE_HOST) { + eve_touch_ehost_enter(0, 0x8000, 0x8000); + eve_touch_ehost_end(); + } +} + +void eve_touch_intr_enable(void) { uint16_t intr_mask; intr_mask = eve_read16(REG_INT_MASK); eve_write16(REG_INT_MASK, intr_mask | (EVE_INT_CONVCOMPLETE | EVE_INT_TAG)); - - eve_write8(REG_TOUCH_MODE, EVE_TMODE_CONTINUOUS); } -void eve_touch_stop(void) { +void eve_touch_intr_disable(void) { uint16_t intr_mask; intr_mask = eve_read16(REG_INT_MASK); eve_write16(REG_INT_MASK, intr_mask & ~(EVE_INT_CONVCOMPLETE | EVE_INT_TAG)); - eve_timer_clear(NULL); +} +void eve_touch_start(void) { + eve_write8(REG_TOUCH_MODE, EVE_TMODE_CONTINUOUS); +} + +void eve_touch_stop(void) { + eve_timer_clear(NULL); eve_write8(REG_TOUCH_MODE, EVE_TMODE_OFF); } +int eve_touch_get_extended(void) { + return !eve_read8(REG_CTOUCH_EXTENDED); +} + void eve_touch_set_extended(int extended) { eve_write8(REG_CPURESET, 2); /* touch engine reset */ eve_write8(REG_CTOUCH_EXTENDED, !extended); /* set / clear extended mode */ |