for 522 mbed basic operate
Diff: DmTpFt6x06.cpp
- Revision:
- 15:70127e08ed27
- Parent:
- 14:2db7065edbec
--- a/DmTpFt6x06.cpp Mon Oct 12 08:35:35 2015 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,215 +0,0 @@ -/********************************************************************************************** - Copyright (c) 2015 DisplayModule. All rights reserved. - - Redistribution and use of this source code, part of this source code or any compiled binary - based on this source code is permitted as long as the above copyright notice and following - disclaimer is retained. - - DISCLAIMER: - THIS SOFTWARE IS SUPPLIED "AS IS" WITHOUT ANY WARRANTIES AND SUPPORT. DISPLAYMODULE ASSUMES - NO RESPONSIBILITY OR LIABILITY FOR THE USE OF THE SOFTWARE. - ********************************************************************************************/ -// Tested with FT6X06 - -#include "DmTpFt6x06.h" -//#define log(...) Serial.println(__VA_ARGS__) -#define log(...) - -#if defined(DM_TOOLCHAIN_ARDUINO) -// disp - which display is used -// useIrq - Enable IRQ or disable IRQ -DmTpFt6x06::DmTpFt6x06(Display disp, bool useIrq) -#elif defined (DM_TOOLCHAIN_MBED) -// disp - which display is used -// &i2c - I2C class -// useIrq - Enable IRQ or disable IRQ -DmTpFt6x06::DmTpFt6x06(Display disp, I2C &i2c, bool useIrq) -#endif -{ - switch (disp) { - case DmTpFt6x06::DM_TFT28_116: - _irq = D2; - break; - default: - _irq = D2; - break; - } - - if (!useIrq) { - _irq = NC; - } -#if defined (DM_TOOLCHAIN_MBED) - _i2c = &i2c; -#endif -} - -void DmTpFt6x06::init() { - log("enter init()"); - -#if defined (DM_TOOLCHAIN_ARDUINO) - Wire.begin(); - Serial.print("Panel ID: "); Serial.println(readRegister8(FT6x06_FOCALTECH_ID)); - Serial.print("Chip ID: "); Serial.println(readRegister8(FT6x06_CHIPER)); - Serial.print("Firmware V: "); Serial.println(readRegister8(FT6x06_FIRMID)); - Serial.print("Point Rate Hz: "); Serial.println(readRegister8(FT6x06_PERIODACTIVE)); - Serial.print("Threshold: "); Serial.println(readRegister8(FT6x06_TH_GROUP)); -#elif defined (DM_TOOLCHAIN_MBED) - _i2c->frequency(400000); -#endif - if (_irq != -1) { // We will use Touch IRQ - enableIrq(); - } - - - log("exit init()"); -} - -void DmTpFt6x06::enableIrq() { - log("enter enableIrq()"); - -#if defined (DM_TOOLCHAIN_ARDUINO) - pinMode(_irq, INPUT); - _pinIrq = portInputRegister(digitalPinToPort(_irq)); - _bitmaskIrq = digitalPinToBitMask(_irq); -#elif defined (DM_TOOLCHAIN_MBED) - _pinIrq = new DigitalIn((PinName)_irq); - _pinIrq->mode(PullUp); -#endif - - log("exit enableIrq()"); -} - -uint8_t DmTpFt6x06::readRegister8(uint8_t reg) { -#if defined (DM_TOOLCHAIN_ARDUINO) - uint8_t x ; - Wire.beginTransmission(FT6x06_ADDR); - Wire.write((byte)reg); - Wire.endTransmission(); - Wire.beginTransmission(FT6x06_ADDR); - Wire.requestFrom((byte)FT6x06_ADDR, (byte)1); - x = Wire.read(); - Wire.endTransmission(); - return x; -#elif defined (DM_TOOLCHAIN_MBED) - char buf[1] = {reg}, data = 0; - _i2c->write(FT6x06_ADDR, buf, 1, true); - _i2c->read(FT6x06_ADDR, &data, 1); - return data; -#endif -} - -void DmTpFt6x06::writeRegister8(uint8_t reg, uint8_t val) { -#if defined (DM_TOOLCHAIN_ARDUINO) - Wire.beginTransmission(FT6x06_ADDR); - Wire.write((byte)reg); - Wire.write((byte)val); - Wire.endTransmission(); -#elif defined (DM_TOOLCHAIN_MBED) - char buf[2] = {reg, val}; - _i2c->write(FT6x06_ADDR, buf, 2); -#endif -} - - -bool DmTpFt6x06::isTouched() { - if (_irq == -1) { - uint8_t val; - val = readRegister8(FT6x06_TD_STATUS); - if ((val == 1) || (val == 2)) return true; - return false; - } - -#if defined (DM_TOOLCHAIN_ARDUINO) - if ( !gbi(_pinIrq, _bitmaskIrq) ) { - return true; - } - return false; -#elif defined (DM_TOOLCHAIN_MBED) - if (!_pinIrq->read()) { - return true; - } - return false; -#endif -} - - -void DmTpFt6x06::readTouchData(uint16_t& posX, uint16_t& posY, bool& touching) { -#if defined (DM_TOOLCHAIN_ARDUINO) - uint8_t buf[16]; - Wire.beginTransmission(FT6x06_ADDR); - Wire.write((byte)0); - Wire.endTransmission(); - Wire.beginTransmission(FT6x06_ADDR); - Wire.requestFrom((byte)FT6x06_ADDR, (byte)16); - for (uint8_t i=0; i<16; i++) - buf[i] = Wire.read(); - Wire.endTransmission(); - - posX = buf[3] & 0x0F; - posX <<= 8; - posX |= buf[4]; - posY = buf[5] & 0x0F; - posY <<= 8; - posY |= buf[6]; -#elif defined (DM_TOOLCHAIN_MBED) - posX = readRegister8(0x03) & 0x0F; - posX <<= 8; - posX |= readRegister8(0x04); - posY = readRegister8(0x05) & 0x0F; - posY <<= 8; - posY |= readRegister8(0x06); - - posX = map(posX, 0, 240, 240, 0); - posY = map(posY, 0, 320, 320, 0); -#endif - touching = isTouched(); -} - -bool DmTpFt6x06::readTouchData(uint16_t& posX, uint16_t& posY) { -#if defined (DM_TOOLCHAIN_ARDUINO) - uint8_t buf[16]; - Wire.beginTransmission(FT6x06_ADDR); - Wire.write((byte)0); - Wire.endTransmission(); - Wire.beginTransmission(FT6x06_ADDR); - Wire.requestFrom((byte)FT6x06_ADDR, (byte)16); - for (uint8_t i=0; i<16; i++) - buf[i] = Wire.read(); - Wire.endTransmission(); - - if(buf[2] > 2){ - posX = 0; - posY = 0; - return false; - } - posX = buf[3] & 0x0F; - posX <<= 8; - posX |= buf[4]; - posY = buf[5] & 0x0F; - posY <<= 8; - posY |= buf[6]; - return true; -#elif defined (DM_TOOLCHAIN_MBED) - if(readRegister8(0x03) > 2){ - posX = 0; - posY = 0; - return false; - } - - posX = readRegister8(0x03) & 0x0F; - posX <<= 8; - posX |= readRegister8(0x04); - posY = readRegister8(0x05) & 0x0F; - posY <<= 8; - posY |= readRegister8(0x06); - - posX = map(posX, 0, 240, 240, 0); - posY = map(posY, 0, 320, 320, 0); - return true; -#endif -} - -long DmTpFt6x06::map(long x, long in_min, long in_max, long out_min, long out_max) -{ - return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; -}