The MGC3130 is the world’s first electrical-field (E-field) based three-dimensional (3D) tracking and gesture controller
Dependents: NucleoMGC3130 i2c_master
MGC3130.cpp@8:de7934ec7ea2, 2015-11-14 (annotated)
- 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?
User | Revision | Line number | New 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 | } |