1 #ifndef _CAYENNE_LPP_H_
2 #define _CAYENNE_LPP_H_
3 
4 // Adapted from https://developer.mbed.org/teams/myDevicesIoT/code/Cayenne-LPP
5 
6 //LPP_BATTERY = // TODO Unsupported in IPSO Smart Object
7 //LPP_PROXIMITY = // TODO Unsupported in IPSO Smart Object
8 
9 #define LPP_DIGITAL_INPUT       0       // 1 byte
10 #define LPP_DIGITAL_OUTPUT      1       // 1 byte
11 #define LPP_ANALOG_INPUT        2       // 2 bytes, 0.01 signed
12 #define LPP_ANALOG_OUTPUT       3       // 2 bytes, 0.01 signed
13 #define LPP_LUMINOSITY          101     // 2 bytes, 1 lux unsigned
14 #define LPP_PRESENCE            102     // 1 byte, 1
15 #define LPP_TEMPERATURE         103     // 2 bytes, 0.1°C signed
16 #define LPP_RELATIVE_HUMIDITY   104     // 1 byte, 0.5% unsigned
17 #define LPP_ACCELEROMETER       113     // 2 bytes per axis, 0.001G
18 #define LPP_BAROMETRIC_PRESSURE 115     // 2 bytes 0.1 hPa Unsigned
19 #define LPP_UNIXTIME			133		// 4 bytes, unsigned uint_32_t
20 #define LPP_GYROMETER           134     // 2 bytes per axis, 0.01 °/s
21 #define LPP_GPS                 136     // 3 byte lon/lat 0.0001 °, 3 bytes alt 0.01 meter
22 
23 
24 // Data ID + Data Type + Data Size
25 #define LPP_DIGITAL_INPUT_SIZE       3       // 1 byte
26 #define LPP_DIGITAL_OUTPUT_SIZE      3       // 1 byte
27 #define LPP_ANALOG_INPUT_SIZE        4       // 2 bytes, 0.01 signed
28 #define LPP_ANALOG_OUTPUT_SIZE       4       // 2 bytes, 0.01 signed
29 #define LPP_LUMINOSITY_SIZE          4       // 2 bytes, 1 lux unsigned
30 #define LPP_PRESENCE_SIZE            3       // 1 byte, 1
31 #define LPP_TEMPERATURE_SIZE         4       // 2 bytes, 0.1°C signed
32 #define LPP_RELATIVE_HUMIDITY_SIZE   3       // 1 byte, 0.5% unsigned
33 #define LPP_ACCELEROMETER_SIZE       8       // 2 bytes per axis, 0.001G
34 #define LPP_BAROMETRIC_PRESSURE_SIZE 4       // 2 bytes 0.1 hPa Unsigned
35 #define LPP_UNIXTIME_SIZE			 6		 // 4 bytes, unsigned uint_32_t
36 #define LPP_GYROMETER_SIZE           8       // 2 bytes per axis, 0.01 °/s
37 #define LPP_GPS_SIZE                 11      // 3 byte lon/lat 0.0001 °, 3 bytes alt 0.01 meter
38 
39 
40 class CayenneLPP {
41     public:
42         CayenneLPP(uint8_t size);
43         ~CayenneLPP();
44 
45         void reset(void);
46         uint8_t getSize(void);
47         uint8_t* getBuffer(void);
48         uint8_t copy(uint8_t* buffer);
49 
50         uint8_t addDigitalInput(uint8_t channel, uint8_t value);
51         uint8_t addDigitalOutput(uint8_t channel, uint8_t value);
52 
53         uint8_t addAnalogInput(uint8_t channel, float value);
54         uint8_t addAnalogOutput(uint8_t channel, float value);
55 
56         uint8_t addLuminosity(uint8_t channel, uint16_t lux);
57         uint8_t addPresence(uint8_t channel, uint8_t value);
58         uint8_t addTemperature(uint8_t channel, float celsius);
59         uint8_t addRelativeHumidity(uint8_t channel, float rh);
60         uint8_t addAccelerometer(uint8_t channel, float x, float y, float z);
61         uint8_t addBarometricPressure(uint8_t channel, float hpa);
62         uint8_t addGyrometer(uint8_t channel, float x, float y, float z);
63         uint8_t addGPS(uint8_t channel, float latitude, float longitude, float meters);
64 
65     private:
66         uint8_t *buffer;
67         uint8_t maxsize;
68         uint8_t cursor;
69 
70 
71 };
72 
73 
74 #endif