KSM edits to RA8875

Dependents:   Liz_Test_Code

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers RA8875_Touch_FT5206.cpp Source File

RA8875_Touch_FT5206.cpp

00001 
00002 
00003 #include "RA8875.h"
00004 
00005 //#define DEBUG "RAFT" // RA8875 FT5206
00006 // ...
00007 // INFO("Stuff to show %d", var); // new-line is automatically appended
00008 //
00009 #if (defined(DEBUG) && !defined(TARGET_LPC11U24))
00010 #define INFO(x, ...) std::printf("[INF %s %4d] "x"\r\n", DEBUG, __LINE__, ##__VA_ARGS__);
00011 #define WARN(x, ...) std::printf("[WRN %s %4d] "x"\r\n", DEBUG, __LINE__, ##__VA_ARGS__);
00012 #define ERR(x, ...)  std::printf("[ERR %s %4d] "x"\r\n", DEBUG, __LINE__, ##__VA_ARGS__);
00013 static void HexDump(const char * title, const uint8_t * p, int count)
00014 {
00015     int i;
00016     char buf[100] = "0000: ";
00017 
00018     if (*title)
00019         INFO("%s", title);
00020     for (i=0; i<count; ) {
00021         sprintf(buf + strlen(buf), "%02X ", *(p+i));
00022         if ((++i & 0x0F) == 0x00) {
00023             INFO("%s", buf);
00024             if (i < count)
00025                 sprintf(buf, "%04X: ", i);
00026             else
00027                 buf[0] = '\0';
00028         }
00029     }
00030     if (strlen(buf))
00031         INFO("%s", buf);
00032 }
00033 #else
00034 #define INFO(x, ...)
00035 #define WARN(x, ...)
00036 #define ERR(x, ...)
00037 #define HexDump(a, b, c)
00038 #endif
00039 
00040 
00041 
00042 // Translate from FT5206 Event Flag to Touch Code to API-match the
00043 // alternate resistive touch screen driver common in the RA8875
00044 // displays.
00045 static const TouchCode_t FT5206_EventFlagToTouchCode[4] = {
00046     touch,      // 00b Put Down
00047     release,    // 01b Put Up
00048     held,       // 10b Contact
00049     no_touch    // 11b Reserved
00050 };
00051 
00052 
00053 RetCode_t RA8875::FT5206_Init() {
00054     char data[2] = {FT5206_DEVICE_MODE, 0};
00055 
00056     m_i2c->write(m_addr, data, 2);
00057     return noerror;
00058 }
00059 
00060 uint8_t RA8875::FT5206_TouchPositions(void) {
00061     uint8_t valXH;
00062     uint8_t valYH;
00063 
00064     //INFO("FT5206_TouchPositions()");
00065     numberOfTouchPoints = FT5206_ReadRegU8(FT5206_TD_STATUS) & 0xF;
00066     //INFO("  numOfTouchPoints %d", numberOfTouchPoints);
00067     gesture = FT5206_ReadRegU8(FT5206_GEST_ID);
00068     //INFO("  gesture %d", gesture);
00069     
00070     valXH  = FT5206_ReadRegU8(FT5206_TOUCH5_XH);
00071     valYH  = FT5206_ReadRegU8(FT5206_TOUCH5_YH);
00072     touchInfo[4].touchCode = FT5206_EventFlagToTouchCode[valXH >> 6];
00073     touchInfo[4].touchID   = (valYH >> 4);
00074     touchInfo[4].coordinates.x = (valXH & 0x0f)*256 + FT5206_ReadRegU8(FT5206_TOUCH5_XL);
00075     touchInfo[4].coordinates.y = (valYH & 0x0f)*256 + FT5206_ReadRegU8(FT5206_TOUCH5_YL);
00076     
00077     valXH  = FT5206_ReadRegU8(FT5206_TOUCH4_XH);
00078     valYH  = FT5206_ReadRegU8(FT5206_TOUCH4_YH);
00079     touchInfo[3].touchCode = FT5206_EventFlagToTouchCode[valXH >> 6];
00080     touchInfo[3].touchID   = (valYH >> 4);
00081     touchInfo[3].coordinates.x = (valXH & 0x0f)*256 + FT5206_ReadRegU8(FT5206_TOUCH4_XL);
00082     touchInfo[3].coordinates.y = (valYH & 0x0f)*256 + FT5206_ReadRegU8(FT5206_TOUCH4_YL);
00083     
00084     valXH  = FT5206_ReadRegU8(FT5206_TOUCH3_XH);
00085     valYH  = FT5206_ReadRegU8(FT5206_TOUCH3_YH);
00086     touchInfo[2].touchCode = FT5206_EventFlagToTouchCode[valXH >> 6];
00087     touchInfo[2].touchID   = (valYH >> 4);
00088     touchInfo[2].coordinates.x = (valXH & 0x0f)*256 + FT5206_ReadRegU8(FT5206_TOUCH3_XL);
00089     touchInfo[2].coordinates.y = (valYH & 0x0f)*256 + FT5206_ReadRegU8(FT5206_TOUCH3_YL);
00090     
00091     valXH  = FT5206_ReadRegU8(FT5206_TOUCH2_XH);
00092     valYH  = FT5206_ReadRegU8(FT5206_TOUCH2_YH);
00093     touchInfo[1].touchCode = FT5206_EventFlagToTouchCode[valXH >> 6];
00094     touchInfo[1].touchID   = (valYH >> 4);
00095     touchInfo[1].coordinates.x = (valXH & 0x0f)*256 + FT5206_ReadRegU8(FT5206_TOUCH2_XL);
00096     touchInfo[1].coordinates.y = (valYH & 0x0f)*256 + FT5206_ReadRegU8(FT5206_TOUCH2_YL);
00097     
00098     valXH  = FT5206_ReadRegU8(FT5206_TOUCH1_XH);
00099     valYH  = FT5206_ReadRegU8(FT5206_TOUCH1_YH);
00100     touchInfo[0].touchCode = FT5206_EventFlagToTouchCode[valXH >> 6];
00101     touchInfo[0].touchID   = (valYH >> 4);
00102     touchInfo[0].coordinates.x = (valXH & 0x0f)*256 + FT5206_ReadRegU8(FT5206_TOUCH1_XL);
00103     touchInfo[0].coordinates.y = (valYH & 0x0f)*256 + FT5206_ReadRegU8(FT5206_TOUCH1_YL);
00104 
00105     return numberOfTouchPoints;
00106 }