The MGC3130 is the world’s first electrical-field (E-field) based three-dimensional (3D) tracking and gesture controller
Dependents: NucleoMGC3130 i2c_master
MGC3130.h
- Committer:
- yangcq88517
- Date:
- 2015-11-14
- Revision:
- 8:de7934ec7ea2
- Parent:
- 7:eacd776fce29
File content as of revision 8:de7934ec7ea2:
#ifndef UK_AC_HERTS_SMARTLAB_MGC3130 #define UK_AC_HERTS_SMARTLAB_MGC3130 #include "mbed.h" #include "GestICMsg.h" #include "SensorData.h" #include "Parameter.h" #include "TouchDetection.h" #include "AirWheelDetection.h" #include "ApproachDetection.h" #include "TouchInfo.h" #include "OutputEnable.h" #include "Trigger.h" #include "MakePersistent.h" #include "CalibrationMode.h" #include "GestureProcessing.h" /** * Outlines the function of the Library’s I2C message interface, and contains the complete message reference to control and operate the MGC3X30 system. * * Example: * @code *#include "mbed.h" *#include "MGC3130.h" * *SensorData * msg = NULL; * *void init() *{ * AirWheelDetection air(true); * device.setRuntimeParameter(&air); * * TouchDetection touch(true); * device.setRuntimeParameter(&touch); * * OutputEnable setting; * setting.enableGestureData(true)->enableTouchInfo(true)->enableAirWheelInfo(true)->enableNoisePower(false) * ->enablexyzPosition(false)->enableDSPStatus(false)->enableUncalibratedSignal(false)->enableSignalDeviation(false); * device.setRuntimeParameter(&setting); *} * *void touch() *{ * TouchInfo * info = msg->getTouchInfo(); * * if (info == NULL) * return; * * if (info->isTapCenterElectrode() == false) * return; *} * *void airWheel() *{ * int * wheel = msg->getAirWheelInfo(); * if (wheel == NULL) * return; *} * *void gesture() *{ * GestureInfo * info = msg->getGestureInfo(); * * if (info == NULL) * return; * * switch (info->getRecognizedGesture()) { * //Garbage Model * case 1 : * break; * //Flick West To East * case 2 : * break; * //Flick East To West * case 3 : * break; * //Flick South To North * case 4 : * break; * //Flick North To South * case 5 : * break; * } *} * *int main() *{ * init(); * * while(1) { * msg = device.readSensorData(); * * if (msg == NULL) * continue; * * touch(); * * gesture(); * * airWheel(); * } *} * @endcode * */ class MGC3130 { private: static const int FREQUENCY_STANDARD = 100000; static const int FREQUENCY_FULL = 400000; static const int FREQUENCY_FAST = 1000000; static const int FREQUENCY_HIGH = 3200000; /// EI0 Pin: The TS line is used to check whether the I2C data is valid and can be sent from MGC3X30 to the host controller. DigitalInOut TS_Line; I2C _i2c_bus; int _speed; int _addr; GestICMsg msg; SensorData sensor; protected: GestICMsg * readMsg(); public: /** Construct a message with existing @GestICMsg as its base. * IS2 is available for address selection and enables the user to connect up to two MGC3X30 devices on the same bus without address conflict. * The MGC3X30 I2C addresses are 0x42 and 0x43. They are given as device addresses without the R/W bit. * In addition, MGC3X30 requires a dedicated transfer status line (TS), which features a * data transfer status function. The TS is used by both I2C Master and Slave to control * the data flow. I2C SCL, I2C SDA and TS lines require an open-drain connection on * MGC3X30 and the connected host controller. To function properly, I2C SCL and I2C * SDA need to be pulled up to VCC with 1.8 kΩ resistors and the TS line needs to be * pulled up to VCC with a 10 kΩ resistor. * * @param sda I2C sda signal * @param scl I2C scl signal * @param EI0 transfer status line * @param IS2 High->true, Low->false * */ MGC3130(PinName sda, PinName scl, PinName EI0, bool IS2); /** Get a sensor data payload from the device. * * @returns @SensorData NULL means data not avaliable * */ SensorData * readSensorData(); /** Set the system runtime parameters. * * @param para @Parameter and any RuntimeParameter classes * * @returns *0x0000 NoError OK *0x0001 UnknownCommand Message ID is unknown *0x0002 InvalidSessionId Session ID is invalid or does not match (0x0 is not allowed) (message Fw_Update_Start, Fw_Update_Completed) *0x0003 InvalidCrc CRC is invalid thrown by messages: Fw_Update_Block, Fw_Update_Start, Fw_Update_Completed *0x0004 InvalidLength Length is invalid (message Fw_Update_Block) *0x0005 InvalidAddress Address is invalid (message Fw_Update_Block) *0x0006 InvalidFunction Function-Id is invalid (message Fw_Update_Start, Fw_Update_Block, Fw_Update_Completed) *0x0008 ContentMismatch The VerifyOnly function found a mismatch between content and Flash memory (message: Fw_Update_Block) *0x000B WrongParameterAddr Parameter Start address, contained in the new Library FW to be loaded, does not match Library Loader assumption. The Library Update is therefore aborted. (message: Fw_Update_Start) *0x0014 WrongParameterValue The value of the Argument/Parameter of a RuntimeParameter command is out of the valid range (message: Request_Message and Set_Runtime_Parameter) *0x0015 UnknownParameterID The MessageID or RuntimeParameterID is unknown or out of the valid range (message: Request_Message and Set_Runtime_Parameter) *0x001A WakeupHappend A wake-up by Host was detected *0x0080 LoaderUpdateStarted The Library Loader update started *0x0081 LoaderUpdateFinished The Library Loader update finished */ int setRuntimeParameter(Parameter * para); }; #endif