The MGC3130 is the world’s first electrical-field (E-field) based three-dimensional (3D) tracking and gesture controller

Dependencies:   BufferedArray

Dependents:   NucleoMGC3130 i2c_master

Committer:
yangcq88517
Date:
Tue Oct 06 22:35:38 2015 +0000
Revision:
0:92f17b057d6b
Child:
1:621c4e9238ef
The MGC3130 is the world?s first electrical-field (E-field) based three-dimensional (3D) tracking and gesture controller

Who changed what in which revision?

UserRevisionLine numberNew contents of line
yangcq88517 0:92f17b057d6b 1 #include "MGC3130.h"
yangcq88517 0:92f17b057d6b 2
yangcq88517 0:92f17b057d6b 3 // IS2 true->High, false->Low
yangcq88517 0:92f17b057d6b 4 MGC3130::MGC3130(PinName sda, PinName scl, PinName EI0, bool IS2)
yangcq88517 0:92f17b057d6b 5 :TS_Line(EI0), _i2c_bus(sda,scl), msg(255), sensor()
yangcq88517 0:92f17b057d6b 6 {
yangcq88517 0:92f17b057d6b 7 TS_Line.output();
yangcq88517 0:92f17b057d6b 8 TS_Line.write(1);
yangcq88517 0:92f17b057d6b 9 _i2c_bus.frequency(FREQUENCY_FULL);
yangcq88517 0:92f17b057d6b 10
yangcq88517 0:92f17b057d6b 11 if (IS2)
yangcq88517 0:92f17b057d6b 12 _addr = 0x86;
yangcq88517 0:92f17b057d6b 13 else
yangcq88517 0:92f17b057d6b 14 _addr = 0x84;
yangcq88517 0:92f17b057d6b 15 }
yangcq88517 0:92f17b057d6b 16
yangcq88517 0:92f17b057d6b 17 GestICMsg * MGC3130::readMsg()
yangcq88517 0:92f17b057d6b 18 {
yangcq88517 0:92f17b057d6b 19 TS_Line.input();
yangcq88517 0:92f17b057d6b 20 if (TS_Line.read() == 0)
yangcq88517 0:92f17b057d6b 21 return NULL;
yangcq88517 0:92f17b057d6b 22
yangcq88517 0:92f17b057d6b 23 msg.reset();
yangcq88517 0:92f17b057d6b 24
yangcq88517 0:92f17b057d6b 25 TS_Line.output();
yangcq88517 0:92f17b057d6b 26 TS_Line.write(0);
yangcq88517 0:92f17b057d6b 27
yangcq88517 0:92f17b057d6b 28 _i2c_bus.start();
yangcq88517 0:92f17b057d6b 29 _i2c_bus.write(_addr | 0x01);
yangcq88517 0:92f17b057d6b 30
yangcq88517 0:92f17b057d6b 31 int size = _i2c_bus.read(1);
yangcq88517 0:92f17b057d6b 32 msg.set(size);
yangcq88517 0:92f17b057d6b 33
yangcq88517 0:92f17b057d6b 34 for (int i = 1; i < size - 1; i++)
yangcq88517 0:92f17b057d6b 35 msg.set(_i2c_bus.read(1));
yangcq88517 0:92f17b057d6b 36
yangcq88517 0:92f17b057d6b 37 msg.set(_i2c_bus.read(0));
yangcq88517 0:92f17b057d6b 38
yangcq88517 0:92f17b057d6b 39 _i2c_bus.stop();
yangcq88517 0:92f17b057d6b 40 TS_Line.write(1);
yangcq88517 0:92f17b057d6b 41
yangcq88517 0:92f17b057d6b 42 return &msg;
yangcq88517 0:92f17b057d6b 43 }
yangcq88517 0:92f17b057d6b 44
yangcq88517 0:92f17b057d6b 45 SensorData * MGC3130::readSensorData()
yangcq88517 0:92f17b057d6b 46 {
yangcq88517 0:92f17b057d6b 47 if (readMsg() != NULL && sensor.convert(&msg))
yangcq88517 0:92f17b057d6b 48 return &sensor;
yangcq88517 0:92f17b057d6b 49 else return NULL;
yangcq88517 0:92f17b057d6b 50 }