ESP32-PaxCounter/include/payload.h

91 lines
2.5 KiB
C
Raw Normal View History

2018-06-16 13:18:36 +02:00
#ifndef _PAYLOAD_H_
#define _PAYLOAD_H_
2018-07-21 17:14:27 +02:00
// MyDevices CayenneLPP channels for dynamic sensor payload format
#if (PAYLOAD_ENCODER == 3)
2018-07-21 22:44:25 +02:00
2018-06-17 01:15:02 +02:00
#define LPP_GPS_CHANNEL 20
#define LPP_COUNT_WIFI_CHANNEL 21
#define LPP_COUNT_BLE_CHANNEL 22
#define LPP_BATT_CHANNEL 23
2018-07-21 18:25:03 +02:00
#define LPP_BUTTON_CHANNEL 24
2018-06-17 01:15:02 +02:00
#define LPP_ADR_CHANNEL 25
#define LPP_TEMPERATURE_CHANNEL 26
#define LPP_ALARM_CHANNEL 27
#define LPP_MSG_CHANNEL 28
#define LPP_HUMIDITY_CHANNEL 29
#define LPP_BAROMETER_CHANNEL 30
2018-11-25 19:16:31 +01:00
#define LPP_AIR_CHANNEL 31
2018-07-21 17:14:27 +02:00
#endif
2018-07-21 13:36:49 +02:00
2018-06-17 01:15:02 +02:00
// MyDevices CayenneLPP types
#define LPP_GPS 136 // 3 byte lon/lat 0.0001 °, 3 bytes alt 0.01m
#define LPP_TEMPERATURE 103 // 2 bytes, 0.1°C signed MSB
2018-06-17 01:15:02 +02:00
#define LPP_DIGITAL_INPUT 0 // 1 byte
#define LPP_DIGITAL_OUTPUT 1 // 1 byte
#define LPP_ANALOG_INPUT 2 // 2 bytes, 0.01 signed
#define LPP_LUMINOSITY 101 // 2 bytes, 1 lux unsigned
2018-08-13 18:42:48 +02:00
#define LPP_PRESENCE 102 // 1 byte
#define LPP_HUMIDITY 104 // 1 byte, 0.5 % unsigned
#define LPP_BAROMETER 115 // 2 bytes, hPa unsigned MSB
2018-06-17 01:15:02 +02:00
2018-07-19 22:33:37 +02:00
class PayloadConvert {
2018-06-16 13:18:36 +02:00
public:
2018-07-19 22:33:37 +02:00
PayloadConvert(uint8_t size);
~PayloadConvert();
2018-06-16 13:18:36 +02:00
void reset(void);
uint8_t getSize(void);
uint8_t *getBuffer(void);
void addCount(uint16_t value1, uint16_t value2);
void addConfig(configData_t value);
2018-08-12 15:42:58 +02:00
void addStatus(uint16_t voltage, uint64_t uptime, float cputemp, uint32_t mem,
uint8_t reset1, uint8_t reset2);
void addAlarm(int8_t rssi, uint8_t message);
2018-11-27 11:21:20 +01:00
void addVoltage(uint16_t value);
2018-06-17 13:31:24 +02:00
void addGPS(gpsStatus_t value);
2018-11-14 23:10:59 +01:00
void addBME(bmeStatus_t value);
2018-07-21 18:25:03 +02:00
void addButton(uint8_t value);
void addSensor(uint8_t[]);
2018-07-21 18:25:03 +02:00
2018-07-19 22:33:37 +02:00
#if PAYLOAD_ENCODER == 1 // format plain
2018-06-16 13:18:36 +02:00
private:
uint8_t *buffer;
uint8_t cursor;
2018-07-19 22:33:37 +02:00
#elif PAYLOAD_ENCODER == 2 // format packed
2018-06-16 19:50:36 +02:00
private:
uint8_t *buffer;
2018-06-18 00:01:14 +02:00
uint8_t cursor;
2018-06-18 09:15:57 +02:00
void intToBytes(uint8_t pos, int32_t i, uint8_t byteSize);
void writeUptime(uint64_t unixtime);
2018-06-17 22:41:32 +02:00
void writeLatLng(double latitude, double longitude);
void writeUint32(uint32_t i);
2018-06-17 22:41:32 +02:00
void writeUint16(uint16_t i);
void writeUint8(uint8_t i);
2018-11-25 23:39:12 +01:00
void writeFloat(float value);
void writeUFloat(float value);
void writePressure(float value);
2018-09-17 17:23:02 +02:00
void writeVersion(char * version);
2018-06-17 22:41:32 +02:00
void writeBitmap(bool a, bool b, bool c, bool d, bool e, bool f, bool g,
bool h);
2018-06-16 19:50:36 +02:00
2018-07-21 17:14:27 +02:00
#elif (PAYLOAD_ENCODER == 3 || PAYLOAD_ENCODER == 4) // format cayenne lpp
private:
uint8_t *buffer;
uint8_t maxsize;
uint8_t cursor;
2018-07-19 22:33:37 +02:00
#else
#error "No valid payload converter defined"
2018-07-21 17:14:27 +02:00
#endif
2018-07-31 00:00:24 +02:00
};
2018-07-19 22:33:37 +02:00
extern PayloadConvert payload;
#endif // _PAYLOAD_H_