this is a first compilation of a library for IQS5xx. For now, it work with the iqs572ev02 devellopment board. The code is inspired with the sample code provide by Azotech. I have some issu with the interrupt pin RDY, which seem to be high even I don't touch de board.
Diff: main.cpp
- Revision:
- 0:4907da2299a4
- Child:
- 1:65f5b13e6177
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Wed Jan 01 12:51:18 2020 +0000 @@ -0,0 +1,206 @@ +#include "mbed.h" +#include <IQS5xx.h> + +/***** Object Declarations *****/ +IQS5xx trackPad(p28, p27, p17); + +DigitalOut led1(LED1); +DigitalOut led3(LED3); +DigitalOut led4(LED4); + +DigitalIn rdy(p17); +//InterruptIn rdyInter(p17); + +void ISR1() { //this is the response to interrupt, i.e. the ISR + led3 = !led3; +} + +int main() { + + /* + //rdy.mode(PullUp); + + I2C i2c(p28,p27); + i2c.frequency(400000); + + ////////////////// + //AcknowledgeReset + ////////////////// + + //write + i2c.start(); + i2c.write(0x74<<1); + i2c.write(0x04); + i2c.write(0x31); + i2c.write(0x80); + i2c.stop(); + + ////////////// + // get version + ////////////// + + //read + i2c.start(); + i2c.write(0x74<<1); + i2c.write(0x00); + i2c.write(0x00); + i2c.start(); + i2c.write((0x74<<1) + 0x01); + int test0 = i2c.read(1); + int test1 = i2c.read(1); + int test2 = i2c.read(1); + int test3 = i2c.read(1); + int test4 = i2c.read(1); + int test5 = i2c.read(0); + i2c.stop(); + // out + printf("Product %d ", (test0<<8)+test1); + printf("Project %d ", (test2<<8)+test3); + printf("Version %d.%d\n", test4, test5); + + //////////////// + //get swipe dist + //////////////// + + //write + i2c.start(); + i2c.write(0x74<<1); + i2c.write(0x06); + i2c.write(0xC1); + i2c.write(0x00); + i2c.write(0xB4); + i2c.stop(); + //read + i2c.start(); + i2c.write(0x74<<1); + i2c.write(0x06); + i2c.write(0xC1); + i2c.start(); + i2c.write((0x74<<1) + 0x01); + test0 = i2c.read(1); + test1 = i2c.read(0); + i2c.stop(); + printf("Swp init dist. : %d\n", (test0<<8)+test1); + + //////////// + //Rx mapping + //////////// + + //read + i2c.start(); + i2c.write(0x74<<1); + i2c.write(0x06); + i2c.write(0x3F); + i2c.start(); + i2c.write((0x74<<1) + 0x01); + test0 = i2c.read(1); + test1 = i2c.read(1); + test2 = i2c.read(1); + test3 = i2c.read(1); + test4 = i2c.read(1); + test5 = i2c.read(1); + int test6 = i2c.read(1); + int test7 = i2c.read(0); + i2c.stop(); + printf("mapping Rx : %d, %d, %d, %d, %d, %d, %d, %d\n", test0, test1, test2, test3, test4, test5, test6, test7); + + //////////// + //Tx mapping + //////////// + + //read + i2c.start(); + i2c.write(0x74<<1); + i2c.write(0x06); + i2c.write(0x49); + i2c.start(); + i2c.write((0x74<<1) + 0x01); + test0 = i2c.read(1); + test1 = i2c.read(1); + test2 = i2c.read(1); + test3 = i2c.read(1); + test4 = i2c.read(1); + test5 = i2c.read(1); + test6 = i2c.read(1); + test7 = i2c.read(0); + i2c.stop(); + printf("mapping Tx : %d, %d, %d, %d, %d, %d, %d, %d\n", test0, test1, test2, test3, test4, test5, test6, test7); + + ///////////////////// + //nombre cannaux Rx : + ///////////////////// + + //read + i2c.start(); + i2c.write(0x74<<1); + i2c.write(0x06); + i2c.write(0x3D); + i2c.start(); + i2c.write((0x74<<1) + 0x01); + test0 = i2c.read(0); + i2c.stop(); + printf("nombre cannaux Rx : %d\n", test0); + + ///////////////////// + //nombre cannaux Tx : + ///////////////////// + + //read + i2c.start(); + i2c.write(0x74<<1); + i2c.write(0x06); + i2c.write(0x3E); + i2c.start(); + i2c.write((0x74<<1) + 0x01); + test0 = i2c.read(0); + i2c.stop(); + printf("nombre cannaux Tx : %d\n", test0); */ + + //rdyInter.rise(&ISR1); + + trackPad.AcknowledgeReset(); + + trackPad.checkVersion(); + + while(1) { + + uint8_t ui8TempData[30], i; + + while(!rdy) { + led4 = 1; + wait(0.05); + led4 = 0; + wait(0.05); + } + + trackPad.I2C_Read(GestureEvents0_adr, &trackPad.Data_Buff[0], 44); + + if((trackPad.Data_Buff[3] & SNAP_TOGGLE) != 0) { + + // If there was a change in a snap status, then read the snap status + // bytes additionally. Keep previous valus to identify a state change + // + trackPad.I2C_Read(SnapStatus_adr, &ui8TempData[0], 30); + for(i = 0; i < 15; i++) { + trackPad.ui16PrevSnap[i] = trackPad.ui16SnapStatus[i]; + trackPad.ui16SnapStatus[i] = ((uint16_t)(ui8TempData[2*i])<<8) + (uint16_t)ui8TempData[(2*i)+1]; + } + } + + // + // Terminate the communication session, so that the IQS5xx can continue + // with sensing and processing + // + trackPad.Close_Comms(); + // + // Process received data + // + trackPad.Process_XY(); + + led1 = 1; + wait(0.01); + led1 = 0; + wait(0.01); + } +} +