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:
Sat Nov 14 15:44:44 2015 +0000
Revision:
8:de7934ec7ea2
Parent:
6:b511421e7dc8
change to unsigned char array

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 MGC3130::MGC3130(PinName sda, PinName scl, PinName EI0, bool IS2)
yangcq88517 6:b511421e7dc8 4 :TS_Line(EI0), _i2c_bus(sda,scl), msg(), sensor()
yangcq88517 0:92f17b057d6b 5 {
yangcq88517 0:92f17b057d6b 6 TS_Line.output();
yangcq88517 0:92f17b057d6b 7 TS_Line.write(1);
yangcq88517 0:92f17b057d6b 8 _i2c_bus.frequency(FREQUENCY_FULL);
yangcq88517 0:92f17b057d6b 9
yangcq88517 0:92f17b057d6b 10 if (IS2)
yangcq88517 0:92f17b057d6b 11 _addr = 0x86;
yangcq88517 0:92f17b057d6b 12 else
yangcq88517 0:92f17b057d6b 13 _addr = 0x84;
yangcq88517 0:92f17b057d6b 14 }
yangcq88517 0:92f17b057d6b 15
yangcq88517 0:92f17b057d6b 16 GestICMsg * MGC3130::readMsg()
yangcq88517 0:92f17b057d6b 17 {
yangcq88517 0:92f17b057d6b 18 TS_Line.input();
yangcq88517 5:4666b36a738d 19 if (TS_Line.read() == 0)
yangcq88517 5:4666b36a738d 20 return NULL;
yangcq88517 0:92f17b057d6b 21
yangcq88517 6:b511421e7dc8 22 msg.rewind();
yangcq88517 0:92f17b057d6b 23
yangcq88517 0:92f17b057d6b 24 TS_Line.output();
yangcq88517 0:92f17b057d6b 25 TS_Line.write(0);
yangcq88517 0:92f17b057d6b 26
yangcq88517 0:92f17b057d6b 27 _i2c_bus.start();
yangcq88517 0:92f17b057d6b 28 _i2c_bus.write(_addr | 0x01);
yangcq88517 0:92f17b057d6b 29
yangcq88517 0:92f17b057d6b 30 int size = _i2c_bus.read(1);
yangcq88517 0:92f17b057d6b 31 msg.set(size);
yangcq88517 0:92f17b057d6b 32
yangcq88517 0:92f17b057d6b 33 for (int i = 1; i < size - 1; i++)
yangcq88517 0:92f17b057d6b 34 msg.set(_i2c_bus.read(1));
yangcq88517 0:92f17b057d6b 35
yangcq88517 0:92f17b057d6b 36 msg.set(_i2c_bus.read(0));
yangcq88517 0:92f17b057d6b 37
yangcq88517 0:92f17b057d6b 38 _i2c_bus.stop();
yangcq88517 0:92f17b057d6b 39 TS_Line.write(1);
yangcq88517 1:621c4e9238ef 40 wait_us(200);
yangcq88517 0:92f17b057d6b 41 return &msg;
yangcq88517 0:92f17b057d6b 42 }
yangcq88517 0:92f17b057d6b 43
yangcq88517 0:92f17b057d6b 44 SensorData * MGC3130::readSensorData()
yangcq88517 0:92f17b057d6b 45 {
yangcq88517 0:92f17b057d6b 46 if (readMsg() != NULL && sensor.convert(&msg))
yangcq88517 0:92f17b057d6b 47 return &sensor;
yangcq88517 0:92f17b057d6b 48 else return NULL;
yangcq88517 1:621c4e9238ef 49 }
yangcq88517 1:621c4e9238ef 50
yangcq88517 1:621c4e9238ef 51 int MGC3130::setRuntimeParameter(Parameter * para)
yangcq88517 1:621c4e9238ef 52 {
yangcq88517 1:621c4e9238ef 53 _i2c_bus.start();
yangcq88517 1:621c4e9238ef 54 _i2c_bus.write(_addr);
yangcq88517 1:621c4e9238ef 55 _i2c_bus.write(0x10);
yangcq88517 1:621c4e9238ef 56 _i2c_bus.write(0x00);
yangcq88517 1:621c4e9238ef 57 _i2c_bus.write(0x00);
yangcq88517 1:621c4e9238ef 58 _i2c_bus.write(0xA2);
yangcq88517 1:621c4e9238ef 59
yangcq88517 1:621c4e9238ef 60 for (int i =0; i < Parameter::Length; i++)
yangcq88517 1:621c4e9238ef 61 _i2c_bus.write(para->gets()[i]);
yangcq88517 1:621c4e9238ef 62
yangcq88517 1:621c4e9238ef 63 _i2c_bus.stop();
yangcq88517 1:621c4e9238ef 64
yangcq88517 5:4666b36a738d 65 while (!(readMsg() != NULL || msg.getID() == GestICMsg::System_Status))
yangcq88517 4:6d639fd23628 66 setRuntimeParameter(para);
yangcq88517 4:6d639fd23628 67
yangcq88517 1:621c4e9238ef 68 return msg.get(6) | (msg.get(7) << 8);
yangcq88517 0:92f17b057d6b 69 }