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

MGC3130.cpp

Committer:
yangcq88517
Date:
2015-10-06
Revision:
0:92f17b057d6b
Child:
1:621c4e9238ef

File content as of revision 0:92f17b057d6b:

#include "MGC3130.h"

// IS2 true->High, false->Low
MGC3130::MGC3130(PinName sda, PinName scl, PinName EI0, bool IS2)
    :TS_Line(EI0), _i2c_bus(sda,scl), msg(255), sensor()
{
    TS_Line.output();
    TS_Line.write(1);
    _i2c_bus.frequency(FREQUENCY_FULL);

    if (IS2)
        _addr = 0x86;
    else
        _addr = 0x84;
}

GestICMsg * MGC3130::readMsg()
{
    TS_Line.input();
    if (TS_Line.read() == 0)
        return NULL;

    msg.reset();

    TS_Line.output();
    TS_Line.write(0);

    _i2c_bus.start();
    _i2c_bus.write(_addr | 0x01);

    int size = _i2c_bus.read(1);
    msg.set(size);

    for (int i = 1; i < size - 1; i++)
        msg.set(_i2c_bus.read(1));

    msg.set(_i2c_bus.read(0));

    _i2c_bus.stop();
    TS_Line.write(1);

    return &msg;
}

SensorData * MGC3130::readSensorData()
{
    if (readMsg() != NULL && sensor.convert(&msg))
        return &sensor;
    else return NULL;
}