Cayenne-LPP avec NFC

Dependents:   er4_2022

Committer:
anthonyv
Date:
Fri Mar 12 08:12:27 2021 +0000
Revision:
7:8509fb453a2e
Parent:
6:5a9d65b33e85
Child:
8:2b94df050b00
Cayenne-LPP with NFC

Who changed what in which revision?

UserRevisionLine numberNew contents of line
eptak 0:15c6e1cab70a 1 #include "CayenneLPP.h"
eptak 0:15c6e1cab70a 2
anthonyv 7:8509fb453a2e 3 CayenneLPP::CayenneLPP(uint8_t size) : maxsize(size)
anthonyv 7:8509fb453a2e 4 {
eptak 0:15c6e1cab70a 5 buffer = (uint8_t*) malloc(size);
eptak 0:15c6e1cab70a 6 cursor = 0;
eptak 0:15c6e1cab70a 7 }
eptak 0:15c6e1cab70a 8
anthonyv 7:8509fb453a2e 9 CayenneLPP::~CayenneLPP(void)
anthonyv 7:8509fb453a2e 10 {
eptak 0:15c6e1cab70a 11 free(buffer);
eptak 0:15c6e1cab70a 12 }
eptak 0:15c6e1cab70a 13
anthonyv 7:8509fb453a2e 14 void CayenneLPP::reset(void)
anthonyv 7:8509fb453a2e 15 {
eptak 0:15c6e1cab70a 16 cursor = 0;
eptak 0:15c6e1cab70a 17 }
eptak 0:15c6e1cab70a 18
anthonyv 7:8509fb453a2e 19 uint8_t CayenneLPP::getSize(void)
anthonyv 7:8509fb453a2e 20 {
eptak 0:15c6e1cab70a 21 return cursor;
eptak 0:15c6e1cab70a 22 }
eptak 0:15c6e1cab70a 23
anthonyv 7:8509fb453a2e 24 uint8_t* CayenneLPP::getBuffer(void)
anthonyv 7:8509fb453a2e 25 {
eptak 0:15c6e1cab70a 26 // uint8_t[cursor] result;
eptak 0:15c6e1cab70a 27 // memcpy(result, buffer, cursor);
eptak 0:15c6e1cab70a 28 // return result;
eptak 0:15c6e1cab70a 29 return buffer;
eptak 0:15c6e1cab70a 30 }
eptak 0:15c6e1cab70a 31
anthonyv 7:8509fb453a2e 32 uint8_t CayenneLPP::copy(uint8_t* dst)
anthonyv 7:8509fb453a2e 33 {
eptak 0:15c6e1cab70a 34 memcpy(dst, buffer, cursor);
eptak 0:15c6e1cab70a 35 return cursor;
eptak 0:15c6e1cab70a 36 }
eptak 0:15c6e1cab70a 37
anthonyv 7:8509fb453a2e 38 uint8_t CayenneLPP::addDigitalInput(uint8_t channel, uint8_t value)
anthonyv 7:8509fb453a2e 39 {
eptak 0:15c6e1cab70a 40 if ((cursor + LPP_DIGITAL_INPUT_SIZE) > maxsize) {
eptak 0:15c6e1cab70a 41 return 0;
eptak 0:15c6e1cab70a 42 }
anthonyv 7:8509fb453a2e 43 buffer[cursor++] = channel;
anthonyv 7:8509fb453a2e 44 buffer[cursor++] = LPP_DIGITAL_INPUT;
anthonyv 7:8509fb453a2e 45 buffer[cursor++] = value;
eptak 0:15c6e1cab70a 46
eptak 0:15c6e1cab70a 47 return cursor;
eptak 0:15c6e1cab70a 48 }
eptak 0:15c6e1cab70a 49
anthonyv 7:8509fb453a2e 50 uint8_t CayenneLPP::addDigitalOutput(uint8_t channel, uint8_t value)
anthonyv 7:8509fb453a2e 51 {
eptak 0:15c6e1cab70a 52 if ((cursor + LPP_DIGITAL_OUTPUT_SIZE) > maxsize) {
eptak 0:15c6e1cab70a 53 return 0;
eptak 0:15c6e1cab70a 54 }
anthonyv 7:8509fb453a2e 55 buffer[cursor++] = channel;
anthonyv 7:8509fb453a2e 56 buffer[cursor++] = LPP_DIGITAL_OUTPUT;
anthonyv 7:8509fb453a2e 57 buffer[cursor++] = value;
eptak 0:15c6e1cab70a 58
eptak 0:15c6e1cab70a 59 return cursor;
eptak 0:15c6e1cab70a 60 }
eptak 0:15c6e1cab70a 61
anthonyv 7:8509fb453a2e 62 uint8_t CayenneLPP::addAnalogInput(uint8_t channel, float value)
anthonyv 7:8509fb453a2e 63 {
eptak 0:15c6e1cab70a 64 if ((cursor + LPP_ANALOG_INPUT_SIZE) > maxsize) {
eptak 0:15c6e1cab70a 65 return 0;
eptak 0:15c6e1cab70a 66 }
anthonyv 7:8509fb453a2e 67
eptak 0:15c6e1cab70a 68 int16_t val = value * 100;
anthonyv 7:8509fb453a2e 69 buffer[cursor++] = channel;
anthonyv 7:8509fb453a2e 70 buffer[cursor++] = LPP_ANALOG_INPUT;
anthonyv 7:8509fb453a2e 71 buffer[cursor++] = val >> 8;
anthonyv 7:8509fb453a2e 72 buffer[cursor++] = val;
eptak 0:15c6e1cab70a 73
eptak 0:15c6e1cab70a 74 return cursor;
eptak 0:15c6e1cab70a 75 }
eptak 0:15c6e1cab70a 76
anthonyv 7:8509fb453a2e 77 uint8_t CayenneLPP::addAnalogOutput(uint8_t channel, float value)
anthonyv 7:8509fb453a2e 78 {
eptak 0:15c6e1cab70a 79 if ((cursor + LPP_ANALOG_OUTPUT_SIZE) > maxsize) {
eptak 0:15c6e1cab70a 80 return 0;
eptak 0:15c6e1cab70a 81 }
eptak 0:15c6e1cab70a 82 int16_t val = value * 100;
anthonyv 7:8509fb453a2e 83 buffer[cursor++] = channel;
eptak 0:15c6e1cab70a 84 buffer[cursor++] = LPP_ANALOG_OUTPUT;
anthonyv 7:8509fb453a2e 85 buffer[cursor++] = val >> 8;
anthonyv 7:8509fb453a2e 86 buffer[cursor++] = val;
anthonyv 7:8509fb453a2e 87
eptak 0:15c6e1cab70a 88 return cursor;
eptak 0:15c6e1cab70a 89 }
eptak 0:15c6e1cab70a 90
anthonyv 7:8509fb453a2e 91 uint8_t CayenneLPP::addLuminosity(uint8_t channel, uint16_t lux)
anthonyv 7:8509fb453a2e 92 {
eptak 0:15c6e1cab70a 93 if ((cursor + LPP_LUMINOSITY_SIZE) > maxsize) {
eptak 0:15c6e1cab70a 94 return 0;
eptak 0:15c6e1cab70a 95 }
anthonyv 7:8509fb453a2e 96 buffer[cursor++] = channel;
anthonyv 7:8509fb453a2e 97 buffer[cursor++] = LPP_LUMINOSITY;
anthonyv 7:8509fb453a2e 98 buffer[cursor++] = lux >> 8;
anthonyv 7:8509fb453a2e 99 buffer[cursor++] = lux;
anthonyv 7:8509fb453a2e 100
anthonyv 7:8509fb453a2e 101 return cursor;
anthonyv 7:8509fb453a2e 102 }
anthonyv 7:8509fb453a2e 103
anthonyv 7:8509fb453a2e 104 uint8_t CayenneLPP::addPresence(uint8_t channel, uint8_t value)
anthonyv 7:8509fb453a2e 105 {
anthonyv 7:8509fb453a2e 106 if ((cursor + LPP_PRESENCE_SIZE) > maxsize) {
anthonyv 7:8509fb453a2e 107 return 0;
anthonyv 7:8509fb453a2e 108 }
anthonyv 7:8509fb453a2e 109 buffer[cursor++] = channel;
anthonyv 7:8509fb453a2e 110 buffer[cursor++] = LPP_PRESENCE;
anthonyv 7:8509fb453a2e 111 buffer[cursor++] = value;
eptak 0:15c6e1cab70a 112
eptak 0:15c6e1cab70a 113 return cursor;
eptak 0:15c6e1cab70a 114 }
eptak 0:15c6e1cab70a 115
anthonyv 7:8509fb453a2e 116
anthonyv 7:8509fb453a2e 117 uint8_t CayenneLPP::addNFC(uint8_t channel, char * NFC)
anthonyv 7:8509fb453a2e 118 {
anthonyv 7:8509fb453a2e 119 int index;
anthonyv 7:8509fb453a2e 120 buffer[cursor++] = channel;
anthonyv 7:8509fb453a2e 121 for (index=0; index <4; index++) {
anthonyv 7:8509fb453a2e 122 buffer[cursor++]=NFC[index] ;
eptak 0:15c6e1cab70a 123 }
eptak 0:15c6e1cab70a 124 return cursor;
eptak 0:15c6e1cab70a 125 }
eptak 0:15c6e1cab70a 126
anthonyv 7:8509fb453a2e 127
anthonyv 7:8509fb453a2e 128 uint8_t CayenneLPP::addTemperature(uint8_t channel, float celsius)
anthonyv 7:8509fb453a2e 129 {
eptak 0:15c6e1cab70a 130 if ((cursor + LPP_TEMPERATURE_SIZE) > maxsize) {
eptak 0:15c6e1cab70a 131 return 0;
eptak 0:15c6e1cab70a 132 }
eptak 0:15c6e1cab70a 133 int16_t val = celsius * 10;
anthonyv 7:8509fb453a2e 134 buffer[cursor++] = channel;
anthonyv 7:8509fb453a2e 135 buffer[cursor++] = LPP_TEMPERATURE;
anthonyv 7:8509fb453a2e 136 buffer[cursor++] = val >> 8;
anthonyv 7:8509fb453a2e 137 buffer[cursor++] = val;
eptak 0:15c6e1cab70a 138
eptak 0:15c6e1cab70a 139 return cursor;
eptak 0:15c6e1cab70a 140 }
eptak 0:15c6e1cab70a 141
anthonyv 7:8509fb453a2e 142 uint8_t CayenneLPP::addRelativeHumidity(uint8_t channel, float rh)
anthonyv 7:8509fb453a2e 143 {
eptak 0:15c6e1cab70a 144 if ((cursor + LPP_RELATIVE_HUMIDITY_SIZE) > maxsize) {
eptak 0:15c6e1cab70a 145 return 0;
eptak 0:15c6e1cab70a 146 }
anthonyv 7:8509fb453a2e 147 buffer[cursor++] = channel;
anthonyv 7:8509fb453a2e 148 buffer[cursor++] = LPP_RELATIVE_HUMIDITY;
anthonyv 7:8509fb453a2e 149 buffer[cursor++] = rh * 2;
eptak 0:15c6e1cab70a 150
eptak 0:15c6e1cab70a 151 return cursor;
eptak 0:15c6e1cab70a 152 }
eptak 0:15c6e1cab70a 153
anthonyv 7:8509fb453a2e 154 uint8_t CayenneLPP::addAccelerometer(uint8_t channel, float x, float y, float z)
anthonyv 7:8509fb453a2e 155 {
eptak 0:15c6e1cab70a 156 if ((cursor + LPP_ACCELEROMETER_SIZE) > maxsize) {
eptak 0:15c6e1cab70a 157 return 0;
eptak 0:15c6e1cab70a 158 }
eptak 0:15c6e1cab70a 159 int16_t vx = x * 1000;
eptak 0:15c6e1cab70a 160 int16_t vy = y * 1000;
eptak 0:15c6e1cab70a 161 int16_t vz = z * 1000;
anthonyv 7:8509fb453a2e 162
anthonyv 7:8509fb453a2e 163 buffer[cursor++] = channel;
anthonyv 7:8509fb453a2e 164 buffer[cursor++] = LPP_ACCELEROMETER;
anthonyv 7:8509fb453a2e 165 buffer[cursor++] = vx >> 8;
anthonyv 7:8509fb453a2e 166 buffer[cursor++] = vx;
anthonyv 7:8509fb453a2e 167 buffer[cursor++] = vy >> 8;
anthonyv 7:8509fb453a2e 168 buffer[cursor++] = vy;
anthonyv 7:8509fb453a2e 169 buffer[cursor++] = vz >> 8;
anthonyv 7:8509fb453a2e 170 buffer[cursor++] = vz;
eptak 0:15c6e1cab70a 171
eptak 0:15c6e1cab70a 172 return cursor;
eptak 0:15c6e1cab70a 173 }
eptak 0:15c6e1cab70a 174
anthonyv 7:8509fb453a2e 175 uint8_t CayenneLPP::addBarometricPressure(uint8_t channel, float hpa)
anthonyv 7:8509fb453a2e 176 {
eptak 0:15c6e1cab70a 177 if ((cursor + LPP_BAROMETRIC_PRESSURE_SIZE) > maxsize) {
eptak 0:15c6e1cab70a 178 return 0;
eptak 0:15c6e1cab70a 179 }
eptak 0:15c6e1cab70a 180 int16_t val = hpa * 10;
anthonyv 7:8509fb453a2e 181
anthonyv 7:8509fb453a2e 182 buffer[cursor++] = channel;
anthonyv 7:8509fb453a2e 183 buffer[cursor++] = LPP_BAROMETRIC_PRESSURE;
anthonyv 7:8509fb453a2e 184 buffer[cursor++] = val >> 8;
anthonyv 7:8509fb453a2e 185 buffer[cursor++] = val;
eptak 0:15c6e1cab70a 186
eptak 0:15c6e1cab70a 187 return cursor;
eptak 0:15c6e1cab70a 188 }
eptak 0:15c6e1cab70a 189
anthonyv 7:8509fb453a2e 190 uint8_t CayenneLPP::addGyrometer(uint8_t channel, float x, float y, float z)
anthonyv 7:8509fb453a2e 191 {
eptak 0:15c6e1cab70a 192 if ((cursor + LPP_GYROMETER_SIZE) > maxsize) {
eptak 0:15c6e1cab70a 193 return 0;
eptak 0:15c6e1cab70a 194 }
eptak 0:15c6e1cab70a 195 int16_t vx = x * 100;
eptak 0:15c6e1cab70a 196 int16_t vy = y * 100;
eptak 0:15c6e1cab70a 197 int16_t vz = z * 100;
anthonyv 7:8509fb453a2e 198
anthonyv 7:8509fb453a2e 199 buffer[cursor++] = channel;
anthonyv 7:8509fb453a2e 200 buffer[cursor++] = LPP_GYROMETER;
anthonyv 7:8509fb453a2e 201 buffer[cursor++] = vx >> 8;
anthonyv 7:8509fb453a2e 202 buffer[cursor++] = vx;
anthonyv 7:8509fb453a2e 203 buffer[cursor++] = vy >> 8;
anthonyv 7:8509fb453a2e 204 buffer[cursor++] = vy;
anthonyv 7:8509fb453a2e 205 buffer[cursor++] = vz >> 8;
anthonyv 7:8509fb453a2e 206 buffer[cursor++] = vz;
eptak 0:15c6e1cab70a 207
eptak 0:15c6e1cab70a 208 return cursor;
eptak 0:15c6e1cab70a 209 }
eptak 0:15c6e1cab70a 210
anthonyv 7:8509fb453a2e 211 uint8_t CayenneLPP::addGPS(uint8_t channel, float latitude, float longitude, float meters)
anthonyv 7:8509fb453a2e 212 {
eptak 0:15c6e1cab70a 213 if ((cursor + LPP_GPS_SIZE) > maxsize) {
eptak 0:15c6e1cab70a 214 return 0;
eptak 0:15c6e1cab70a 215 }
eptak 0:15c6e1cab70a 216 int32_t lat = latitude * 10000;
eptak 0:15c6e1cab70a 217 int32_t lon = longitude * 10000;
eptak 0:15c6e1cab70a 218 int32_t alt = meters * 100;
anthonyv 7:8509fb453a2e 219
anthonyv 7:8509fb453a2e 220 buffer[cursor++] = channel;
anthonyv 7:8509fb453a2e 221 buffer[cursor++] = LPP_GPS;
eptak 0:15c6e1cab70a 222
anthonyv 7:8509fb453a2e 223 buffer[cursor++] = lat >> 16;
anthonyv 7:8509fb453a2e 224 buffer[cursor++] = lat >> 8;
anthonyv 7:8509fb453a2e 225 buffer[cursor++] = lat;
anthonyv 7:8509fb453a2e 226 buffer[cursor++] = lon >> 16;
anthonyv 7:8509fb453a2e 227 buffer[cursor++] = lon >> 8;
anthonyv 7:8509fb453a2e 228 buffer[cursor++] = lon;
anthonyv 7:8509fb453a2e 229 buffer[cursor++] = alt >> 16;
eptak 0:15c6e1cab70a 230 buffer[cursor++] = alt >> 8;
eptak 0:15c6e1cab70a 231 buffer[cursor++] = alt;
eptak 0:15c6e1cab70a 232
eptak 0:15c6e1cab70a 233 return cursor;
eptak 0:15c6e1cab70a 234 }
eptak 0:15c6e1cab70a 235