ESP32-PaxCounter/src/senddata.cpp

101 lines
2.4 KiB
C++
Raw Normal View History

2018-07-14 19:12:20 +02:00
// Basic Config
2018-11-03 20:44:54 +01:00
#include "senddata.h"
2018-07-14 19:12:20 +02:00
2018-08-03 23:50:04 +02:00
// put data to send in RTos Queues used for transmit over channels Lora and SPI
void SendPayload(uint8_t port) {
2018-08-04 14:37:41 +02:00
2018-11-18 12:09:18 +01:00
MessageBuffer_t SendBuffer; // contains MessageSize, MessagePort, Message[]
SendBuffer.MessageSize = payload.getSize();
SendBuffer.MessagePort = PAYLOAD_ENCODER <= 2
? port
: (PAYLOAD_ENCODER == 4 ? LPP2PORT : LPP1PORT);
memcpy(SendBuffer.Message, payload.getBuffer(), payload.getSize());
2018-08-04 14:37:41 +02:00
2018-11-03 20:29:02 +01:00
// enqueue message in device's send queues
2018-11-17 22:49:14 +01:00
lora_enqueuedata(&SendBuffer);
spi_enqueuedata(&SendBuffer);
2018-08-04 14:37:41 +02:00
} // SendPayload
2018-08-04 14:37:41 +02:00
2018-09-21 18:23:34 +02:00
// interrupt triggered function to prepare payload to send
void sendCounter() {
2018-11-19 00:41:15 +01:00
uint8_t bitmask = cfg.payloadmask;
uint8_t mask = 1;
2018-08-04 14:37:41 +02:00
2018-11-19 00:41:15 +01:00
while (bitmask) {
switch (bitmask & mask) {
2018-11-17 22:49:14 +01:00
2018-11-19 00:41:15 +01:00
case COUNT_DATA:
payload.reset();
2018-11-19 00:41:15 +01:00
payload.addCount(macs_wifi, cfg.blescan ? macs_ble : 0);
SendPayload(COUNTERPORT);
// clear counter if not in cumulative counter mode
if (cfg.countermode != 1) {
reset_counters(); // clear macs container and reset all counters
get_salt(); // get new salt for salting hashes
ESP_LOGI(TAG, "Counter cleared");
}
break;
#ifdef HAS_BME
case MEMS_DATA:
payload.reset();
2018-11-19 00:41:15 +01:00
payload.addBME(bme_status);
SendPayload(BMEPORT);
break;
#endif
2018-11-19 00:41:15 +01:00
#ifdef HAS_GPS
case GPS_DATA:
2018-11-19 00:41:15 +01:00
// send GPS position only if we have a fix
if (gps.location.isValid()) {
gps_read();
payload.reset();
2018-11-19 00:41:15 +01:00
payload.addGPS(gps_status);
SendPayload(GPSPORT);
} else
ESP_LOGD(TAG, "No valid GPS position");
break;
2018-11-19 00:41:15 +01:00
#endif
#ifdef HAS_SENSORS
case SENSOR1_DATA:
payload.reset();
payload.addSensor(sensor_read(1));
SendPayload(SENSOR1PORT);
break;
case SENSOR2_DATA:
payload.reset();
payload.addSensor(sensor_read(2));
SendPayload(SENSOR2PORT);
break;
case SENSOR3_DATA:
payload.reset();
payload.addSensor(sensor_read(3));
SendPayload(SENSOR3PORT);
2018-11-19 00:41:15 +01:00
break;
case SENSOR4_DATA:
payload.reset();
payload.addSensor(sensor_read(4));
SendPayload(SENSOR4PORT);
break;
#endif
2018-11-19 00:41:15 +01:00
} // switch
bitmask &= ~mask;
mask <<= 1;
} // while (bitmask)
} // sendCounter()
2018-08-04 14:37:41 +02:00
2018-08-05 12:16:54 +02:00
void flushQueues() {
2018-11-03 20:29:02 +01:00
lora_queuereset();
spi_queuereset();
2018-08-05 12:16:54 +02:00
}