From e2c975178a97da03d07e414da5ccd42c73d266d4 Mon Sep 17 00:00:00 2001 From: Klaus K Wilting Date: Sun, 25 Nov 2018 19:16:31 +0100 Subject: [PATCH 1/5] payload converter fixes --- include/payload.h | 6 +++--- platformio.ini | 7 +++---- src/TTN/packed_decoder.js | 22 +++++++++++----------- src/payload.cpp | 25 +++++++++++++------------ 4 files changed, 30 insertions(+), 30 deletions(-) diff --git a/include/payload.h b/include/payload.h index 91bf3778..2fce0fff 100644 --- a/include/payload.h +++ b/include/payload.h @@ -15,7 +15,7 @@ #define LPP_MSG_CHANNEL 28 #define LPP_HUMIDITY_CHANNEL 29 #define LPP_BAROMETER_CHANNEL 30 -#define LPP_GAS_CHANNEL 31 +#define LPP_AIR_CHANNEL 31 #endif @@ -66,8 +66,8 @@ private: void writeUint32(uint32_t i); void writeUint16(uint16_t i); void writeUint8(uint8_t i); - void writeHumidity(float humidity); - void writeTemperature(float temperature); + void writeFloat(float humidity); + void writeUFloat(float temperature); void writeVersion(char * version); void writeBitmap(bool a, bool b, bool c, bool d, bool e, bool f, bool g, bool h); diff --git a/platformio.ini b/platformio.ini index 69d42cb9..08731c11 100644 --- a/platformio.ini +++ b/platformio.ini @@ -29,21 +29,20 @@ description = Paxcounter is a proof-of-concept ESP32 device for metering passeng [common] ; for release_version use max. 10 chars total, use any decimal format like "a.b.c" -release_version = 1.6.85 +release_version = 1.6.86 ; DEBUG LEVEL: For production run set to 0, otherwise device will leak RAM while running! ; 0=None, 1=Error, 2=Warn, 3=Info, 4=Debug, 5=Verbose -debug_level = 0 +debug_level = 3 ; UPLOAD MODE: select esptool to flash via USB/UART, select custom to upload to cloud for OTA upload_protocol = esptool ;upload_protocol = custom extra_scripts = pre:build.py keyfile = ota.conf -;platform_espressif32 = espressif32@1.5.0 platform_espressif32 = https://github.com/platformio/platform-espressif32.git#a7b1fe6 board_build.partitions = min_spiffs.csv monitor_speed = 115200 lib_deps_lora = -; MCCI LoRaWAN LMIC library@^2.2.2 +; MCCI LoRaWAN LMIC library@2.3.0 lib_deps_display = U8g2@>=2.25.0 lib_deps_rgbled = diff --git a/src/TTN/packed_decoder.js b/src/TTN/packed_decoder.js index 0571bfa0..46ac91c2 100644 --- a/src/TTN/packed_decoder.js +++ b/src/TTN/packed_decoder.js @@ -43,7 +43,7 @@ function Decoder(bytes, port) { if (port === 7) { // BME680 sensor data - return decode(bytes, [temperature, uint16, humidity, uint16], ['temperature', 'pressure', 'humidity', 'air']); + return decode(bytes, [float, ufloat, ufloat, ufloat], ['temperature', 'pressure', 'humidity', 'air']); } } @@ -116,9 +116,9 @@ var hdop = function (bytes) { }; hdop.BYTES = 2; -var temperature = function (bytes) { - if (bytes.length !== temperature.BYTES) { - throw new Error('Temperature must have exactly 2 bytes'); +var float = function (bytes) { + if (bytes.length !== float.BYTES) { + throw new Error('Float must have exactly 2 bytes'); } var isNegative = bytes[0] & 0x80; var b = ('00000000' + Number(bytes[0]).toString(2)).slice(-8) @@ -139,17 +139,17 @@ var temperature = function (bytes) { } return +(t / 100).toFixed(1); }; -temperature.BYTES = 2; +float.BYTES = 2; -var humidity = function (bytes) { - if (bytes.length !== humidity.BYTES) { - throw new Error('Humidity must have exactly 2 bytes'); +var ufloat = function (bytes) { + if (bytes.length !== ufloat.BYTES) { + throw new Error('Ufloat must have exactly 2 bytes'); } var h = bytesToInt(bytes); return +(h / 100).toFixed(1); }; -humidity.BYTES = 2; +ufloat.BYTES = 2; var bitmap = function (byte) { if (byte.length !== bitmap.BYTES) { @@ -193,8 +193,8 @@ if (typeof module === 'object' && typeof module.exports !== 'undefined') { uint16: uint16, uint32: uint32, uptime: uptime, - temperature: temperature, - humidity: humidity, + float: float, + ufloat: ufloat, latLng: latLng, hdop: hdop, bitmap: bitmap, diff --git a/src/payload.cpp b/src/payload.cpp index 301034f2..14991e96 100644 --- a/src/payload.cpp +++ b/src/payload.cpp @@ -104,15 +104,16 @@ void PayloadConvert::addBME(bmeStatus_t value) { #ifdef HAS_BME int16_t temperature = (int16_t)(value.temperature); // float -> int uint16_t humidity = (uint16_t)(value.humidity); // float -> int + uint16_t pressure = (uint16_t)(value.pressure); // float -> int uint16_t iaq = (uint16_t)(value.iaq); // float -> int buffer[cursor++] = highByte(temperature); buffer[cursor++] = lowByte(temperature); - buffer[cursor++] = highByte(value.pressure); - buffer[cursor++] = lowByte(value.pressure); + buffer[cursor++] = highByte(pressure); + buffer[cursor++] = lowByte(pressure); buffer[cursor++] = highByte(humidity); buffer[cursor++] = lowByte(humidity); - buffer[cursor++] = highByte(value.iaq); - buffer[cursor++] = lowByte(value.iaq); + buffer[cursor++] = highByte(iaq); + buffer[cursor++] = lowByte(iaq); #endif } @@ -192,10 +193,10 @@ void PayloadConvert::addSensor(uint8_t buf[]) { void PayloadConvert::addBME(bmeStatus_t value) { #ifdef HAS_BME - writeTemperature(value.temperature); - writeUint16(value.pressure); - writeHumidity(value.humidity); - writeUint16(value.iaq); + writeFloat(value.temperature); + writeUFloat(value.pressure); + writeUFloat(value.humidity); + writeUFloat(value.iaq); #endif } @@ -232,7 +233,7 @@ void PayloadConvert::writeUint16(uint16_t i) { intToBytes(cursor, i, 2); } void PayloadConvert::writeUint8(uint8_t i) { intToBytes(cursor, i, 1); } -void PayloadConvert::writeHumidity(float humidity) { +void PayloadConvert::writeUFloat(float humidity) { int16_t h = (int16_t)(humidity * 100); intToBytes(cursor, h, 2); } @@ -241,7 +242,7 @@ void PayloadConvert::writeHumidity(float humidity) { * Uses a 16bit two's complement with two decimals, so the range is * -327.68 to +327.67 degrees */ -void PayloadConvert::writeTemperature(float temperature) { +void PayloadConvert::writeFloat(float temperature) { int16_t t = (int16_t)(temperature * 100); if (temperature < 0) { t = ~-t; @@ -375,7 +376,7 @@ void PayloadConvert::addBME(bmeStatus_t value) { // 0.5% per bit => 0 .. 128 %C uint8_t humidity = (uint8_t)(value.humidity * 2.0); // 0.01 IAQ per bit => 0 .. 655,36 IAQ - uint16_t iaq = (uint16_t) value.iaq * 100; + uint16_t iaq = (uint16_t)value.iaq * 100; #if (PAYLOAD_ENCODER == 3) buffer[cursor++] = LPP_TEMPERATURE_CHANNEL; @@ -395,7 +396,7 @@ void PayloadConvert::addBME(bmeStatus_t value) { buffer[cursor++] = LPP_HUMIDITY; // 1 byte 0.5 % Unsigned buffer[cursor++] = humidity; #if (PAYLOAD_ENCODER == 3) - buffer[cursor++] = LPP_GAS_CHANNEL; + buffer[cursor++] = LPP_AIR_CHANNEL; #endif buffer[cursor++] = LPP_ANALOG_INPUT; // 2 bytes 0.01 Signed buffer[cursor++] = highByte(iaq); From f024361c1934900628ce82d77ddb572b75326f6f Mon Sep 17 00:00:00 2001 From: Klaus K Wilting Date: Sun, 25 Nov 2018 20:56:14 +0100 Subject: [PATCH 2/5] BSEC configuration --- include/bme680mems.h | 2 + .../generic_18v_300s_28d/bsec_iaq.config | Bin 458 -> 0 bytes .../config/generic_18v_300s_28d/bsec_iaq.csv | 1 - .../bsec_serialized_configurations_iaq.c | 5 - .../bsec_serialized_configurations_iaq.h | 4 - .../generic_18v_300s_4d/bsec_iaq.config | Bin 458 -> 0 bytes .../config/generic_18v_300s_4d/bsec_iaq.csv | 1 - .../bsec_serialized_configurations_iaq.c | 5 - .../bsec_serialized_configurations_iaq.h | 4 - .../config/generic_18v_3s_28d/bsec_iaq.config | Bin 458 -> 0 bytes .../config/generic_18v_3s_28d/bsec_iaq.csv | 1 - .../bsec_serialized_configurations_iaq.c | 5 - .../bsec_serialized_configurations_iaq.h | 4 - .../config/generic_18v_3s_4d/bsec_iaq.config | Bin 458 -> 0 bytes .../config/generic_18v_3s_4d/bsec_iaq.csv | 1 - .../bsec_serialized_configurations_iaq.c | 5 - .../bsec_serialized_configurations_iaq.h | 4 - .../generic_33v_300s_28d/bsec_iaq.config | Bin 458 -> 0 bytes .../config/generic_33v_300s_28d/bsec_iaq.csv | 1 - .../bsec_serialized_configurations_iaq.c | 5 - .../bsec_serialized_configurations_iaq.h | 4 - .../generic_33v_300s_4d/bsec_iaq.config | Bin 458 -> 0 bytes .../config/generic_33v_300s_4d/bsec_iaq.csv | 1 - .../bsec_serialized_configurations_iaq.c | 5 - .../bsec_serialized_configurations_iaq.h | 4 - .../config/generic_33v_3s_28d/bsec_iaq.config | Bin 458 -> 0 bytes .../config/generic_33v_3s_28d/bsec_iaq.csv | 1 - .../bsec_serialized_configurations_iaq.c | 5 - .../bsec_serialized_configurations_iaq.h | 4 - .../config/generic_33v_3s_4d/bsec_iaq.config | Bin 458 -> 0 bytes .../config/generic_33v_3s_4d/bsec_iaq.csv | 1 - .../bsec_serialized_configurations_iaq.c | 5 - .../bsec_serialized_configurations_iaq.h | 4 - .../docs/BSEC_Binary_Size_Information.pdf | Bin 215302 -> 0 bytes lib/Bosch-BSEC/examples/bsec_integration.c | 559 ------------------ lib/Bosch-BSEC/examples/bsec_integration.h | 165 ------ lib/Bosch-BSEC/examples/bsec_iot_example.c | 258 -------- lib/Bosch-BSEC/examples/bsec_iot_example.ino | 291 --------- .../examples/bsec_iot_ulp_plus_example.c | 290 --------- .../examples/bsec_iot_ulp_plus_example.ino | 342 ----------- lib/Bosch-BSEC/libalgobsec.a.Size.log | 2 - src/bme680mems.cpp | 51 +- src/lorawan.cpp | 16 +- src/paxcounter.conf | 2 +- src/sensor.cpp | 16 +- 45 files changed, 68 insertions(+), 2006 deletions(-) delete mode 100644 lib/Bosch-BSEC/config/generic_18v_300s_28d/bsec_iaq.config delete mode 100644 lib/Bosch-BSEC/config/generic_18v_300s_28d/bsec_iaq.csv delete mode 100644 lib/Bosch-BSEC/config/generic_18v_300s_28d/bsec_serialized_configurations_iaq.c delete mode 100644 lib/Bosch-BSEC/config/generic_18v_300s_28d/bsec_serialized_configurations_iaq.h delete mode 100644 lib/Bosch-BSEC/config/generic_18v_300s_4d/bsec_iaq.config delete mode 100644 lib/Bosch-BSEC/config/generic_18v_300s_4d/bsec_iaq.csv delete mode 100644 lib/Bosch-BSEC/config/generic_18v_300s_4d/bsec_serialized_configurations_iaq.c delete mode 100644 lib/Bosch-BSEC/config/generic_18v_300s_4d/bsec_serialized_configurations_iaq.h delete mode 100644 lib/Bosch-BSEC/config/generic_18v_3s_28d/bsec_iaq.config delete mode 100644 lib/Bosch-BSEC/config/generic_18v_3s_28d/bsec_iaq.csv delete mode 100644 lib/Bosch-BSEC/config/generic_18v_3s_28d/bsec_serialized_configurations_iaq.c delete mode 100644 lib/Bosch-BSEC/config/generic_18v_3s_28d/bsec_serialized_configurations_iaq.h delete mode 100644 lib/Bosch-BSEC/config/generic_18v_3s_4d/bsec_iaq.config delete mode 100644 lib/Bosch-BSEC/config/generic_18v_3s_4d/bsec_iaq.csv delete mode 100644 lib/Bosch-BSEC/config/generic_18v_3s_4d/bsec_serialized_configurations_iaq.c delete mode 100644 lib/Bosch-BSEC/config/generic_18v_3s_4d/bsec_serialized_configurations_iaq.h delete mode 100644 lib/Bosch-BSEC/config/generic_33v_300s_28d/bsec_iaq.config delete mode 100644 lib/Bosch-BSEC/config/generic_33v_300s_28d/bsec_iaq.csv delete mode 100644 lib/Bosch-BSEC/config/generic_33v_300s_28d/bsec_serialized_configurations_iaq.c delete mode 100644 lib/Bosch-BSEC/config/generic_33v_300s_28d/bsec_serialized_configurations_iaq.h delete mode 100644 lib/Bosch-BSEC/config/generic_33v_300s_4d/bsec_iaq.config delete mode 100644 lib/Bosch-BSEC/config/generic_33v_300s_4d/bsec_iaq.csv delete mode 100644 lib/Bosch-BSEC/config/generic_33v_300s_4d/bsec_serialized_configurations_iaq.c delete mode 100644 lib/Bosch-BSEC/config/generic_33v_300s_4d/bsec_serialized_configurations_iaq.h delete mode 100644 lib/Bosch-BSEC/config/generic_33v_3s_28d/bsec_iaq.config delete mode 100644 lib/Bosch-BSEC/config/generic_33v_3s_28d/bsec_iaq.csv delete mode 100644 lib/Bosch-BSEC/config/generic_33v_3s_28d/bsec_serialized_configurations_iaq.c delete mode 100644 lib/Bosch-BSEC/config/generic_33v_3s_28d/bsec_serialized_configurations_iaq.h delete mode 100644 lib/Bosch-BSEC/config/generic_33v_3s_4d/bsec_iaq.config delete mode 100644 lib/Bosch-BSEC/config/generic_33v_3s_4d/bsec_iaq.csv delete mode 100644 lib/Bosch-BSEC/config/generic_33v_3s_4d/bsec_serialized_configurations_iaq.c delete mode 100644 lib/Bosch-BSEC/config/generic_33v_3s_4d/bsec_serialized_configurations_iaq.h delete mode 100644 lib/Bosch-BSEC/docs/BSEC_Binary_Size_Information.pdf delete mode 100644 lib/Bosch-BSEC/examples/bsec_integration.c delete mode 100644 lib/Bosch-BSEC/examples/bsec_integration.h delete mode 100644 lib/Bosch-BSEC/examples/bsec_iot_example.c delete mode 100644 lib/Bosch-BSEC/examples/bsec_iot_example.ino delete mode 100644 lib/Bosch-BSEC/examples/bsec_iot_ulp_plus_example.c delete mode 100644 lib/Bosch-BSEC/examples/bsec_iot_ulp_plus_example.ino delete mode 100644 lib/Bosch-BSEC/libalgobsec.a.Size.log diff --git a/include/bme680mems.h b/include/bme680mems.h index 4828a063..70dd8fec 100644 --- a/include/bme680mems.h +++ b/include/bme680mems.h @@ -5,6 +5,8 @@ #include #include "bsec_integration.h" +extern const uint8_t bsec_config_iaq[454]; + extern bmeStatus_t bme_status; // Make struct for storing gps data globally available extern TaskHandle_t BmeTask; diff --git a/lib/Bosch-BSEC/config/generic_18v_300s_28d/bsec_iaq.config b/lib/Bosch-BSEC/config/generic_18v_300s_28d/bsec_iaq.config deleted file mode 100644 index f6c7b918f3b95beb55d121534326599c71eedbb7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 458 zcmX@c$iTqJ&cbNR00HZOd;VFh50B$49f&Y2OyllXiy4)DGVTp wV1rl?F=SB)8zip7h#PXS - -extern const uint8_t bsec_config_iaq[454]; - diff --git a/lib/Bosch-BSEC/config/generic_18v_300s_4d/bsec_iaq.config b/lib/Bosch-BSEC/config/generic_18v_300s_4d/bsec_iaq.config deleted file mode 100644 index b0fff47ac22c6b3f89d7ec2b0b35e9fb8a5204fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 458 zcmX@c$iTqJ&cbNR00HZOd;*t#zVC* z$S^Q5FnnQr$RNqU(BQzppx`(GXi9-2P~KjEfti8p`eGZd>&n(3%*ntC*2WmYz{$Y= zVH(U{2AP_Nwk8eN?HL#r0F8ivvuAkh(yyx9J+t>Y027<|)@J{2D+l|H0nH9DvDkl) z?aXXi_X8d4z{9`=6J~hI@Q;Csk=39yg+Yh0KzurT3-eKi7?uf)4nR18(V!FpQy4%H w!3MD)V#uNpHb`8D5jW&u#|;a_al`*maEBEHAshq?CW}cMl!APF_&);!0B5g)-~a#s diff --git a/lib/Bosch-BSEC/config/generic_18v_300s_4d/bsec_iaq.csv b/lib/Bosch-BSEC/config/generic_18v_300s_4d/bsec_iaq.csv deleted file mode 100644 index 318c0691..00000000 --- a/lib/Bosch-BSEC/config/generic_18v_300s_4d/bsec_iaq.csv +++ /dev/null @@ -1 +0,0 @@ -454,1,7,4,1,61,0,0,0,0,0,0,0,174,1,0,0,48,0,1,0,137,65,0,63,205,204,204,62,0,0,64,63,205,204,204,62,0,0,225,68,0,192,168,71,64,49,119,76,0,0,0,0,0,80,5,95,0,0,0,0,0,0,0,0,28,0,2,0,0,244,1,225,0,25,0,0,128,64,0,0,32,65,144,1,0,0,112,65,0,0,0,63,16,0,3,0,10,215,163,60,10,215,35,59,10,215,35,59,9,0,5,0,0,0,0,0,1,88,0,9,0,7,240,150,61,0,0,0,0,0,0,0,0,28,124,225,61,52,128,215,63,0,0,160,64,0,0,0,0,0,0,0,0,205,204,12,62,103,213,39,62,230,63,76,192,0,0,0,0,0,0,0,0,145,237,60,191,251,58,64,63,177,80,131,64,0,0,0,0,0,0,0,0,93,254,227,62,54,60,133,191,0,0,64,64,12,0,10,0,0,0,0,0,0,0,0,0,229,0,254,0,2,1,5,48,117,100,0,44,1,112,23,151,7,132,3,197,0,92,4,144,1,64,1,64,1,144,1,48,117,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,48,117,48,117,100,0,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,100,0,100,0,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,255,255,255,255,255,255,255,255,220,5,220,5,220,5,255,255,255,255,255,255,220,5,220,5,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,117,0,0,0,0,195,255,0,0 diff --git a/lib/Bosch-BSEC/config/generic_18v_300s_4d/bsec_serialized_configurations_iaq.c b/lib/Bosch-BSEC/config/generic_18v_300s_4d/bsec_serialized_configurations_iaq.c deleted file mode 100644 index 85884b30..00000000 --- a/lib/Bosch-BSEC/config/generic_18v_300s_4d/bsec_serialized_configurations_iaq.c +++ /dev/null @@ -1,5 +0,0 @@ -#include "bsec_serialized_configurations_iaq.h" - -const uint8_t bsec_config_iaq[454] = - {1,7,4,1,61,0,0,0,0,0,0,0,174,1,0,0,48,0,1,0,137,65,0,63,205,204,204,62,0,0,64,63,205,204,204,62,0,0,225,68,0,192,168,71,64,49,119,76,0,0,0,0,0,80,5,95,0,0,0,0,0,0,0,0,28,0,2,0,0,244,1,225,0,25,0,0,128,64,0,0,32,65,144,1,0,0,112,65,0,0,0,63,16,0,3,0,10,215,163,60,10,215,35,59,10,215,35,59,9,0,5,0,0,0,0,0,1,88,0,9,0,7,240,150,61,0,0,0,0,0,0,0,0,28,124,225,61,52,128,215,63,0,0,160,64,0,0,0,0,0,0,0,0,205,204,12,62,103,213,39,62,230,63,76,192,0,0,0,0,0,0,0,0,145,237,60,191,251,58,64,63,177,80,131,64,0,0,0,0,0,0,0,0,93,254,227,62,54,60,133,191,0,0,64,64,12,0,10,0,0,0,0,0,0,0,0,0,229,0,254,0,2,1,5,48,117,100,0,44,1,112,23,151,7,132,3,197,0,92,4,144,1,64,1,64,1,144,1,48,117,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,48,117,48,117,100,0,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,100,0,100,0,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,255,255,255,255,255,255,255,255,220,5,220,5,220,5,255,255,255,255,255,255,220,5,220,5,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,117,0,0,0,0,195,255,0,0}; - diff --git a/lib/Bosch-BSEC/config/generic_18v_300s_4d/bsec_serialized_configurations_iaq.h b/lib/Bosch-BSEC/config/generic_18v_300s_4d/bsec_serialized_configurations_iaq.h deleted file mode 100644 index 1986e2be..00000000 --- a/lib/Bosch-BSEC/config/generic_18v_300s_4d/bsec_serialized_configurations_iaq.h +++ /dev/null @@ -1,4 +0,0 @@ -#include - -extern const uint8_t bsec_config_iaq[454]; - diff --git a/lib/Bosch-BSEC/config/generic_18v_3s_28d/bsec_iaq.config b/lib/Bosch-BSEC/config/generic_18v_3s_28d/bsec_iaq.config deleted file mode 100644 index 3a2fcdf2dc3646d6db0f936d2c9dcaf25e06fa31..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 458 zcmX@c$iTqJ&cbNR00HZOd;VFh50B$49f&Y2OyllXiy4)DGVTp xV1rl?F=SB)8zip7h#PXS - -extern const uint8_t bsec_config_iaq[454]; - diff --git a/lib/Bosch-BSEC/config/generic_18v_3s_4d/bsec_iaq.config b/lib/Bosch-BSEC/config/generic_18v_3s_4d/bsec_iaq.config deleted file mode 100644 index 7bd1e535ac45b2dffd805d568ea0e9e683008987..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 458 zcmX@c$iTqJ&cbNR00HZOd;*t#zVC* z$S^Q5FnnQr$RNqU(BQzppx`(GXi9-2P~KjEfti8p`eGZd>&n(3%*ntC*2WmYz{$Y= zVH(U{2AP_Nwk8eN?HL#r0F8ivvuAkh(yyx9J+t>Y027<|)@J{2D+l|H0nH9DvDkl) z?aXXi_X8d4z{9`=6J~hI@Q;Csk=39yg+Yh0KzurT3-eKi7?uf)4nR18(V!FpQy4%H x!3MD)V#uNpHb`8D5jW&u#|;a_al`*maEBEHAshq?CW}ey07IIAA@Cam0{~%=f$abQ diff --git a/lib/Bosch-BSEC/config/generic_18v_3s_4d/bsec_iaq.csv b/lib/Bosch-BSEC/config/generic_18v_3s_4d/bsec_iaq.csv deleted file mode 100644 index 5eeae615..00000000 --- a/lib/Bosch-BSEC/config/generic_18v_3s_4d/bsec_iaq.csv +++ /dev/null @@ -1 +0,0 @@ -454,1,7,4,1,61,0,0,0,0,0,0,0,174,1,0,0,48,0,1,0,137,65,0,63,205,204,204,62,0,0,64,63,205,204,204,62,0,0,225,68,0,192,168,71,64,49,119,76,0,0,0,0,0,80,5,95,0,0,0,0,0,0,0,0,28,0,2,0,0,244,1,225,0,25,0,0,128,64,0,0,32,65,144,1,0,0,112,65,0,0,0,63,16,0,3,0,10,215,163,60,10,215,35,59,10,215,35,59,9,0,5,0,0,0,0,0,1,88,0,9,0,7,240,150,61,0,0,0,0,0,0,0,0,28,124,225,61,52,128,215,63,0,0,160,64,0,0,0,0,0,0,0,0,205,204,12,62,103,213,39,62,230,63,76,192,0,0,0,0,0,0,0,0,145,237,60,191,251,58,64,63,177,80,131,64,0,0,0,0,0,0,0,0,93,254,227,62,54,60,133,191,0,0,64,64,12,0,10,0,0,0,0,0,0,0,0,0,229,0,254,0,2,1,5,48,117,100,0,44,1,112,23,151,7,132,3,197,0,92,4,144,1,64,1,64,1,144,1,48,117,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,48,117,48,117,100,0,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,100,0,100,0,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,255,255,255,255,255,255,255,255,220,5,220,5,220,5,255,255,255,255,255,255,220,5,220,5,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,44,1,0,0,0,0,81,246,0,0 diff --git a/lib/Bosch-BSEC/config/generic_18v_3s_4d/bsec_serialized_configurations_iaq.c b/lib/Bosch-BSEC/config/generic_18v_3s_4d/bsec_serialized_configurations_iaq.c deleted file mode 100644 index 625cdc4e..00000000 --- a/lib/Bosch-BSEC/config/generic_18v_3s_4d/bsec_serialized_configurations_iaq.c +++ /dev/null @@ -1,5 +0,0 @@ -#include "bsec_serialized_configurations_iaq.h" - -const uint8_t bsec_config_iaq[454] = - {1,7,4,1,61,0,0,0,0,0,0,0,174,1,0,0,48,0,1,0,137,65,0,63,205,204,204,62,0,0,64,63,205,204,204,62,0,0,225,68,0,192,168,71,64,49,119,76,0,0,0,0,0,80,5,95,0,0,0,0,0,0,0,0,28,0,2,0,0,244,1,225,0,25,0,0,128,64,0,0,32,65,144,1,0,0,112,65,0,0,0,63,16,0,3,0,10,215,163,60,10,215,35,59,10,215,35,59,9,0,5,0,0,0,0,0,1,88,0,9,0,7,240,150,61,0,0,0,0,0,0,0,0,28,124,225,61,52,128,215,63,0,0,160,64,0,0,0,0,0,0,0,0,205,204,12,62,103,213,39,62,230,63,76,192,0,0,0,0,0,0,0,0,145,237,60,191,251,58,64,63,177,80,131,64,0,0,0,0,0,0,0,0,93,254,227,62,54,60,133,191,0,0,64,64,12,0,10,0,0,0,0,0,0,0,0,0,229,0,254,0,2,1,5,48,117,100,0,44,1,112,23,151,7,132,3,197,0,92,4,144,1,64,1,64,1,144,1,48,117,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,48,117,48,117,100,0,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,100,0,100,0,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,255,255,255,255,255,255,255,255,220,5,220,5,220,5,255,255,255,255,255,255,220,5,220,5,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,44,1,0,0,0,0,81,246,0,0}; - diff --git a/lib/Bosch-BSEC/config/generic_18v_3s_4d/bsec_serialized_configurations_iaq.h b/lib/Bosch-BSEC/config/generic_18v_3s_4d/bsec_serialized_configurations_iaq.h deleted file mode 100644 index 1986e2be..00000000 --- a/lib/Bosch-BSEC/config/generic_18v_3s_4d/bsec_serialized_configurations_iaq.h +++ /dev/null @@ -1,4 +0,0 @@ -#include - -extern const uint8_t bsec_config_iaq[454]; - diff --git a/lib/Bosch-BSEC/config/generic_33v_300s_28d/bsec_iaq.config b/lib/Bosch-BSEC/config/generic_33v_300s_28d/bsec_iaq.config deleted file mode 100644 index e518942bce7d902e4287ca62b80126af75750591..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 458 zcmX@c$iTqJ&cbNR00HZOd;%han1rug?%J7eYiILTyG=)Kju|Rw}dkgbXh8UI!j1E9JfzhB80#g`3 x5WxnqAY#a(5H?6$hY>gAV8;y$#Bsy_P;iG81R)#*3nq(68 - -extern const uint8_t bsec_config_iaq[454]; - diff --git a/lib/Bosch-BSEC/config/generic_33v_300s_4d/bsec_iaq.config b/lib/Bosch-BSEC/config/generic_33v_300s_4d/bsec_iaq.config deleted file mode 100644 index 698c69fe0a808342219419ce56fdc1e7e8934954..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 458 zcmX@c$iTqJ&cbNR00HZOd;*t#zVC* z$S^Q5FnnQr$RNqU(BQzppx`(GXi9-2P~KjEfti8p`eGZd>&n(3%*ntC*2WmYz{&9R zf)daI2)HFZ$L=AwvjYRe0w9KfIB$==vH#{fIN2@O4--?A-?Fc3L!yJ@$K-u5vE`NS zwoCVF9@rtb*MWzD3nt9)l;Ix(6C)&3^6Pd7#)Cc0;54G1g0>6 xAc75ILBxJ!Hydih~tL;q2LZH2tqgr7EBhCHYf%8w$_b-0RVX@g8Kjf diff --git a/lib/Bosch-BSEC/config/generic_33v_300s_4d/bsec_iaq.csv b/lib/Bosch-BSEC/config/generic_33v_300s_4d/bsec_iaq.csv deleted file mode 100644 index 223adff0..00000000 --- a/lib/Bosch-BSEC/config/generic_33v_300s_4d/bsec_iaq.csv +++ /dev/null @@ -1 +0,0 @@ -454,1,7,4,1,61,0,0,0,0,0,0,0,174,1,0,0,48,0,1,0,137,65,0,63,205,204,204,62,0,0,64,63,205,204,204,62,0,0,225,68,0,192,168,71,64,49,119,76,0,0,0,0,0,80,5,95,0,0,0,0,0,0,0,0,28,0,2,0,0,244,1,225,0,25,0,0,128,64,0,0,32,65,144,1,0,0,112,65,0,0,0,63,16,0,3,0,10,215,163,60,10,215,35,59,10,215,35,59,9,0,5,0,0,0,0,0,1,88,0,9,0,229,208,34,62,0,0,0,0,0,0,0,0,218,27,156,62,225,11,67,64,0,0,160,64,0,0,0,0,0,0,0,0,94,75,72,189,93,254,159,64,66,62,160,191,0,0,0,0,0,0,0,0,33,31,180,190,138,176,97,64,65,241,99,190,0,0,0,0,0,0,0,0,167,121,71,61,165,189,41,192,184,30,189,64,12,0,10,0,0,0,0,0,0,0,0,0,229,0,254,0,2,1,5,48,117,100,0,44,1,112,23,151,7,132,3,197,0,92,4,144,1,64,1,64,1,144,1,48,117,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,48,117,48,117,100,0,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,100,0,100,0,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,255,255,255,255,255,255,255,255,220,5,220,5,220,5,255,255,255,255,255,255,220,5,220,5,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,117,0,0,0,0,125,70,0,0 diff --git a/lib/Bosch-BSEC/config/generic_33v_300s_4d/bsec_serialized_configurations_iaq.c b/lib/Bosch-BSEC/config/generic_33v_300s_4d/bsec_serialized_configurations_iaq.c deleted file mode 100644 index f76832cc..00000000 --- a/lib/Bosch-BSEC/config/generic_33v_300s_4d/bsec_serialized_configurations_iaq.c +++ /dev/null @@ -1,5 +0,0 @@ -#include "bsec_serialized_configurations_iaq.h" - -const uint8_t bsec_config_iaq[454] = - {1,7,4,1,61,0,0,0,0,0,0,0,174,1,0,0,48,0,1,0,137,65,0,63,205,204,204,62,0,0,64,63,205,204,204,62,0,0,225,68,0,192,168,71,64,49,119,76,0,0,0,0,0,80,5,95,0,0,0,0,0,0,0,0,28,0,2,0,0,244,1,225,0,25,0,0,128,64,0,0,32,65,144,1,0,0,112,65,0,0,0,63,16,0,3,0,10,215,163,60,10,215,35,59,10,215,35,59,9,0,5,0,0,0,0,0,1,88,0,9,0,229,208,34,62,0,0,0,0,0,0,0,0,218,27,156,62,225,11,67,64,0,0,160,64,0,0,0,0,0,0,0,0,94,75,72,189,93,254,159,64,66,62,160,191,0,0,0,0,0,0,0,0,33,31,180,190,138,176,97,64,65,241,99,190,0,0,0,0,0,0,0,0,167,121,71,61,165,189,41,192,184,30,189,64,12,0,10,0,0,0,0,0,0,0,0,0,229,0,254,0,2,1,5,48,117,100,0,44,1,112,23,151,7,132,3,197,0,92,4,144,1,64,1,64,1,144,1,48,117,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,48,117,48,117,100,0,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,100,0,100,0,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,255,255,255,255,255,255,255,255,220,5,220,5,220,5,255,255,255,255,255,255,220,5,220,5,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,117,0,0,0,0,125,70,0,0}; - diff --git a/lib/Bosch-BSEC/config/generic_33v_300s_4d/bsec_serialized_configurations_iaq.h b/lib/Bosch-BSEC/config/generic_33v_300s_4d/bsec_serialized_configurations_iaq.h deleted file mode 100644 index 1986e2be..00000000 --- a/lib/Bosch-BSEC/config/generic_33v_300s_4d/bsec_serialized_configurations_iaq.h +++ /dev/null @@ -1,4 +0,0 @@ -#include - -extern const uint8_t bsec_config_iaq[454]; - diff --git a/lib/Bosch-BSEC/config/generic_33v_3s_28d/bsec_iaq.config b/lib/Bosch-BSEC/config/generic_33v_3s_28d/bsec_iaq.config deleted file mode 100644 index f2ff51895c7f644cf1acf40fd623b91b7b11d45c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 458 zcmX@c$iTqJ&cbNR00HZOd;%han1rug?%J7eYiILTyG=)Kju|Rw}dkgbXh8UI!j1E9JfzhB80#g`3 y5WxnqAY#a(5H?6$hY>gAV8;y$#Bsy_P;iG81R)#*3nq(6>i|QVfx#%6fdK$uqJg3S diff --git a/lib/Bosch-BSEC/config/generic_33v_3s_28d/bsec_iaq.csv b/lib/Bosch-BSEC/config/generic_33v_3s_28d/bsec_iaq.csv deleted file mode 100644 index 1396776c..00000000 --- a/lib/Bosch-BSEC/config/generic_33v_3s_28d/bsec_iaq.csv +++ /dev/null @@ -1 +0,0 @@ -454,1,7,4,1,61,0,0,0,0,0,0,0,174,1,0,0,48,0,1,0,137,65,0,63,205,204,204,62,0,0,64,63,205,204,204,62,0,0,225,68,0,168,19,73,64,49,119,76,0,0,0,0,0,80,5,95,0,0,0,0,0,0,0,0,28,0,2,0,0,244,1,225,0,25,0,0,128,64,0,0,32,65,144,1,0,0,112,65,0,0,0,63,16,0,3,0,10,215,163,60,10,215,35,59,10,215,35,59,9,0,5,0,0,0,0,0,1,88,0,9,0,229,208,34,62,0,0,0,0,0,0,0,0,218,27,156,62,225,11,67,64,0,0,160,64,0,0,0,0,0,0,0,0,94,75,72,189,93,254,159,64,66,62,160,191,0,0,0,0,0,0,0,0,33,31,180,190,138,176,97,64,65,241,99,190,0,0,0,0,0,0,0,0,167,121,71,61,165,189,41,192,184,30,189,64,12,0,10,0,0,0,0,0,0,0,0,0,229,0,254,0,2,1,5,48,117,100,0,44,1,112,23,151,7,132,3,197,0,92,4,144,1,64,1,64,1,144,1,48,117,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,48,117,48,117,100,0,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,100,0,100,0,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,255,255,255,255,255,255,255,255,220,5,220,5,220,5,255,255,255,255,255,255,220,5,220,5,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,44,1,0,0,0,0,50,91,0,0 diff --git a/lib/Bosch-BSEC/config/generic_33v_3s_28d/bsec_serialized_configurations_iaq.c b/lib/Bosch-BSEC/config/generic_33v_3s_28d/bsec_serialized_configurations_iaq.c deleted file mode 100644 index e1f1bfe3..00000000 --- a/lib/Bosch-BSEC/config/generic_33v_3s_28d/bsec_serialized_configurations_iaq.c +++ /dev/null @@ -1,5 +0,0 @@ -#include "bsec_serialized_configurations_iaq.h" - -const uint8_t bsec_config_iaq[454] = - {1,7,4,1,61,0,0,0,0,0,0,0,174,1,0,0,48,0,1,0,137,65,0,63,205,204,204,62,0,0,64,63,205,204,204,62,0,0,225,68,0,168,19,73,64,49,119,76,0,0,0,0,0,80,5,95,0,0,0,0,0,0,0,0,28,0,2,0,0,244,1,225,0,25,0,0,128,64,0,0,32,65,144,1,0,0,112,65,0,0,0,63,16,0,3,0,10,215,163,60,10,215,35,59,10,215,35,59,9,0,5,0,0,0,0,0,1,88,0,9,0,229,208,34,62,0,0,0,0,0,0,0,0,218,27,156,62,225,11,67,64,0,0,160,64,0,0,0,0,0,0,0,0,94,75,72,189,93,254,159,64,66,62,160,191,0,0,0,0,0,0,0,0,33,31,180,190,138,176,97,64,65,241,99,190,0,0,0,0,0,0,0,0,167,121,71,61,165,189,41,192,184,30,189,64,12,0,10,0,0,0,0,0,0,0,0,0,229,0,254,0,2,1,5,48,117,100,0,44,1,112,23,151,7,132,3,197,0,92,4,144,1,64,1,64,1,144,1,48,117,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,48,117,48,117,100,0,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,100,0,100,0,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,255,255,255,255,255,255,255,255,220,5,220,5,220,5,255,255,255,255,255,255,220,5,220,5,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,44,1,0,0,0,0,50,91,0,0}; - diff --git a/lib/Bosch-BSEC/config/generic_33v_3s_28d/bsec_serialized_configurations_iaq.h b/lib/Bosch-BSEC/config/generic_33v_3s_28d/bsec_serialized_configurations_iaq.h deleted file mode 100644 index 1986e2be..00000000 --- a/lib/Bosch-BSEC/config/generic_33v_3s_28d/bsec_serialized_configurations_iaq.h +++ /dev/null @@ -1,4 +0,0 @@ -#include - -extern const uint8_t bsec_config_iaq[454]; - diff --git a/lib/Bosch-BSEC/config/generic_33v_3s_4d/bsec_iaq.config b/lib/Bosch-BSEC/config/generic_33v_3s_4d/bsec_iaq.config deleted file mode 100644 index a79b3ccb7341c837ca568f6d3fb1461e50ed93f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 458 zcmX@c$iTqJ&cbNR00HZOd;*t#zVC* z$S^Q5FnnQr$RNqU(BQzppx`(GXi9-2P~KjEfti8p`eGZd>&n(3%*ntC*2WmYz{&9R zf)daI2)HFZ$L=AwvjYRe0w9KfIB$==vH#{fIN2@O4--?A-?Fc3L!yJ@$K-u5vE`NS zwoCVF9@rtb*MWzD3nt9)l;Ix(6C)&3^6Pd7#)Cc0;54G1g0>6 yAc75ILBxJ!Hydih~tL;q2LZH2tqgr7EBhC)&Yhz1H*fN1_l6j&w~B{ diff --git a/lib/Bosch-BSEC/config/generic_33v_3s_4d/bsec_iaq.csv b/lib/Bosch-BSEC/config/generic_33v_3s_4d/bsec_iaq.csv deleted file mode 100644 index b0001d9c..00000000 --- a/lib/Bosch-BSEC/config/generic_33v_3s_4d/bsec_iaq.csv +++ /dev/null @@ -1 +0,0 @@ -454,1,7,4,1,61,0,0,0,0,0,0,0,174,1,0,0,48,0,1,0,137,65,0,63,205,204,204,62,0,0,64,63,205,204,204,62,0,0,225,68,0,192,168,71,64,49,119,76,0,0,0,0,0,80,5,95,0,0,0,0,0,0,0,0,28,0,2,0,0,244,1,225,0,25,0,0,128,64,0,0,32,65,144,1,0,0,112,65,0,0,0,63,16,0,3,0,10,215,163,60,10,215,35,59,10,215,35,59,9,0,5,0,0,0,0,0,1,88,0,9,0,229,208,34,62,0,0,0,0,0,0,0,0,218,27,156,62,225,11,67,64,0,0,160,64,0,0,0,0,0,0,0,0,94,75,72,189,93,254,159,64,66,62,160,191,0,0,0,0,0,0,0,0,33,31,180,190,138,176,97,64,65,241,99,190,0,0,0,0,0,0,0,0,167,121,71,61,165,189,41,192,184,30,189,64,12,0,10,0,0,0,0,0,0,0,0,0,229,0,254,0,2,1,5,48,117,100,0,44,1,112,23,151,7,132,3,197,0,92,4,144,1,64,1,64,1,144,1,48,117,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,48,117,48,117,100,0,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,100,0,100,0,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,255,255,255,255,255,255,255,255,220,5,220,5,220,5,255,255,255,255,255,255,220,5,220,5,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,44,1,0,0,0,0,239,79,0,0 diff --git a/lib/Bosch-BSEC/config/generic_33v_3s_4d/bsec_serialized_configurations_iaq.c b/lib/Bosch-BSEC/config/generic_33v_3s_4d/bsec_serialized_configurations_iaq.c deleted file mode 100644 index bce43cc3..00000000 --- a/lib/Bosch-BSEC/config/generic_33v_3s_4d/bsec_serialized_configurations_iaq.c +++ /dev/null @@ -1,5 +0,0 @@ -#include "bsec_serialized_configurations_iaq.h" - -const uint8_t bsec_config_iaq[454] = - {1,7,4,1,61,0,0,0,0,0,0,0,174,1,0,0,48,0,1,0,137,65,0,63,205,204,204,62,0,0,64,63,205,204,204,62,0,0,225,68,0,192,168,71,64,49,119,76,0,0,0,0,0,80,5,95,0,0,0,0,0,0,0,0,28,0,2,0,0,244,1,225,0,25,0,0,128,64,0,0,32,65,144,1,0,0,112,65,0,0,0,63,16,0,3,0,10,215,163,60,10,215,35,59,10,215,35,59,9,0,5,0,0,0,0,0,1,88,0,9,0,229,208,34,62,0,0,0,0,0,0,0,0,218,27,156,62,225,11,67,64,0,0,160,64,0,0,0,0,0,0,0,0,94,75,72,189,93,254,159,64,66,62,160,191,0,0,0,0,0,0,0,0,33,31,180,190,138,176,97,64,65,241,99,190,0,0,0,0,0,0,0,0,167,121,71,61,165,189,41,192,184,30,189,64,12,0,10,0,0,0,0,0,0,0,0,0,229,0,254,0,2,1,5,48,117,100,0,44,1,112,23,151,7,132,3,197,0,92,4,144,1,64,1,64,1,144,1,48,117,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,48,117,48,117,100,0,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,100,0,100,0,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,255,255,255,255,255,255,255,255,220,5,220,5,220,5,255,255,255,255,255,255,220,5,220,5,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,44,1,0,0,0,0,239,79,0,0}; - diff --git a/lib/Bosch-BSEC/config/generic_33v_3s_4d/bsec_serialized_configurations_iaq.h b/lib/Bosch-BSEC/config/generic_33v_3s_4d/bsec_serialized_configurations_iaq.h deleted file mode 100644 index 1986e2be..00000000 --- a/lib/Bosch-BSEC/config/generic_33v_3s_4d/bsec_serialized_configurations_iaq.h +++ /dev/null @@ -1,4 +0,0 @@ -#include - -extern const uint8_t bsec_config_iaq[454]; - diff --git a/lib/Bosch-BSEC/docs/BSEC_Binary_Size_Information.pdf b/lib/Bosch-BSEC/docs/BSEC_Binary_Size_Information.pdf deleted file mode 100644 index f6a62ed59371bf8fe8b18f36c049fa2343b8cb1c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 215302 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 z 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 diff --git a/lib/Bosch-BSEC/examples/bsec_integration.c b/lib/Bosch-BSEC/examples/bsec_integration.c deleted file mode 100644 index 0dc5dc2d..00000000 --- a/lib/Bosch-BSEC/examples/bsec_integration.c +++ /dev/null @@ -1,559 +0,0 @@ -/* - * Copyright (C) 2017 Robert Bosch. All Rights Reserved. - * - * Disclaimer - * - * Common: - * Bosch Sensortec products are developed for the consumer goods industry. They may only be used - * within the parameters of the respective valid product data sheet. Bosch Sensortec products are - * provided with the express understanding that there is no warranty of fitness for a particular purpose. - * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device - * that may lead to bodily harm or property damage if the system or device malfunctions. In addition, - * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems. - * The resale and/or use of products are at the purchasers own risk and his own responsibility. The - * examination of fitness for the intended use is the sole responsibility of the Purchaser. - * - * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for - * incidental, or consequential damages, arising from any product use not covered by the parameters of - * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch - * Sensortec for all costs in connection with such claims. - * - * The purchaser must monitor the market for the purchased products, particularly with regard to - * product safety and inform Bosch Sensortec without delay of all security relevant incidents. - * - * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid - * technical specifications of the product series. They are therefore not intended or fit for resale to third - * parties or for use in end products. Their sole purpose is internal client testing. The testing of an - * engineering sample may in no way replace the testing of a product series. Bosch Sensortec - * assumes no liability for the use of engineering samples. By accepting the engineering samples, the - * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering - * samples. - * - * Special: - * This software module (hereinafter called "Software") and any information on application-sheets - * (hereinafter called "Information") is provided free of charge for the sole purpose to support your - * application work. The Software and Information is subject to the following terms and conditions: - * - * The Software is specifically designed for the exclusive use for Bosch Sensortec products by - * personnel who have special experience and training. Do not use this Software if you do not have the - * proper experience or training. - * - * This Software package is provided `` as is `` and without any expressed or implied warranties, - * including without limitation, the implied warranties of merchantability and fitness for a particular - * purpose. - * - * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment - * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their - * representatives and agents shall not be liable for any direct or indirect damages or injury, except as - * otherwise stipulated in mandatory applicable law. - * - * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no - * responsibility for the consequences of use of such Information nor for any infringement of patents or - * other rights of third parties which may result from its use. No license is granted by implication or - * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are - * subject to change without notice. - * - * It is not allowed to deliver the source code of the Software to any third party without permission of - * Bosch Sensortec. - * - */ - -/*! - * @file bsec_integration.c - * - * @brief - * Private part of the example for using of BSEC library. - */ - -/*! - * @addtogroup bsec_examples BSEC Examples - * @brief BSEC usage examples - * @{*/ - -/**********************************************************************************************************************/ -/* header files */ -/**********************************************************************************************************************/ - -#include -#include -#include - -#include "bsec_integration.h" - -/**********************************************************************************************************************/ -/* local macro definitions */ -/**********************************************************************************************************************/ - -#define NUM_USED_OUTPUTS 8 - -/**********************************************************************************************************************/ -/* global variable declarations */ -/**********************************************************************************************************************/ - -/* Global sensor APIs data structure */ -static struct bme680_dev bme680_g; - -/* Global temperature offset to be subtracted */ -static float bme680_temperature_offset_g = 0.0f; - -/**********************************************************************************************************************/ -/* functions */ -/**********************************************************************************************************************/ - -/*! - * @brief Virtual sensor subscription - * Please call this function before processing of data using bsec_do_steps function - * - * @param[in] sample_rate mode to be used (either BSEC_SAMPLE_RATE_ULP or BSEC_SAMPLE_RATE_LP) - * - * @return subscription result, zero when successful - */ -static bsec_library_return_t bme680_bsec_update_subscription(float sample_rate) -{ - bsec_sensor_configuration_t requested_virtual_sensors[NUM_USED_OUTPUTS]; - uint8_t n_requested_virtual_sensors = NUM_USED_OUTPUTS; - - bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR]; - uint8_t n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR; - - bsec_library_return_t status = BSEC_OK; - - /* note: Virtual sensors as desired to be added here */ - requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ; - requested_virtual_sensors[0].sample_rate = sample_rate; - requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE; - requested_virtual_sensors[1].sample_rate = sample_rate; - requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE; - requested_virtual_sensors[2].sample_rate = sample_rate; - requested_virtual_sensors[3].sensor_id = BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY; - requested_virtual_sensors[3].sample_rate = sample_rate; - requested_virtual_sensors[4].sensor_id = BSEC_OUTPUT_RAW_GAS; - requested_virtual_sensors[4].sample_rate = sample_rate; - requested_virtual_sensors[5].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE; - requested_virtual_sensors[5].sample_rate = sample_rate; - requested_virtual_sensors[6].sensor_id = BSEC_OUTPUT_RAW_HUMIDITY; - requested_virtual_sensors[6].sample_rate = sample_rate; - requested_virtual_sensors[7].sensor_id = BSEC_OUTPUT_STATIC_IAQ; - requested_virtual_sensors[7].sample_rate = sample_rate; - - /* Call bsec_update_subscription() to enable/disable the requested virtual sensors */ - status = bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, - &n_required_sensor_settings); - - return status; -} - -/*! - * @brief Initialize the BME680 sensor and the BSEC library - * - * @param[in] sample_rate mode to be used (either BSEC_SAMPLE_RATE_ULP or BSEC_SAMPLE_RATE_LP) - * @param[in] temperature_offset device-specific temperature offset (due to self-heating) - * @param[in] bus_write pointer to the bus writing function - * @param[in] bus_read pointer to the bus reading function - * @param[in] sleep pointer to the system specific sleep function - * @param[in] state_load pointer to the system-specific state load function - * @param[in] config_load pointer to the system-specific config load function - * - * @return zero if successful, negative otherwise - */ -return_values_init bsec_iot_init(float sample_rate, float temperature_offset, bme680_com_fptr_t bus_write, - bme680_com_fptr_t bus_read, sleep_fct sleep, state_load_fct state_load, config_load_fct config_load) -{ - return_values_init ret = {BME680_OK, BSEC_OK}; - bsec_library_return_t bsec_status = BSEC_OK; - - uint8_t bsec_state[BSEC_MAX_PROPERTY_BLOB_SIZE] = {0}; - uint8_t bsec_config[BSEC_MAX_PROPERTY_BLOB_SIZE] = {0}; - uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE] = {0}; - int bsec_state_len, bsec_config_len; - - /* Fixed I2C configuration */ - bme680_g.dev_id = BME680_I2C_ADDR_PRIMARY; - bme680_g.intf = BME680_I2C_INTF; - /* User configurable I2C configuration */ - bme680_g.write = bus_write; - bme680_g.read = bus_read; - bme680_g.delay_ms = sleep; - - /* Initialize BME680 API */ - ret.bme680_status = bme680_init(&bme680_g); - if (ret.bme680_status != BME680_OK) - { - return ret; - } - - /* Initialize BSEC library */ - ret.bsec_status = bsec_init(); - if (ret.bsec_status != BSEC_OK) - { - return ret; - } - - /* Load library config, if available */ - bsec_config_len = config_load(bsec_config, sizeof(bsec_config)); - if (bsec_config_len != 0) - { - ret.bsec_status = bsec_set_configuration(bsec_config, bsec_config_len, work_buffer, sizeof(work_buffer)); - if (ret.bsec_status != BSEC_OK) - { - return ret; - } - } - - /* Load previous library state, if available */ - bsec_state_len = state_load(bsec_state, sizeof(bsec_state)); - if (bsec_state_len != 0) - { - ret.bsec_status = bsec_set_state(bsec_state, bsec_state_len, work_buffer, sizeof(work_buffer)); - if (ret.bsec_status != BSEC_OK) - { - return ret; - } - } - - /* Set temperature offset */ - bme680_temperature_offset_g = temperature_offset; - - /* Call to the function which sets the library with subscription information */ - ret.bsec_status = bme680_bsec_update_subscription(sample_rate); - if (ret.bsec_status != BSEC_OK) - { - return ret; - } - - return ret; -} - -/*! - * @brief Trigger the measurement based on sensor settings - * - * @param[in] sensor_settings settings of the BME680 sensor adopted by sensor control function - * @param[in] sleep pointer to the system specific sleep function - * - * @return none - */ -static void bme680_bsec_trigger_measurement(bsec_bme_settings_t *sensor_settings, sleep_fct sleep) -{ - uint16_t meas_period; - uint8_t set_required_settings; - int8_t bme680_status = BME680_OK; - - /* Check if a forced-mode measurement should be triggered now */ - if (sensor_settings->trigger_measurement) - { - /* Set sensor configuration */ - - bme680_g.tph_sett.os_hum = sensor_settings->humidity_oversampling; - bme680_g.tph_sett.os_pres = sensor_settings->pressure_oversampling; - bme680_g.tph_sett.os_temp = sensor_settings->temperature_oversampling; - bme680_g.gas_sett.run_gas = sensor_settings->run_gas; - bme680_g.gas_sett.heatr_temp = sensor_settings->heater_temperature; /* degree Celsius */ - bme680_g.gas_sett.heatr_dur = sensor_settings->heating_duration; /* milliseconds */ - - /* Select the power mode */ - /* Must be set before writing the sensor configuration */ - bme680_g.power_mode = BME680_FORCED_MODE; - /* Set the required sensor settings needed */ - set_required_settings = BME680_OST_SEL | BME680_OSP_SEL | BME680_OSH_SEL | BME680_GAS_SENSOR_SEL; - - /* Set the desired sensor configuration */ - bme680_status = bme680_set_sensor_settings(set_required_settings, &bme680_g); - - /* Set power mode as forced mode and trigger forced mode measurement */ - bme680_status = bme680_set_sensor_mode(&bme680_g); - - /* Get the total measurement duration so as to sleep or wait till the measurement is complete */ - bme680_get_profile_dur(&meas_period, &bme680_g); - - /* Delay till the measurement is ready. Timestamp resolution in ms */ - sleep((uint32_t)meas_period); - } - - /* Call the API to get current operation mode of the sensor */ - bme680_status = bme680_get_sensor_mode(&bme680_g); - /* When the measurement is completed and data is ready for reading, the sensor must be in BME680_SLEEP_MODE. - * Read operation mode to check whether measurement is completely done and wait until the sensor is no more - * in BME680_FORCED_MODE. */ - while (bme680_g.power_mode == BME680_FORCED_MODE) - { - /* sleep for 5 ms */ - sleep(5); - bme680_status = bme680_get_sensor_mode(&bme680_g); - } -} - -/*! - * @brief Read the data from registers and populate the inputs structure to be passed to do_steps function - * - * @param[in] time_stamp_trigger settings of the sensor returned from sensor control function - * @param[in] inputs input structure containing the information on sensors to be passed to do_steps - * @param[in] num_bsec_inputs number of inputs to be passed to do_steps - * @param[in] bsec_process_data process data variable returned from sensor_control - * - * @return none - */ -static void bme680_bsec_read_data(int64_t time_stamp_trigger, bsec_input_t *inputs, uint8_t *num_bsec_inputs, - int32_t bsec_process_data) -{ - static struct bme680_field_data data; - int8_t bme680_status = BME680_OK; - - /* We only have to read data if the previous call the bsec_sensor_control() actually asked for it */ - if (bsec_process_data) - { - bme680_status = bme680_get_sensor_data(&data, &bme680_g); - - if (data.status & BME680_NEW_DATA_MSK) - { - /* Pressure to be processed by BSEC */ - if (bsec_process_data & BSEC_PROCESS_PRESSURE) - { - /* Place presssure sample into input struct */ - inputs[*num_bsec_inputs].sensor_id = BSEC_INPUT_PRESSURE; - inputs[*num_bsec_inputs].signal = data.pressure; - inputs[*num_bsec_inputs].time_stamp = time_stamp_trigger; - (*num_bsec_inputs)++; - } - /* Temperature to be processed by BSEC */ - if (bsec_process_data & BSEC_PROCESS_TEMPERATURE) - { - /* Place temperature sample into input struct */ - inputs[*num_bsec_inputs].sensor_id = BSEC_INPUT_TEMPERATURE; - #ifdef BME680_FLOAT_POINT_COMPENSATION - inputs[*num_bsec_inputs].signal = data.temperature; - #else - inputs[*num_bsec_inputs].signal = data.temperature / 100.0f; - #endif - inputs[*num_bsec_inputs].time_stamp = time_stamp_trigger; - (*num_bsec_inputs)++; - - /* Also add optional heatsource input which will be subtracted from the temperature reading to - * compensate for device-specific self-heating (supported in BSEC IAQ solution)*/ - inputs[*num_bsec_inputs].sensor_id = BSEC_INPUT_HEATSOURCE; - inputs[*num_bsec_inputs].signal = bme680_temperature_offset_g; - inputs[*num_bsec_inputs].time_stamp = time_stamp_trigger; - (*num_bsec_inputs)++; - } - /* Humidity to be processed by BSEC */ - if (bsec_process_data & BSEC_PROCESS_HUMIDITY) - { - /* Place humidity sample into input struct */ - inputs[*num_bsec_inputs].sensor_id = BSEC_INPUT_HUMIDITY; - #ifdef BME680_FLOAT_POINT_COMPENSATION - inputs[*num_bsec_inputs].signal = data.humidity; - #else - inputs[*num_bsec_inputs].signal = data.humidity / 1000.0f; - #endif - inputs[*num_bsec_inputs].time_stamp = time_stamp_trigger; - (*num_bsec_inputs)++; - } - /* Gas to be processed by BSEC */ - if (bsec_process_data & BSEC_PROCESS_GAS) - { - /* Check whether gas_valid flag is set */ - if(data.status & BME680_GASM_VALID_MSK) - { - /* Place sample into input struct */ - inputs[*num_bsec_inputs].sensor_id = BSEC_INPUT_GASRESISTOR; - inputs[*num_bsec_inputs].signal = data.gas_resistance; - inputs[*num_bsec_inputs].time_stamp = time_stamp_trigger; - (*num_bsec_inputs)++; - } - } - } - } -} - -/*! - * @brief This function is written to process the sensor data for the requested virtual sensors - * - * @param[in] bsec_inputs input structure containing the information on sensors to be passed to do_steps - * @param[in] num_bsec_inputs number of inputs to be passed to do_steps - * @param[in] output_ready pointer to the function processing obtained BSEC outputs - * - * @return none - */ -static void bme680_bsec_process_data(bsec_input_t *bsec_inputs, uint8_t num_bsec_inputs, output_ready_fct output_ready) -{ - /* Output buffer set to the maximum virtual sensor outputs supported */ - bsec_output_t bsec_outputs[BSEC_NUMBER_OUTPUTS]; - uint8_t num_bsec_outputs = 0; - uint8_t index = 0; - - bsec_library_return_t bsec_status = BSEC_OK; - - int64_t timestamp = 0; - float iaq = 0.0f; - uint8_t iaq_accuracy = 0; - float temp = 0.0f; - float raw_temp = 0.0f; - float raw_pressure = 0.0f; - float humidity = 0.0f; - float raw_humidity = 0.0f; - float raw_gas = 0.0f; - float static_iaq = 0.0f; - uint8_t static_iaq_accuracy = 0; - float co2_equivalent = 0.0f; - uint8_t co2_accuracy = 0; - float breath_voc_equivalent = 0.0f; - uint8_t breath_voc_accuracy = 0; - float comp_gas_value = 0.0f; - uint8_t comp_gas_accuracy = 0; - float gas_percentage = 0.0f; - uint8_t gas_percentage_acccuracy = 0; - - /* Check if something should be processed by BSEC */ - if (num_bsec_inputs > 0) - { - /* Set number of outputs to the size of the allocated buffer */ - /* BSEC_NUMBER_OUTPUTS to be defined */ - num_bsec_outputs = BSEC_NUMBER_OUTPUTS; - - /* Perform processing of the data by BSEC - Note: - * The number of outputs you get depends on what you asked for during bsec_update_subscription(). This is - handled under bme680_bsec_update_subscription() function in this example file. - * The number of actual outputs that are returned is written to num_bsec_outputs. */ - bsec_status = bsec_do_steps(bsec_inputs, num_bsec_inputs, bsec_outputs, &num_bsec_outputs); - - /* Iterate through the outputs and extract the relevant ones. */ - for (index = 0; index < num_bsec_outputs; index++) - { - switch (bsec_outputs[index].sensor_id) - { - case BSEC_OUTPUT_IAQ: - iaq = bsec_outputs[index].signal; - iaq_accuracy = bsec_outputs[index].accuracy; - break; - case BSEC_OUTPUT_STATIC_IAQ: - static_iaq = bsec_outputs[index].signal; - static_iaq_accuracy = bsec_outputs[index].accuracy; - break; - case BSEC_OUTPUT_CO2_EQUIVALENT: - co2_equivalent = bsec_outputs[index].signal; - co2_accuracy = bsec_outputs[index].accuracy; - break; - case BSEC_OUTPUT_BREATH_VOC_EQUIVALENT: - breath_voc_equivalent = bsec_outputs[index].signal; - breath_voc_accuracy = bsec_outputs[index].accuracy; - break; - case BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE: - temp = bsec_outputs[index].signal; - break; - case BSEC_OUTPUT_RAW_PRESSURE: - raw_pressure = bsec_outputs[index].signal; - break; - case BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY: - humidity = bsec_outputs[index].signal; - break; - case BSEC_OUTPUT_RAW_GAS: - raw_gas = bsec_outputs[index].signal; - break; - case BSEC_OUTPUT_RAW_TEMPERATURE: - raw_temp = bsec_outputs[index].signal; - break; - case BSEC_OUTPUT_RAW_HUMIDITY: - raw_humidity = bsec_outputs[index].signal; - break; - case BSEC_OUTPUT_COMPENSATED_GAS: - comp_gas_value = bsec_outputs[index].signal; - comp_gas_accuracy = bsec_outputs[index].accuracy; - break; - case BSEC_OUTPUT_GAS_PERCENTAGE: - gas_percentage = bsec_outputs[index].signal; - gas_percentage_acccuracy = bsec_outputs[index].accuracy; - break; - default: - continue; - } - - /* Assume that all the returned timestamps are the same */ - timestamp = bsec_outputs[index].time_stamp; - } - - /* Pass the extracted outputs to the user provided output_ready() function. */ - output_ready(timestamp, iaq, iaq_accuracy, temp, humidity, raw_pressure, raw_temp, - raw_humidity, raw_gas, bsec_status, static_iaq, co2_equivalent, breath_voc_equivalent); - } -} - -/*! - * @brief Runs the main (endless) loop that queries sensor settings, applies them, and processes the measured data - * - * @param[in] sleep pointer to the system specific sleep function - * @param[in] get_timestamp_us pointer to the system specific timestamp derivation function - * @param[in] output_ready pointer to the function processing obtained BSEC outputs - * @param[in] state_save pointer to the system-specific state save function - * @param[in] save_intvl interval at which BSEC state should be saved (in samples) - * - * @return none - */ -void bsec_iot_loop(sleep_fct sleep, get_timestamp_us_fct get_timestamp_us, output_ready_fct output_ready, - state_save_fct state_save, uint32_t save_intvl) -{ - /* Timestamp variables */ - int64_t time_stamp = 0; - int64_t time_stamp_interval_ms = 0; - - /* Allocate enough memory for up to BSEC_MAX_PHYSICAL_SENSOR physical inputs*/ - bsec_input_t bsec_inputs[BSEC_MAX_PHYSICAL_SENSOR]; - - /* Number of inputs to BSEC */ - uint8_t num_bsec_inputs = 0; - - /* BSEC sensor settings struct */ - bsec_bme_settings_t sensor_settings; - - /* Save state variables */ - uint8_t bsec_state[BSEC_MAX_STATE_BLOB_SIZE]; - uint8_t work_buffer[BSEC_MAX_STATE_BLOB_SIZE]; - uint32_t bsec_state_len = 0; - uint32_t n_samples = 0; - - bsec_library_return_t bsec_status = BSEC_OK; - - while (1) - { - /* get the timestamp in nanoseconds before calling bsec_sensor_control() */ - time_stamp = get_timestamp_us() * 1000; - - /* Retrieve sensor settings to be used in this time instant by calling bsec_sensor_control */ - bsec_sensor_control(time_stamp, &sensor_settings); - - /* Trigger a measurement if necessary */ - bme680_bsec_trigger_measurement(&sensor_settings, sleep); - - /* Read data from last measurement */ - num_bsec_inputs = 0; - bme680_bsec_read_data(time_stamp, bsec_inputs, &num_bsec_inputs, sensor_settings.process_data); - - /* Time to invoke BSEC to perform the actual processing */ - bme680_bsec_process_data(bsec_inputs, num_bsec_inputs, output_ready); - - /* Increment sample counter */ - n_samples++; - - /* Retrieve and store state if the passed save_intvl */ - if (n_samples >= save_intvl) - { - bsec_status = bsec_get_state(0, bsec_state, sizeof(bsec_state), work_buffer, sizeof(work_buffer), &bsec_state_len); - if (bsec_status == BSEC_OK) - { - state_save(bsec_state, bsec_state_len); - } - n_samples = 0; - } - - - /* Compute how long we can sleep until we need to call bsec_sensor_control() next */ - /* Time_stamp is converted from microseconds to nanoseconds first and then the difference to milliseconds */ - time_stamp_interval_ms = (sensor_settings.next_call - get_timestamp_us() * 1000) / 1000000; - if (time_stamp_interval_ms > 0) - { - sleep((uint32_t)time_stamp_interval_ms); - } - } -} - -/*! @}*/ - diff --git a/lib/Bosch-BSEC/examples/bsec_integration.h b/lib/Bosch-BSEC/examples/bsec_integration.h deleted file mode 100644 index 5155a001..00000000 --- a/lib/Bosch-BSEC/examples/bsec_integration.h +++ /dev/null @@ -1,165 +0,0 @@ -/* - * Copyright (C) 2017 Robert Bosch. All Rights Reserved. - * - * Disclaimer - * - * Common: - * Bosch Sensortec products are developed for the consumer goods industry. They may only be used - * within the parameters of the respective valid product data sheet. Bosch Sensortec products are - * provided with the express understanding that there is no warranty of fitness for a particular purpose. - * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device - * that may lead to bodily harm or property damage if the system or device malfunctions. In addition, - * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems. - * The resale and/or use of products are at the purchasers own risk and his own responsibility. The - * examination of fitness for the intended use is the sole responsibility of the Purchaser. - * - * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for - * incidental, or consequential damages, arising from any product use not covered by the parameters of - * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch - * Sensortec for all costs in connection with such claims. - * - * The purchaser must monitor the market for the purchased products, particularly with regard to - * product safety and inform Bosch Sensortec without delay of all security relevant incidents. - * - * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid - * technical specifications of the product series. They are therefore not intended or fit for resale to third - * parties or for use in end products. Their sole purpose is internal client testing. The testing of an - * engineering sample may in no way replace the testing of a product series. Bosch Sensortec - * assumes no liability for the use of engineering samples. By accepting the engineering samples, the - * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering - * samples. - * - * Special: - * This software module (hereinafter called "Software") and any information on application-sheets - * (hereinafter called "Information") is provided free of charge for the sole purpose to support your - * application work. The Software and Information is subject to the following terms and conditions: - * - * The Software is specifically designed for the exclusive use for Bosch Sensortec products by - * personnel who have special experience and training. Do not use this Software if you do not have the - * proper experience or training. - * - * This Software package is provided `` as is `` and without any expressed or implied warranties, - * including without limitation, the implied warranties of merchantability and fitness for a particular - * purpose. - * - * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment - * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their - * representatives and agents shall not be liable for any direct or indirect damages or injury, except as - * otherwise stipulated in mandatory applicable law. - * - * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no - * responsibility for the consequences of use of such Information nor for any infringement of patents or - * other rights of third parties which may result from its use. No license is granted by implication or - * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are - * subject to change without notice. - * - * It is not allowed to deliver the source code of the Software to any third party without permission of - * Bosch Sensortec. - * - */ - -/*! - * @file bsec_integration.h - * - * @brief - * Contains BSEC integration API - */ - -/*! - * @addtogroup bsec_examples BSEC Examples - * @brief BSEC usage examples - * @{*/ - -#ifndef __BSEC_INTEGRATION_H__ -#define __BSEC_INTEGRATION_H__ - -#ifdef __cplusplus -extern "C" -{ -#endif - -/**********************************************************************************************************************/ -/* header files */ -/**********************************************************************************************************************/ - -/* Use the following bme680 driver: https://github.com/BoschSensortec/BME680_driver/releases/tag/bme680_v3.5.1 */ -#include "bme680.h" -/* BSEC header files are available in the inc/ folder of the release package */ -#include "bsec_interface.h" -#include "bsec_datatypes.h" - - -/**********************************************************************************************************************/ -/* type definitions */ -/**********************************************************************************************************************/ - -/* function pointer to the system specific sleep function */ -typedef void (*sleep_fct)(uint32_t t_ms); - -/* function pointer to the system specific timestamp derivation function */ -typedef int64_t (*get_timestamp_us_fct)(); - -/* function pointer to the function processing obtained BSEC outputs */ -typedef void (*output_ready_fct)(int64_t timestamp, float iaq, uint8_t iaq_accuracy, float temperature, float humidity, - float pressure, float raw_temperature, float raw_humidity, float gas, bsec_library_return_t bsec_status, - float static_iaq, float co2_equivalent, float breath_voc_equivalent); - -/* function pointer to the function loading a previous BSEC state from NVM */ -typedef uint32_t (*state_load_fct)(uint8_t *state_buffer, uint32_t n_buffer); - -/* function pointer to the function saving BSEC state to NVM */ -typedef void (*state_save_fct)(const uint8_t *state_buffer, uint32_t length); - -/* function pointer to the function loading the BSEC configuration string from NVM */ -typedef uint32_t (*config_load_fct)(uint8_t *state_buffer, uint32_t n_buffer); - -/* structure definitions */ - -/* Structure with the return value from bsec_iot_init() */ -typedef struct{ - /*! Result of API execution status */ - int8_t bme680_status; - /*! Result of BSEC library */ - bsec_library_return_t bsec_status; -}return_values_init; -/**********************************************************************************************************************/ -/* function declarations */ -/**********************************************************************************************************************/ - -/*! - * @brief Initialize the BME680 sensor and the BSEC library - * - * @param[in] sample_rate mode to be used (either BSEC_SAMPLE_RATE_ULP or BSEC_SAMPLE_RATE_LP) - * @param[in] temperature_offset device-specific temperature offset (due to self-heating) - * @param[in] bus_write pointer to the bus writing function - * @param[in] bus_read pointer to the bus reading function - * @param[in] sleep pointer to the system-specific sleep function - * @param[in] state_load pointer to the system-specific state load function - * - * @return zero if successful, negative otherwise - */ -return_values_init bsec_iot_init(float sample_rate, float temperature_offset, bme680_com_fptr_t bus_write, bme680_com_fptr_t bus_read, - sleep_fct sleep, state_load_fct state_load, config_load_fct config_load); - -/*! - * @brief Runs the main (endless) loop that queries sensor settings, applies them, and processes the measured data - * - * @param[in] sleep pointer to the system-specific sleep function - * @param[in] get_timestamp_us pointer to the system-specific timestamp derivation function - * @param[in] output_ready pointer to the function processing obtained BSEC outputs - * @param[in] state_save pointer to the system-specific state save function - * @param[in] save_intvl interval at which BSEC state should be saved (in samples) - * - * @return return_values_init struct with the result of the API and the BSEC library - */ -void bsec_iot_loop(sleep_fct sleep, get_timestamp_us_fct get_timestamp_us, output_ready_fct output_ready, - state_save_fct state_save, uint32_t save_intvl); - -#ifdef __cplusplus -} -#endif - -#endif /* __BSEC_INTEGRATION_H__ */ - -/*! @}*/ - diff --git a/lib/Bosch-BSEC/examples/bsec_iot_example.c b/lib/Bosch-BSEC/examples/bsec_iot_example.c deleted file mode 100644 index b62487b7..00000000 --- a/lib/Bosch-BSEC/examples/bsec_iot_example.c +++ /dev/null @@ -1,258 +0,0 @@ -/* - * Copyright (C) 2017 Robert Bosch. All Rights Reserved. - * - * Disclaimer - * - * Common: - * Bosch Sensortec products are developed for the consumer goods industry. They may only be used - * within the parameters of the respective valid product data sheet. Bosch Sensortec products are - * provided with the express understanding that there is no warranty of fitness for a particular purpose. - * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device - * that may lead to bodily harm or property damage if the system or device malfunctions. In addition, - * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems. - * The resale and/or use of products are at the purchasers own risk and his own responsibility. The - * examination of fitness for the intended use is the sole responsibility of the Purchaser. - * - * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for - * incidental, or consequential damages, arising from any product use not covered by the parameters of - * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch - * Sensortec for all costs in connection with such claims. - * - * The purchaser must monitor the market for the purchased products, particularly with regard to - * product safety and inform Bosch Sensortec without delay of all security relevant incidents. - * - * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid - * technical specifications of the product series. They are therefore not intended or fit for resale to third - * parties or for use in end products. Their sole purpose is internal client testing. The testing of an - * engineering sample may in no way replace the testing of a product series. Bosch Sensortec - * assumes no liability for the use of engineering samples. By accepting the engineering samples, the - * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering - * samples. - * - * Special: - * This software module (hereinafter called "Software") and any information on application-sheets - * (hereinafter called "Information") is provided free of charge for the sole purpose to support your - * application work. The Software and Information is subject to the following terms and conditions: - * - * The Software is specifically designed for the exclusive use for Bosch Sensortec products by - * personnel who have special experience and training. Do not use this Software if you do not have the - * proper experience or training. - * - * This Software package is provided `` as is `` and without any expressed or implied warranties, - * including without limitation, the implied warranties of merchantability and fitness for a particular - * purpose. - * - * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment - * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their - * representatives and agents shall not be liable for any direct or indirect damages or injury, except as - * otherwise stipulated in mandatory applicable law. - * - * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no - * responsibility for the consequences of use of such Information nor for any infringement of patents or - * other rights of third parties which may result from its use. No license is granted by implication or - * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are - * subject to change without notice. - * - * It is not allowed to deliver the source code of the Software to any third party without permission of - * Bosch Sensortec. - * - */ - -/*! - * @file bsec_iot_example.c - * - * @brief - * Example for using of BSEC library in a fixed configuration with the BME680 sensor. - * This works by running an endless loop in the bsec_iot_loop() function. - */ - -/*! - * @addtogroup bsec_examples BSEC Examples - * @brief BSEC usage examples - * @{*/ - -/**********************************************************************************************************************/ -/* header files */ -/**********************************************************************************************************************/ - -#include "bsec_integration.h" - -/**********************************************************************************************************************/ -/* functions */ -/**********************************************************************************************************************/ - -/*! - * @brief Write operation in either I2C or SPI - * - * param[in] dev_addr I2C or SPI device address - * param[in] reg_addr register address - * param[in] reg_data_ptr pointer to the data to be written - * param[in] data_len number of bytes to be written - * - * @return result of the bus communication function - */ -int8_t bus_write(uint8_t dev_addr, uint8_t reg_addr, uint8_t *reg_data_ptr, uint16_t data_len) -{ - // ... - // Please insert system specific function to write to the bus where BME680 is connected - // ... - return 0; -} - -/*! - * @brief Read operation in either I2C or SPI - * - * param[in] dev_addr I2C or SPI device address - * param[in] reg_addr register address - * param[out] reg_data_ptr pointer to the memory to be used to store the read data - * param[in] data_len number of bytes to be read - * - * @return result of the bus communication function - */ -int8_t bus_read(uint8_t dev_addr, uint8_t reg_addr, uint8_t *reg_data_ptr, uint16_t data_len) -{ - // ... - // Please insert system specific function to read from bus where BME680 is connected - // ... - return 0; -} - -/*! - * @brief System specific implementation of sleep function - * - * @param[in] t_ms time in milliseconds - * - * @return none - */ -void sleep(uint32_t t_ms) -{ - // ... - // Please insert system specific function sleep or delay for t_ms milliseconds - // ... -} - -/*! - * @brief Capture the system time in microseconds - * - * @return system_current_time current system timestamp in microseconds - */ -int64_t get_timestamp_us() -{ - int64_t system_current_time = 0; - // ... - // Please insert system specific function to retrieve a timestamp (in microseconds) - // ... - return system_current_time; -} - -/*! - * @brief Handling of the ready outputs - * - * @param[in] timestamp time in nanoseconds - * @param[in] iaq IAQ signal - * @param[in] iaq_accuracy accuracy of IAQ signal - * @param[in] temperature temperature signal - * @param[in] humidity humidity signal - * @param[in] pressure pressure signal - * @param[in] raw_temperature raw temperature signal - * @param[in] raw_humidity raw humidity signal - * @param[in] gas raw gas sensor signal - * @param[in] bsec_status value returned by the bsec_do_steps() call - * - * @return none - */ -void output_ready(int64_t timestamp, float iaq, uint8_t iaq_accuracy, float temperature, float humidity, - float pressure, float raw_temperature, float raw_humidity, float gas, bsec_library_return_t bsec_status, - float static_iaq, float co2_equivalent, float breath_voc_equivalent) -{ - // ... - // Please insert system specific code to further process or display the BSEC outputs - // ... -} - -/*! - * @brief Load previous library state from non-volatile memory - * - * @param[in,out] state_buffer buffer to hold the loaded state string - * @param[in] n_buffer size of the allocated state buffer - * - * @return number of bytes copied to state_buffer - */ -uint32_t state_load(uint8_t *state_buffer, uint32_t n_buffer) -{ - // ... - // Load a previous library state from non-volatile memory, if available. - // - // Return zero if loading was unsuccessful or no state was available, - // otherwise return length of loaded state string. - // ... - return 0; -} - -/*! - * @brief Save library state to non-volatile memory - * - * @param[in] state_buffer buffer holding the state to be stored - * @param[in] length length of the state string to be stored - * - * @return none - */ -void state_save(const uint8_t *state_buffer, uint32_t length) -{ - // ... - // Save the string some form of non-volatile memory, if possible. - // ... -} - -/*! - * @brief Load library config from non-volatile memory - * - * @param[in,out] config_buffer buffer to hold the loaded state string - * @param[in] n_buffer size of the allocated state buffer - * - * @return number of bytes copied to config_buffer - */ -uint32_t config_load(uint8_t *config_buffer, uint32_t n_buffer) -{ - // ... - // Load a library config from non-volatile memory, if available. - // - // Return zero if loading was unsuccessful or no config was available, - // otherwise return length of loaded config string. - // ... - return 0; -} - -/*! - * @brief Main function which configures BSEC library and then reads and processes the data from sensor based - * on timer ticks - * - * @return result of the processing - */ -int main() -{ - return_values_init ret; - - /* Call to the function which initializes the BSEC library - * Switch on low-power mode and provide no temperature offset */ - ret = bsec_iot_init(BSEC_SAMPLE_RATE_LP, 0.0f, bus_write, bus_read, sleep, state_load, config_load); - if (ret.bme680_status) - { - /* Could not intialize BME680 */ - return (int)ret.bme680_status; - } - else if (ret.bsec_status) - { - /* Could not intialize BSEC library */ - return (int)ret.bsec_status; - } - - /* Call to endless loop function which reads and processes data based on sensor settings */ - /* State is saved every 10.000 samples, which means every 10.000 * 3 secs = 500 minutes */ - bsec_iot_loop(sleep, get_timestamp_us, output_ready, state_save, 10000); - - return 0; -} - -/*! @}*/ - diff --git a/lib/Bosch-BSEC/examples/bsec_iot_example.ino b/lib/Bosch-BSEC/examples/bsec_iot_example.ino deleted file mode 100644 index 705f8f6c..00000000 --- a/lib/Bosch-BSEC/examples/bsec_iot_example.ino +++ /dev/null @@ -1,291 +0,0 @@ -/* - * Copyright (C) 2017 Robert Bosch. All Rights Reserved. - * - * Disclaimer - * - * Common: - * Bosch Sensortec products are developed for the consumer goods industry. They may only be used - * within the parameters of the respective valid product data sheet. Bosch Sensortec products are - * provided with the express understanding that there is no warranty of fitness for a particular purpose. - * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device - * that may lead to bodily harm or property damage if the system or device malfunctions. In addition, - * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems. - * The resale and/or use of products are at the purchasers own risk and his own responsibility. The - * examination of fitness for the intended use is the sole responsibility of the Purchaser. - * - * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for - * incidental, or consequential damages, arising from any product use not covered by the parameters of - * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch - * Sensortec for all costs in connection with such claims. - * - * The purchaser must monitor the market for the purchased products, particularly with regard to - * product safety and inform Bosch Sensortec without delay of all security relevant incidents. - * - * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid - * technical specifications of the product series. They are therefore not intended or fit for resale to third - * parties or for use in end products. Their sole purpose is internal client testing. The testing of an - * engineering sample may in no way replace the testing of a product series. Bosch Sensortec - * assumes no liability for the use of engineering samples. By accepting the engineering samples, the - * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering - * samples. - * - * Special: - * This software module (hereinafter called "Software") and any information on application-sheets - * (hereinafter called "Information") is provided free of charge for the sole purpose to support your - * application work. The Software and Information is subject to the following terms and conditions: - * - * The Software is specifically designed for the exclusive use for Bosch Sensortec products by - * personnel who have special experience and training. Do not use this Software if you do not have the - * proper experience or training. - * - * This Software package is provided `` as is `` and without any expressed or implied warranties, - * including without limitation, the implied warranties of merchantability and fitness for a particular - * purpose. - * - * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment - * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their - * representatives and agents shall not be liable for any direct or indirect damages or injury, except as - * otherwise stipulated in mandatory applicable law. - * - * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no - * responsibility for the consequences of use of such Information nor for any infringement of patents or - * other rights of third parties which may result from its use. No license is granted by implication or - * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are - * subject to change without notice. - * - * It is not allowed to deliver the source code of the Software to any third party without permission of - * Bosch Sensortec. - * - */ - -/*! - * @file bsec_iot_example.ino - * - * @brief - * Example for using of BSEC library in a fixed configuration with the BME680 sensor. - * This works by running an endless loop in the bsec_iot_loop() function. - */ - -/*! - * @addtogroup bsec_examples BSEC Examples - * @brief BSEC usage examples - * @{*/ - -/**********************************************************************************************************************/ -/* header files */ -/**********************************************************************************************************************/ - -#include "bsec_integration.h" -#include - -/**********************************************************************************************************************/ -/* functions */ -/**********************************************************************************************************************/ - -/*! - * @brief Write operation in either Wire or SPI - * - * param[in] dev_addr Wire or SPI device address - * param[in] reg_addr register address - * param[in] reg_data_ptr pointer to the data to be written - * param[in] data_len number of bytes to be written - * - * @return result of the bus communication function - */ -int8_t bus_write(uint8_t dev_addr, uint8_t reg_addr, uint8_t *reg_data_ptr, uint16_t data_len) -{ - Wire.beginTransmission(dev_addr); - Wire.write(reg_addr); /* Set register address to start writing to */ - - /* Write the data */ - for (int index = 0; index < data_len; index++) { - Wire.write(reg_data_ptr[index]); - } - - return (int8_t)Wire.endTransmission(); -} - -/*! - * @brief Read operation in either Wire or SPI - * - * param[in] dev_addr Wire or SPI device address - * param[in] reg_addr register address - * param[out] reg_data_ptr pointer to the memory to be used to store the read data - * param[in] data_len number of bytes to be read - * - * @return result of the bus communication function - */ -int8_t bus_read(uint8_t dev_addr, uint8_t reg_addr, uint8_t *reg_data_ptr, uint16_t data_len) -{ - int8_t comResult = 0; - Wire.beginTransmission(dev_addr); - Wire.write(reg_addr); /* Set register address to start reading from */ - comResult = Wire.endTransmission(); - - delayMicroseconds(150); /* Precautionary response delay */ - Wire.requestFrom(dev_addr, (uint8_t)data_len); /* Request data */ - - int index = 0; - while (Wire.available()) /* The slave device may send less than requested (burst read) */ - { - reg_data_ptr[index] = Wire.read(); - index++; - } - - return comResult; -} - -/*! - * @brief System specific implementation of sleep function - * - * @param[in] t_ms time in milliseconds - * - * @return none - */ -void sleep(uint32_t t_ms) -{ - delay(t_ms); -} - -/*! - * @brief Capture the system time in microseconds - * - * @return system_current_time current system timestamp in microseconds - */ -int64_t get_timestamp_us() -{ - return (int64_t) millis() * 1000; -} - -/*! - * @brief Handling of the ready outputs - * - * @param[in] timestamp time in nanoseconds - * @param[in] iaq IAQ signal - * @param[in] iaq_accuracy accuracy of IAQ signal - * @param[in] temperature temperature signal - * @param[in] humidity humidity signal - * @param[in] pressure pressure signal - * @param[in] raw_temperature raw temperature signal - * @param[in] raw_humidity raw humidity signal - * @param[in] gas raw gas sensor signal - * @param[in] bsec_status value returned by the bsec_do_steps() call - * - * @return none - */ -void output_ready(int64_t timestamp, float iaq, uint8_t iaq_accuracy, float temperature, float humidity, - float pressure, float raw_temperature, float raw_humidity, float gas, bsec_library_return_t bsec_status, - float static_iaq, float co2_equivalent, float breath_voc_equivalent) -{ - Serial.print("["); - Serial.print(timestamp/1e6); - Serial.print("] T: "); - Serial.print(temperature); - Serial.print("| rH: "); - Serial.print(humidity); - Serial.print("| IAQ: "); - Serial.print(iaq); - Serial.print(" ("); - Serial.print(iaq_accuracy); - Serial.print("| Static IAQ: "); - Serial.print(static_iaq); - Serial.print("| CO2e: "); - Serial.print(co2_equivalent); - Serial.print("| bVOC: "); - Serial.println(breath_voc_equivalent); -} - -/*! - * @brief Load previous library state from non-volatile memory - * - * @param[in,out] state_buffer buffer to hold the loaded state string - * @param[in] n_buffer size of the allocated state buffer - * - * @return number of bytes copied to state_buffer - */ -uint32_t state_load(uint8_t *state_buffer, uint32_t n_buffer) -{ - // ... - // Load a previous library state from non-volatile memory, if available. - // - // Return zero if loading was unsuccessful or no state was available, - // otherwise return length of loaded state string. - // ... - return 0; -} - -/*! - * @brief Save library state to non-volatile memory - * - * @param[in] state_buffer buffer holding the state to be stored - * @param[in] length length of the state string to be stored - * - * @return none - */ -void state_save(const uint8_t *state_buffer, uint32_t length) -{ - // ... - // Save the string some form of non-volatile memory, if possible. - // ... -} - -/*! - * @brief Load library config from non-volatile memory - * - * @param[in,out] config_buffer buffer to hold the loaded state string - * @param[in] n_buffer size of the allocated state buffer - * - * @return number of bytes copied to config_buffer - */ -uint32_t config_load(uint8_t *config_buffer, uint32_t n_buffer) -{ - // ... - // Load a library config from non-volatile memory, if available. - // - // Return zero if loading was unsuccessful or no config was available, - // otherwise return length of loaded config string. - // ... - return 0; -} - -/*! - * @brief Main function which configures BSEC library and then reads and processes the data from sensor based - * on timer ticks - * - * @return result of the processing - */ -void setup() -{ - return_values_init ret; - - /* Init I2C and serial communication */ - Wire.begin(); - Serial.begin(115200); - - /* Call to the function which initializes the BSEC library - * Switch on low-power mode and provide no temperature offset */ - ret = bsec_iot_init(BSEC_SAMPLE_RATE_LP, 5.0f, bus_write, bus_read, sleep, state_load, config_load); - if (ret.bme680_status) - { - /* Could not intialize BME680 */ - Serial.println("Error while initializing BME680"); - return; - } - else if (ret.bsec_status) - { - /* Could not intialize BSEC library */ - Serial.println("Error while initializing BSEC library"); - return; - } - - /* Call to endless loop function which reads and processes data based on sensor settings */ - /* State is saved every 10.000 samples, which means every 10.000 * 3 secs = 500 minutes */ - bsec_iot_loop(sleep, get_timestamp_us, output_ready, state_save, 10000); -} - -void loop() -{ -} - -/*! @}*/ - diff --git a/lib/Bosch-BSEC/examples/bsec_iot_ulp_plus_example.c b/lib/Bosch-BSEC/examples/bsec_iot_ulp_plus_example.c deleted file mode 100644 index 74507ad3..00000000 --- a/lib/Bosch-BSEC/examples/bsec_iot_ulp_plus_example.c +++ /dev/null @@ -1,290 +0,0 @@ -/* - * Copyright (C) 2017 Robert Bosch. All Rights Reserved. - * - * Disclaimer - * - * Common: - * Bosch Sensortec products are developed for the consumer goods industry. They may only be used - * within the parameters of the respective valid product data sheet. Bosch Sensortec products are - * provided with the express understanding that there is no warranty of fitness for a particular purpose. - * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device - * that may lead to bodily harm or property damage if the system or device malfunctions. In addition, - * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems. - * The resale and/or use of products are at the purchasers own risk and his own responsibility. The - * examination of fitness for the intended use is the sole responsibility of the Purchaser. - * - * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for - * incidental, or consequential damages, arising from any product use not covered by the parameters of - * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch - * Sensortec for all costs in connection with such claims. - * - * The purchaser must monitor the market for the purchased products, particularly with regard to - * product safety and inform Bosch Sensortec without delay of all security relevant incidents. - * - * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid - * technical specifications of the product series. They are therefore not intended or fit for resale to third - * parties or for use in end products. Their sole purpose is internal client testing. The testing of an - * engineering sample may in no way replace the testing of a product series. Bosch Sensortec - * assumes no liability for the use of engineering samples. By accepting the engineering samples, the - * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering - * samples. - * - * Special: - * This software module (hereinafter called "Software") and any information on application-sheets - * (hereinafter called "Information") is provided free of charge for the sole purpose to support your - * application work. The Software and Information is subject to the following terms and conditions: - * - * The Software is specifically designed for the exclusive use for Bosch Sensortec products by - * personnel who have special experience and training. Do not use this Software if you do not have the - * proper experience or training. - * - * This Software package is provided `` as is `` and without any expressed or implied warranties, - * including without limitation, the implied warranties of merchantability and fitness for a particular - * purpose. - * - * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment - * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their - * representatives and agents shall not be liable for any direct or indirect damages or injury, except as - * otherwise stipulated in mandatory applicable law. - * - * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no - * responsibility for the consequences of use of such Information nor for any infringement of patents or - * other rights of third parties which may result from its use. No license is granted by implication or - * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are - * subject to change without notice. - * - * It is not allowed to deliver the source code of the Software to any third party without permission of - * Bosch Sensortec. - * - */ - -/*! - * @file bsec_iot_ulp_plus_example.c - * - * @brief - * Example for using of BSEC library in a fixed configuration with the BME680 sensor. - * This works by running an endless loop in the bsec_iot_loop() function. - */ - -/*! - * @addtogroup bsec_examples BSEC Examples - * @brief BSEC usage examples - * @{*/ - -/**********************************************************************************************************************/ -/* header files */ -/**********************************************************************************************************************/ -/* BSEC configuration files are available in the config/ folder of the release package. Please chose a configuration file with 3s maximum time between `bsec_sensor_control()` calls */ -#include "bsec_integration.h" - -/**********************************************************************************************************************/ -/* functions */ -/**********************************************************************************************************************/ - -/*! - * @brief Write operation in either I2C or SPI - * - * param[in] dev_addr I2C or SPI device address - * param[in] reg_addr register address - * param[in] reg_data_ptr pointer to the data to be written - * param[in] data_len number of bytes to be written - * - * @return result of the bus communication function - */ -int8_t bus_write(uint8_t dev_addr, uint8_t reg_addr, uint8_t *reg_data_ptr, uint16_t data_len) -{ - // ... - // Please insert system specific function to write to the bus where BME680 is connected - // ... - return 0; -} - -/*! - * @brief Read operation in either I2C or SPI - * - * param[in] dev_addr I2C or SPI device address - * param[in] reg_addr register address - * param[out] reg_data_ptr pointer to the memory to be used to store the read data - * param[in] data_len number of bytes to be read - * - * @return result of the bus communication function - */ -int8_t bus_read(uint8_t dev_addr, uint8_t reg_addr, uint8_t *reg_data_ptr, uint16_t data_len) -{ - // ... - // Please insert system specific function to read from bus where BME680 is connected - // ... - return 0; -} - -/*! - * @brief System specific implementation of sleep function - * - * @param[in] t_ms time in milliseconds - * - * @return none - */ -void sleep(uint32_t t_ms) -{ - // ... - // Please insert system specific function sleep or delay for t_ms milliseconds - // ... -} - -/*! - * @brief Capture the system time in microseconds - * - * @return system_current_time current system timestamp in microseconds - */ -int64_t get_timestamp_us() -{ - int64_t system_current_time = 0; - // ... - // Please insert system specific function to retrieve a timestamp (in microseconds) - // ... - return system_current_time; -} - -/*! - * @brief Handling of the ready outputs - * - * @param[in] timestamp time in nanoseconds - * @param[in] iaq IAQ signal - * @param[in] iaq_accuracy accuracy of IAQ signal - * @param[in] temperature temperature signal - * @param[in] humidity humidity signal - * @param[in] pressure pressure signal - * @param[in] raw_temperature raw temperature signal - * @param[in] raw_humidity raw humidity signal - * @param[in] gas raw gas sensor signal - * @param[in] bsec_status value returned by the bsec_do_steps() call - * - * @return none - */ -void output_ready(int64_t timestamp, float iaq, uint8_t iaq_accuracy, float temperature, float humidity, - float pressure, float raw_temperature, float raw_humidity, float gas, bsec_library_return_t bsec_status, - float static_iaq, float co2_equivalent, float breath_voc_equivalent) -{ - // ... - // Please insert system specific code to further process or display the BSEC outputs - // ... -} - -/*! - * @brief Load previous library state from non-volatile memory - * - * @param[in,out] state_buffer buffer to hold the loaded state string - * @param[in] n_buffer size of the allocated state buffer - * - * @return number of bytes copied to state_buffer - */ -uint32_t state_load(uint8_t *state_buffer, uint32_t n_buffer) -{ - // ... - // Load a previous library state from non-volatile memory, if available. - // - // Return zero if loading was unsuccessful or no state was available, - // otherwise return length of loaded state string. - // ... - return 0; -} - -/*! - * @brief Save library state to non-volatile memory - * - * @param[in] state_buffer buffer holding the state to be stored - * @param[in] length length of the state string to be stored - * - * @return none - */ -void state_save(const uint8_t *state_buffer, uint32_t length) -{ - // ... - // Save the string some form of non-volatile memory, if possible. - // ... -} - -/*! - * @brief Load library config from non-volatile memory - * - * @param[in,out] config_buffer buffer to hold the loaded state string - * @param[in] n_buffer size of the allocated state buffer - * - * @return number of bytes copied to config_buffer - */ -uint32_t config_load(uint8_t *config_buffer, uint32_t n_buffer) -{ - // ... - // Load a library config from non-volatile memory, if available. - // - // Return zero if loading was unsuccessful or no config was available, - // otherwise return length of loaded config string. - // ... - return 0; -} - -/*! - * @brief Interrupt handler for press of a ULP plus button - * - * @return none - */ -void ulp_plus_button_press() -{ - /* We call bsec_update_subscription() in order to instruct BSEC to perform an extra measurement at the next - * possible time slot - */ - - bsec_sensor_configuration_t requested_virtual_sensors[1]; - uint8_t n_requested_virtual_sensors = 1; - bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR]; - uint8_t n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR; - bsec_library_return_t status = BSEC_OK; - - /* To trigger a ULP plus, we request the IAQ virtual sensor with a specific sample rate code */ - requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ; - requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND; - - /* Call bsec_update_subscription() to enable/disable the requested virtual sensors */ - status = bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, - &n_required_sensor_settings); - - /* The status code would tell is if the request was accepted. It will be rejected if the sensor is not already in - * ULP mode, or if the time difference between requests is too short, for example. */ -} - -/*! - * @brief Main function which configures BSEC library and then reads and processes the data from sensor based - * on timer ticks - * - * @return result of the processing - */ -int main() -{ - return_values_init ret; - // ... - // Attach a button (or other) interrupt here to the ulp_plus_button_press() handler function to - // enable this interrupt to trigger a ULP plus - // ... - - /* Call to the function which initializes the BSEC library - * Switch on ultra_low-power mode and provide no temperature offset */ - ret = bsec_iot_init(BSEC_SAMPLE_RATE_ULP, 0.0f, bus_write, bus_read, sleep, state_load, config_load); - if (ret.bme680_status) - { - /* Could not intialize BME680 or BSEC library */ - return (int)ret.bme680_status; - } - else if (ret.bsec_status) - { - /* Could not intialize BSEC library */ - return (int)ret.bsec_status; - } - /* Call to endless loop function which reads and processes data based on sensor settings */ - /* State is saved every 10.000 samples, which means every 100 * 300 secs = 500 minutes */ - bsec_iot_loop(sleep, get_timestamp_us, output_ready, state_save, 100); - - return 0; -} - -/*! @}*/ - diff --git a/lib/Bosch-BSEC/examples/bsec_iot_ulp_plus_example.ino b/lib/Bosch-BSEC/examples/bsec_iot_ulp_plus_example.ino deleted file mode 100644 index 7e2cff88..00000000 --- a/lib/Bosch-BSEC/examples/bsec_iot_ulp_plus_example.ino +++ /dev/null @@ -1,342 +0,0 @@ -/* - * Copyright (C) 2017 Robert Bosch. All Rights Reserved. - * - * Disclaimer - * - * Common: - * Bosch Sensortec products are developed for the consumer goods industry. They may only be used - * within the parameters of the respective valid product data sheet. Bosch Sensortec products are - * provided with the express understanding that there is no warranty of fitness for a particular purpose. - * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device - * that may lead to bodily harm or property damage if the system or device malfunctions. In addition, - * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems. - * The resale and/or use of products are at the purchasers own risk and his own responsibility. The - * examination of fitness for the intended use is the sole responsibility of the Purchaser. - * - * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for - * incidental, or consequential damages, arising from any product use not covered by the parameters of - * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch - * Sensortec for all costs in connection with such claims. - * - * The purchaser must monitor the market for the purchased products, particularly with regard to - * product safety and inform Bosch Sensortec without delay of all security relevant incidents. - * - * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid - * technical specifications of the product series. They are therefore not intended or fit for resale to third - * parties or for use in end products. Their sole purpose is internal client testing. The testing of an - * engineering sample may in no way replace the testing of a product series. Bosch Sensortec - * assumes no liability for the use of engineering samples. By accepting the engineering samples, the - * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering - * samples. - * - * Special: - * This software module (hereinafter called "Software") and any information on application-sheets - * (hereinafter called "Information") is provided free of charge for the sole purpose to support your - * application work. The Software and Information is subject to the following terms and conditions: - * - * The Software is specifically designed for the exclusive use for Bosch Sensortec products by - * personnel who have special experience and training. Do not use this Software if you do not have the - * proper experience or training. - * - * This Software package is provided `` as is `` and without any expressed or implied warranties, - * including without limitation, the implied warranties of merchantability and fitness for a particular - * purpose. - * - * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment - * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their - * representatives and agents shall not be liable for any direct or indirect damages or injury, except as - * otherwise stipulated in mandatory applicable law. - * - * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no - * responsibility for the consequences of use of such Information nor for any infringement of patents or - * other rights of third parties which may result from its use. No license is granted by implication or - * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are - * subject to change without notice. - * - * It is not allowed to deliver the source code of the Software to any third party without permission of - * Bosch Sensortec. - * - */ - -/*! - * @file bsec_iot_ulp_plus_example.ino - * - * @brief - * Example for using of BSEC library in a fixed configuration with the BME680 sensor. - * This works by running an endless loop in the bsec_iot_loop() function. - */ - -/*! - * @addtogroup bsec_examples BSEC Examples - * @brief BSEC usage examples - * @{*/ - -/**********************************************************************************************************************/ -/* header files */ -/**********************************************************************************************************************/ - -#include "bsec_integration.h" -#include "bsec_serialized_configurations_iaq.h" -#include - -/**********************************************************************************************************************/ -/* functions */ -/**********************************************************************************************************************/ - -/*! - * @brief Write operation in either Wire or SPI - * - * param[in] dev_addr Wire or SPI device address - * param[in] reg_addr register address - * param[in] reg_data_ptr pointer to the data to be written - * param[in] data_len number of bytes to be written - * - * @return result of the bus communication function - */ -int8_t bus_write(uint8_t dev_addr, uint8_t reg_addr, uint8_t *reg_data_ptr, uint16_t data_len) -{ - Wire.beginTransmission(dev_addr); - Wire.write(reg_addr); /* Set register address to start writing to */ - - /* Write the data */ - for (int index = 0; index < data_len; index++) { - Wire.write(reg_data_ptr[index]); - } - - return (int8_t)Wire.endTransmission(); -} - -/*! - * @brief Read operation in either Wire or SPI - * - * param[in] dev_addr Wire or SPI device address - * param[in] reg_addr register address - * param[out] reg_data_ptr pointer to the memory to be used to store the read data - * param[in] data_len number of bytes to be read - * - * @return result of the bus communication function - */ -int8_t bus_read(uint8_t dev_addr, uint8_t reg_addr, uint8_t *reg_data_ptr, uint16_t data_len) -{ - int8_t comResult = 0; - Wire.beginTransmission(dev_addr); - Wire.write(reg_addr); /* Set register address to start reading from */ - comResult = Wire.endTransmission(); - - delayMicroseconds(150); /* Precautionary response delay */ - Wire.requestFrom(dev_addr, (uint8_t)data_len); /* Request data */ - - int index = 0; - while (Wire.available()) /* The slave device may send less than requested (burst read) */ - { - reg_data_ptr[index] = Wire.read(); - index++; - } - - return comResult; -} - -/*! - * @brief System specific implementation of sleep function - * - * @param[in] t_ms time in milliseconds - * - * @return none - */ -void sleep(uint32_t t_ms) -{ - delay(t_ms); -} - -/*! - * @brief Capture the system time in microseconds - * - * @return system_current_time current system timestamp in microseconds - */ -int64_t get_timestamp_us() -{ - return (int64_t) millis() * 1000; -} - -/*! - * @brief Handling of the ready outputs - * - * @param[in] timestamp time in nanoseconds - * @param[in] iaq IAQ signal - * @param[in] iaq_accuracy accuracy of IAQ signal - * @param[in] temperature temperature signal - * @param[in] humidity humidity signal - * @param[in] pressure pressure signal - * @param[in] raw_temperature raw temperature signal - * @param[in] raw_humidity raw humidity signal - * @param[in] gas raw gas sensor signal - * @param[in] bsec_status value returned by the bsec_do_steps() call - * - * @return none - */ -void output_ready(int64_t timestamp, float iaq, uint8_t iaq_accuracy, float temperature, float humidity, - float pressure, float raw_temperature, float raw_humidity, float gas, bsec_library_return_t bsec_status, - float static_iaq, float co2_equivalent, float breath_voc_equivalent) -{ - Serial.print("["); - Serial.print(timestamp/1e6); - Serial.print("] T: "); - Serial.print(temperature); - Serial.print("| rH: "); - Serial.print(humidity); - Serial.print("| IAQ: "); - Serial.print(iaq); - Serial.print(" ("); - Serial.print(iaq_accuracy); - Serial.println(")"); -} - -/*! - * @brief Load previous library state from non-volatile memory - * - * @param[in,out] state_buffer buffer to hold the loaded state string - * @param[in] n_buffer size of the allocated state buffer - * - * @return number of bytes copied to state_buffer - */ -uint32_t state_load(uint8_t *state_buffer, uint32_t n_buffer) -{ - // ... - // Load a previous library state from non-volatile memory, if available. - // - // Return zero if loading was unsuccessful or no state was available, - // otherwise return length of loaded state string. - // ... - return 0; -} - -/*! - * @brief Save library state to non-volatile memory - * - * @param[in] state_buffer buffer holding the state to be stored - * @param[in] length length of the state string to be stored - * - * @return none - */ -void state_save(const uint8_t *state_buffer, uint32_t length) -{ - // ... - // Save the string some form of non-volatile memory, if possible. - // ... -} - -/*! - * @brief Load library config from non-volatile memory - * - * @param[in,out] config_buffer buffer to hold the loaded state string - * @param[in] n_buffer size of the allocated state buffer - * - * @return number of bytes copied to config_buffer - */ -uint32_t config_load(uint8_t *config_buffer, uint32_t n_buffer) -{ - // ... - // Load a library config from non-volatile memory, if available. - // - // Return zero if loading was unsuccessful or no config was available, - // otherwise return length of loaded config string. - // ... - - memcpy(config_buffer, bsec_config_iaq, sizeof(bsec_config_iaq)); - return sizeof(bsec_config_iaq); -} - -/*! - * @brief Interrupt handler for press of a ULP plus button - * - * @return none - */ -void ulp_plus_button_press() -{ - /* We call bsec_update_subscription() in order to instruct BSEC to perform an extra measurement at the next - * possible time slot - */ - - bsec_sensor_configuration_t requested_virtual_sensors[1]; - uint8_t n_requested_virtual_sensors = 1; - bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR]; - uint8_t n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR; - bsec_library_return_t status = BSEC_OK; - - /* To trigger a ULP plus, we request the IAQ virtual sensor with a specific sample rate code */ - requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ_ESTIMATE; - requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND; - - /* Call bsec_update_subscription() to enable/disable the requested virtual sensors */ - status = bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, - &n_required_sensor_settings); - - /* The status code would tell is if the request was accepted. It will be rejected if the sensor is not already in - * ULP mode, or if the time difference between requests is too short, for example. */ - if (status == BSEC_OK) - { - Serial.println("ULP plus triggered sucessfully."); - } - else - { - Serial.print("ULP plus request rejected. "); - switch (status) - { - case BSEC_W_SC_MODEXCEEDULPTIMELIMIT: - Serial.println("Request came within 20 s of a previous measurement."); - break; - case BSEC_W_SC_MODINSUFFICIENTWAITTIME: - Serial.println("Request came within 20 s of a ULP plus."); - break; - case BSEC_W_SU_MODINNOULP: - Serial.println("Sensor not in ULP mode."); - break; - } - } -} - -/*! - * @brief Main function which configures BSEC library and then reads and processes the data from sensor based - * on timer ticks - * - * @return result of the processing - */ -void setup() -{ - return_values_init ret; - - /* Init I2C and serial communication */ - Wire.begin(); - Serial.begin(115200); - - /* Setup button interrupt to trigger ULP plus */ - pinMode(2, INPUT_PULLUP); - attachInterrupt(digitalPinToInterrupt(2), ulp_plus_button_press, FALLING); - - /* Call to the function which initializes the BSEC library - * Switch on ultra_low-power mode and provide no temperature offset */ - ret = bsec_iot_init(BSEC_SAMPLE_RATE_ULP, 5.0f, bus_write, bus_read, sleep, state_load, config_load); - if (ret.bme680_status) - { - /* Could not intialize BME680 */ - Serial.println("Error while initializing BME680"); - return; - } - else if (ret.bsec_status) - { - /* Could not intialize BSEC library */ - Serial.println("Error while initializing BSEC library"); - return; - } - - /* Call to endless loop function which reads and processes data based on sensor settings */ - /* State is saved every 10.000 samples, which means every 100 * 300 secs = 500 minutes */ - bsec_iot_loop(sleep, get_timestamp_us, output_ready, state_save, 100); -} - -void loop() -{ -} - -/*! @}*/ - diff --git a/lib/Bosch-BSEC/libalgobsec.a.Size.log b/lib/Bosch-BSEC/libalgobsec.a.Size.log deleted file mode 100644 index 23acb73c..00000000 --- a/lib/Bosch-BSEC/libalgobsec.a.Size.log +++ /dev/null @@ -1,2 +0,0 @@ - text data bss dec hex filename - 23795 0 1120 24915 6153 (TOTALS) diff --git a/src/bme680mems.cpp b/src/bme680mems.cpp index e449a8a2..7226919b 100644 --- a/src/bme680mems.cpp +++ b/src/bme680mems.cpp @@ -8,6 +8,43 @@ static const char TAG[] = "main"; bmeStatus_t bme_status; TaskHandle_t BmeTask; +// BSEC configuration +// 3,3V supply voltage; 3s sensor_control; 4 days calibration +// change this const if not applicable for your application (see BME680 +// datasheet) +const uint8_t bsec_config_iaq[454] = { + 1, 7, 4, 1, 61, 0, 0, 0, 0, 0, 0, 0, 174, 1, 0, + 0, 48, 0, 1, 0, 137, 65, 0, 63, 205, 204, 204, 62, 0, 0, + 64, 63, 205, 204, 204, 62, 0, 0, 225, 68, 0, 192, 168, 71, 64, + 49, 119, 76, 0, 0, 0, 0, 0, 80, 5, 95, 0, 0, 0, 0, + 0, 0, 0, 0, 28, 0, 2, 0, 0, 244, 1, 225, 0, 25, 0, + 0, 128, 64, 0, 0, 32, 65, 144, 1, 0, 0, 112, 65, 0, 0, + 0, 63, 16, 0, 3, 0, 10, 215, 163, 60, 10, 215, 35, 59, 10, + 215, 35, 59, 9, 0, 5, 0, 0, 0, 0, 0, 1, 88, 0, 9, + 0, 229, 208, 34, 62, 0, 0, 0, 0, 0, 0, 0, 0, 218, 27, + 156, 62, 225, 11, 67, 64, 0, 0, 160, 64, 0, 0, 0, 0, 0, + 0, 0, 0, 94, 75, 72, 189, 93, 254, 159, 64, 66, 62, 160, 191, + 0, 0, 0, 0, 0, 0, 0, 0, 33, 31, 180, 190, 138, 176, 97, + 64, 65, 241, 99, 190, 0, 0, 0, 0, 0, 0, 0, 0, 167, 121, + 71, 61, 165, 189, 41, 192, 184, 30, 189, 64, 12, 0, 10, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 229, 0, 254, 0, 2, 1, 5, 48, + 117, 100, 0, 44, 1, 112, 23, 151, 7, 132, 3, 197, 0, 92, 4, + 144, 1, 64, 1, 64, 1, 144, 1, 48, 117, 48, 117, 48, 117, 48, + 117, 100, 0, 100, 0, 100, 0, 48, 117, 48, 117, 48, 117, 100, 0, + 100, 0, 48, 117, 48, 117, 100, 0, 100, 0, 100, 0, 100, 0, 48, + 117, 48, 117, 48, 117, 100, 0, 100, 0, 100, 0, 48, 117, 48, 117, + 100, 0, 100, 0, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, + 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, + 44, 1, 8, 7, 8, 7, 8, 7, 8, 7, 8, 7, 8, 7, 8, + 7, 8, 7, 8, 7, 8, 7, 8, 7, 8, 7, 8, 7, 8, 7, + 112, 23, 112, 23, 112, 23, 112, 23, 112, 23, 112, 23, 112, 23, 112, + 23, 112, 23, 112, 23, 112, 23, 112, 23, 112, 23, 112, 23, 255, 255, + 255, 255, 255, 255, 255, 255, 220, 5, 220, 5, 220, 5, 255, 255, 255, + 255, 255, 255, 220, 5, 220, 5, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 44, 1, 0, 0, 0, 0, + 239, 79, 0, 0}; + // initialize BME680 sensor int bme_init(void) { @@ -22,9 +59,11 @@ int bme_init(void) { user_delay_ms, state_load, config_load); if ((int)ret.bme680_status) { - ESP_LOGE(TAG, "Could not initialize BME680, error %d", (int)ret.bme680_status); + ESP_LOGE(TAG, "Could not initialize BME680, error %d", + (int)ret.bme680_status); } else if ((int)ret.bsec_status) { - ESP_LOGE(TAG, "Could not initialize BSEC library, error %d", (int)ret.bsec_status); + ESP_LOGE(TAG, "Could not initialize BSEC library, error %d", + (int)ret.bsec_status); } else { ESP_LOGI(TAG, "BME680 sensor found and initialized"); return 1; @@ -131,13 +170,13 @@ void state_save(const uint8_t *state_buffer, uint32_t length) { * @return number of bytes copied to config_buffer */ uint32_t config_load(uint8_t *config_buffer, uint32_t n_buffer) { - // ... + // Load a library config from non-volatile memory, if available. - // // Return zero if loading was unsuccessful or no config was available, // otherwise return length of loaded config string. - // ... - return 0; + + memcpy(config_buffer, bsec_config_iaq, sizeof(bsec_config_iaq)); + return sizeof(bsec_config_iaq); } /*! diff --git a/src/lorawan.cpp b/src/lorawan.cpp index ba3e11f5..82ce696f 100644 --- a/src/lorawan.cpp +++ b/src/lorawan.cpp @@ -164,7 +164,7 @@ void onEvent(ev_t ev) { switch (ev) { case EV_SCAN_TIMEOUT: - strcpy_P(buff, PSTR("SCAN TIMEOUT")); + strcpy_P(buff, PSTR("SCAN_TIMEOUT")); break; case EV_BEACON_FOUND: @@ -210,8 +210,8 @@ void onEvent(ev_t ev) { break; case EV_TXCOMPLETE: - strcpy_P(buff, (LMIC.txrxFlags & TXRX_ACK) ? PSTR("RECEIVED ACK") - : PSTR("TX COMPLETE")); + strcpy_P(buff, (LMIC.txrxFlags & TXRX_ACK) ? PSTR("RECEIVED_ACK") + : PSTR("TX_COMPLETE")); sprintf(display_line6, " "); // clear previous lmic status if (LMIC.dataLen) { @@ -237,20 +237,20 @@ void onEvent(ev_t ev) { case EV_RXCOMPLETE: // data received in ping slot - strcpy_P(buff, PSTR("RX COMPLETE")); + strcpy_P(buff, PSTR("RX_COMPLETE")); break; case EV_LINK_DEAD: - strcpy_P(buff, PSTR("LINK DEAD")); + strcpy_P(buff, PSTR("LINK_DEAD")); break; case EV_LINK_ALIVE: - strcpy_P(buff, PSTR("LINK ALIVE")); + strcpy_P(buff, PSTR("LINK_ALIVE")); break; case EV_TXSTART: if (!(LMIC.opmode & OP_JOINING)) - strcpy_P(buff, PSTR("TX START")); + strcpy_P(buff, PSTR("TX_START")); break; case EV_SCAN_FOUND: @@ -262,7 +262,7 @@ void onEvent(ev_t ev) { break; default: - sprintf_P(buff, PSTR("UNKNOWN EVENT %d"), ev); + sprintf_P(buff, PSTR("UNKNOWN_EVENT_%d"), ev); break; } diff --git a/src/paxcounter.conf b/src/paxcounter.conf index 5165cf1f..460e9c7e 100644 --- a/src/paxcounter.conf +++ b/src/paxcounter.conf @@ -11,7 +11,7 @@ // Payload send cycle and encoding #define SEND_SECS 30 // payload send cycle [seconds/2] -> 60 sec. -#define PAYLOAD_ENCODER 3 // payload encoder: 1=Plain, 2=Packed, 3=CayenneLPP dynamic, 4=CayenneLPP packed +#define PAYLOAD_ENCODER 2 // payload encoder: 1=Plain, 2=Packed, 3=CayenneLPP dynamic, 4=CayenneLPP packed // Set this to include BLE counting and vendor filter functions #define VENDORFILTER 1 // comment out if you want to count things, not people diff --git a/src/sensor.cpp b/src/sensor.cpp index 53432bbc..05823f3d 100644 --- a/src/sensor.cpp +++ b/src/sensor.cpp @@ -4,25 +4,33 @@ // Local logging tag static const char TAG[] = "main"; -#define SENSORBUFFER 10 // max. size of user sensor data buffer in bytes [default=20] +#define SENSORBUFFER \ + 10 // max. size of user sensor data buffer in bytes [default=20] void sensor_init(void) { - // this function is called dureing device startup - // put your sensor initialization routines here + // this function is called during device startup + // put your user sensor initialization routines here } uint8_t sensor_mask(uint8_t sensor_no) { switch (sensor_no) { + case 0: + return (uint8_t)COUNT_DATA; case 1: return (uint8_t)SENSOR1_DATA; case 2: return (uint8_t)SENSOR2_DATA; - break; case 3: return (uint8_t)SENSOR3_DATA; case 4: return (uint8_t)SENSOR4_DATA; + case 5: + return (uint8_t)GPS_DATA; + case 6: + return (uint8_t)MEMS_DATA; + case 7: + return (uint8_t)ALARM_DATA; } } From 589e1851533214c9d768bf5cc2b703f24d5e3f3a Mon Sep 17 00:00:00 2001 From: Klaus K Wilting Date: Sun, 25 Nov 2018 21:39:00 +0100 Subject: [PATCH 3/5] BSEC optimization --- .../config/generic_18v_300s_28d/bsec_iaq.config | Bin 0 -> 458 bytes .../config/generic_18v_300s_28d/bsec_iaq.csv | 1 + .../bsec_serialized_configurations_iaq.c | 5 +++++ .../bsec_serialized_configurations_iaq.h | 4 ++++ .../config/generic_18v_300s_4d/bsec_iaq.config | Bin 0 -> 458 bytes .../config/generic_18v_300s_4d/bsec_iaq.csv | 1 + .../bsec_serialized_configurations_iaq.c | 5 +++++ .../bsec_serialized_configurations_iaq.h | 4 ++++ .../config/generic_18v_3s_28d/bsec_iaq.config | Bin 0 -> 458 bytes .../config/generic_18v_3s_28d/bsec_iaq.csv | 1 + .../bsec_serialized_configurations_iaq.c | 5 +++++ .../bsec_serialized_configurations_iaq.h | 4 ++++ .../config/generic_18v_3s_4d/bsec_iaq.config | Bin 0 -> 458 bytes .../config/generic_18v_3s_4d/bsec_iaq.csv | 1 + .../bsec_serialized_configurations_iaq.c | 5 +++++ .../bsec_serialized_configurations_iaq.h | 4 ++++ .../config/generic_33v_300s_28d/bsec_iaq.config | Bin 0 -> 458 bytes .../config/generic_33v_300s_28d/bsec_iaq.csv | 1 + .../bsec_serialized_configurations_iaq.c | 5 +++++ .../bsec_serialized_configurations_iaq.h | 4 ++++ .../config/generic_33v_300s_4d/bsec_iaq.config | Bin 0 -> 458 bytes .../config/generic_33v_300s_4d/bsec_iaq.csv | 1 + .../bsec_serialized_configurations_iaq.c | 5 +++++ .../bsec_serialized_configurations_iaq.h | 4 ++++ .../config/generic_33v_3s_28d/bsec_iaq.config | Bin 0 -> 458 bytes .../config/generic_33v_3s_28d/bsec_iaq.csv | 1 + .../bsec_serialized_configurations_iaq.c | 5 +++++ .../bsec_serialized_configurations_iaq.h | 4 ++++ .../config/generic_33v_3s_4d/bsec_iaq.config | Bin 0 -> 458 bytes .../config/generic_33v_3s_4d/bsec_iaq.csv | 1 + .../bsec_serialized_configurations_iaq.c | 5 +++++ .../bsec_serialized_configurations_iaq.h | 4 ++++ platformio.ini | 6 +++--- src/bme680mems.cpp | 8 ++++---- 34 files changed, 87 insertions(+), 7 deletions(-) create mode 100644 lib/Bosch-BSEC/config/generic_18v_300s_28d/bsec_iaq.config create mode 100644 lib/Bosch-BSEC/config/generic_18v_300s_28d/bsec_iaq.csv create mode 100644 lib/Bosch-BSEC/config/generic_18v_300s_28d/bsec_serialized_configurations_iaq.c create mode 100644 lib/Bosch-BSEC/config/generic_18v_300s_28d/bsec_serialized_configurations_iaq.h create mode 100644 lib/Bosch-BSEC/config/generic_18v_300s_4d/bsec_iaq.config create mode 100644 lib/Bosch-BSEC/config/generic_18v_300s_4d/bsec_iaq.csv create mode 100644 lib/Bosch-BSEC/config/generic_18v_300s_4d/bsec_serialized_configurations_iaq.c create mode 100644 lib/Bosch-BSEC/config/generic_18v_300s_4d/bsec_serialized_configurations_iaq.h create mode 100644 lib/Bosch-BSEC/config/generic_18v_3s_28d/bsec_iaq.config create mode 100644 lib/Bosch-BSEC/config/generic_18v_3s_28d/bsec_iaq.csv create mode 100644 lib/Bosch-BSEC/config/generic_18v_3s_28d/bsec_serialized_configurations_iaq.c create mode 100644 lib/Bosch-BSEC/config/generic_18v_3s_28d/bsec_serialized_configurations_iaq.h create mode 100644 lib/Bosch-BSEC/config/generic_18v_3s_4d/bsec_iaq.config create mode 100644 lib/Bosch-BSEC/config/generic_18v_3s_4d/bsec_iaq.csv create mode 100644 lib/Bosch-BSEC/config/generic_18v_3s_4d/bsec_serialized_configurations_iaq.c create mode 100644 lib/Bosch-BSEC/config/generic_18v_3s_4d/bsec_serialized_configurations_iaq.h create mode 100644 lib/Bosch-BSEC/config/generic_33v_300s_28d/bsec_iaq.config create mode 100644 lib/Bosch-BSEC/config/generic_33v_300s_28d/bsec_iaq.csv create mode 100644 lib/Bosch-BSEC/config/generic_33v_300s_28d/bsec_serialized_configurations_iaq.c create mode 100644 lib/Bosch-BSEC/config/generic_33v_300s_28d/bsec_serialized_configurations_iaq.h create mode 100644 lib/Bosch-BSEC/config/generic_33v_300s_4d/bsec_iaq.config create mode 100644 lib/Bosch-BSEC/config/generic_33v_300s_4d/bsec_iaq.csv create mode 100644 lib/Bosch-BSEC/config/generic_33v_300s_4d/bsec_serialized_configurations_iaq.c create mode 100644 lib/Bosch-BSEC/config/generic_33v_300s_4d/bsec_serialized_configurations_iaq.h create mode 100644 lib/Bosch-BSEC/config/generic_33v_3s_28d/bsec_iaq.config create mode 100644 lib/Bosch-BSEC/config/generic_33v_3s_28d/bsec_iaq.csv create mode 100644 lib/Bosch-BSEC/config/generic_33v_3s_28d/bsec_serialized_configurations_iaq.c create mode 100644 lib/Bosch-BSEC/config/generic_33v_3s_28d/bsec_serialized_configurations_iaq.h create mode 100644 lib/Bosch-BSEC/config/generic_33v_3s_4d/bsec_iaq.config create mode 100644 lib/Bosch-BSEC/config/generic_33v_3s_4d/bsec_iaq.csv create mode 100644 lib/Bosch-BSEC/config/generic_33v_3s_4d/bsec_serialized_configurations_iaq.c create mode 100644 lib/Bosch-BSEC/config/generic_33v_3s_4d/bsec_serialized_configurations_iaq.h diff --git a/lib/Bosch-BSEC/config/generic_18v_300s_28d/bsec_iaq.config b/lib/Bosch-BSEC/config/generic_18v_300s_28d/bsec_iaq.config new file mode 100644 index 0000000000000000000000000000000000000000..f6c7b918f3b95beb55d121534326599c71eedbb7 GIT binary patch literal 458 zcmX@c$iTqJ&cbNR00HZOd;VFh50B$49f&Y2OyllXiy4)DGVTp wV1rl?F=SB)8zip7h#PXS + +extern const uint8_t bsec_config_iaq[454]; + diff --git a/lib/Bosch-BSEC/config/generic_18v_300s_4d/bsec_iaq.config b/lib/Bosch-BSEC/config/generic_18v_300s_4d/bsec_iaq.config new file mode 100644 index 0000000000000000000000000000000000000000..b0fff47ac22c6b3f89d7ec2b0b35e9fb8a5204fa GIT binary patch literal 458 zcmX@c$iTqJ&cbNR00HZOd;*t#zVC* z$S^Q5FnnQr$RNqU(BQzppx`(GXi9-2P~KjEfti8p`eGZd>&n(3%*ntC*2WmYz{$Y= zVH(U{2AP_Nwk8eN?HL#r0F8ivvuAkh(yyx9J+t>Y027<|)@J{2D+l|H0nH9DvDkl) z?aXXi_X8d4z{9`=6J~hI@Q;Csk=39yg+Yh0KzurT3-eKi7?uf)4nR18(V!FpQy4%H w!3MD)V#uNpHb`8D5jW&u#|;a_al`*maEBEHAshq?CW}cMl!APF_&);!0B5g)-~a#s literal 0 HcmV?d00001 diff --git a/lib/Bosch-BSEC/config/generic_18v_300s_4d/bsec_iaq.csv b/lib/Bosch-BSEC/config/generic_18v_300s_4d/bsec_iaq.csv new file mode 100644 index 00000000..318c0691 --- /dev/null +++ b/lib/Bosch-BSEC/config/generic_18v_300s_4d/bsec_iaq.csv @@ -0,0 +1 @@ +454,1,7,4,1,61,0,0,0,0,0,0,0,174,1,0,0,48,0,1,0,137,65,0,63,205,204,204,62,0,0,64,63,205,204,204,62,0,0,225,68,0,192,168,71,64,49,119,76,0,0,0,0,0,80,5,95,0,0,0,0,0,0,0,0,28,0,2,0,0,244,1,225,0,25,0,0,128,64,0,0,32,65,144,1,0,0,112,65,0,0,0,63,16,0,3,0,10,215,163,60,10,215,35,59,10,215,35,59,9,0,5,0,0,0,0,0,1,88,0,9,0,7,240,150,61,0,0,0,0,0,0,0,0,28,124,225,61,52,128,215,63,0,0,160,64,0,0,0,0,0,0,0,0,205,204,12,62,103,213,39,62,230,63,76,192,0,0,0,0,0,0,0,0,145,237,60,191,251,58,64,63,177,80,131,64,0,0,0,0,0,0,0,0,93,254,227,62,54,60,133,191,0,0,64,64,12,0,10,0,0,0,0,0,0,0,0,0,229,0,254,0,2,1,5,48,117,100,0,44,1,112,23,151,7,132,3,197,0,92,4,144,1,64,1,64,1,144,1,48,117,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,48,117,48,117,100,0,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,100,0,100,0,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,255,255,255,255,255,255,255,255,220,5,220,5,220,5,255,255,255,255,255,255,220,5,220,5,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,117,0,0,0,0,195,255,0,0 diff --git a/lib/Bosch-BSEC/config/generic_18v_300s_4d/bsec_serialized_configurations_iaq.c b/lib/Bosch-BSEC/config/generic_18v_300s_4d/bsec_serialized_configurations_iaq.c new file mode 100644 index 00000000..85884b30 --- /dev/null +++ b/lib/Bosch-BSEC/config/generic_18v_300s_4d/bsec_serialized_configurations_iaq.c @@ -0,0 +1,5 @@ +#include "bsec_serialized_configurations_iaq.h" + +const uint8_t bsec_config_iaq[454] = + {1,7,4,1,61,0,0,0,0,0,0,0,174,1,0,0,48,0,1,0,137,65,0,63,205,204,204,62,0,0,64,63,205,204,204,62,0,0,225,68,0,192,168,71,64,49,119,76,0,0,0,0,0,80,5,95,0,0,0,0,0,0,0,0,28,0,2,0,0,244,1,225,0,25,0,0,128,64,0,0,32,65,144,1,0,0,112,65,0,0,0,63,16,0,3,0,10,215,163,60,10,215,35,59,10,215,35,59,9,0,5,0,0,0,0,0,1,88,0,9,0,7,240,150,61,0,0,0,0,0,0,0,0,28,124,225,61,52,128,215,63,0,0,160,64,0,0,0,0,0,0,0,0,205,204,12,62,103,213,39,62,230,63,76,192,0,0,0,0,0,0,0,0,145,237,60,191,251,58,64,63,177,80,131,64,0,0,0,0,0,0,0,0,93,254,227,62,54,60,133,191,0,0,64,64,12,0,10,0,0,0,0,0,0,0,0,0,229,0,254,0,2,1,5,48,117,100,0,44,1,112,23,151,7,132,3,197,0,92,4,144,1,64,1,64,1,144,1,48,117,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,48,117,48,117,100,0,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,100,0,100,0,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,255,255,255,255,255,255,255,255,220,5,220,5,220,5,255,255,255,255,255,255,220,5,220,5,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,117,0,0,0,0,195,255,0,0}; + diff --git a/lib/Bosch-BSEC/config/generic_18v_300s_4d/bsec_serialized_configurations_iaq.h b/lib/Bosch-BSEC/config/generic_18v_300s_4d/bsec_serialized_configurations_iaq.h new file mode 100644 index 00000000..1986e2be --- /dev/null +++ b/lib/Bosch-BSEC/config/generic_18v_300s_4d/bsec_serialized_configurations_iaq.h @@ -0,0 +1,4 @@ +#include + +extern const uint8_t bsec_config_iaq[454]; + diff --git a/lib/Bosch-BSEC/config/generic_18v_3s_28d/bsec_iaq.config b/lib/Bosch-BSEC/config/generic_18v_3s_28d/bsec_iaq.config new file mode 100644 index 0000000000000000000000000000000000000000..3a2fcdf2dc3646d6db0f936d2c9dcaf25e06fa31 GIT binary patch literal 458 zcmX@c$iTqJ&cbNR00HZOd;VFh50B$49f&Y2OyllXiy4)DGVTp xV1rl?F=SB)8zip7h#PXS + +extern const uint8_t bsec_config_iaq[454]; + diff --git a/lib/Bosch-BSEC/config/generic_18v_3s_4d/bsec_iaq.config b/lib/Bosch-BSEC/config/generic_18v_3s_4d/bsec_iaq.config new file mode 100644 index 0000000000000000000000000000000000000000..7bd1e535ac45b2dffd805d568ea0e9e683008987 GIT binary patch literal 458 zcmX@c$iTqJ&cbNR00HZOd;*t#zVC* z$S^Q5FnnQr$RNqU(BQzppx`(GXi9-2P~KjEfti8p`eGZd>&n(3%*ntC*2WmYz{$Y= zVH(U{2AP_Nwk8eN?HL#r0F8ivvuAkh(yyx9J+t>Y027<|)@J{2D+l|H0nH9DvDkl) z?aXXi_X8d4z{9`=6J~hI@Q;Csk=39yg+Yh0KzurT3-eKi7?uf)4nR18(V!FpQy4%H x!3MD)V#uNpHb`8D5jW&u#|;a_al`*maEBEHAshq?CW}ey07IIAA@Cam0{~%=f$abQ literal 0 HcmV?d00001 diff --git a/lib/Bosch-BSEC/config/generic_18v_3s_4d/bsec_iaq.csv b/lib/Bosch-BSEC/config/generic_18v_3s_4d/bsec_iaq.csv new file mode 100644 index 00000000..5eeae615 --- /dev/null +++ b/lib/Bosch-BSEC/config/generic_18v_3s_4d/bsec_iaq.csv @@ -0,0 +1 @@ +454,1,7,4,1,61,0,0,0,0,0,0,0,174,1,0,0,48,0,1,0,137,65,0,63,205,204,204,62,0,0,64,63,205,204,204,62,0,0,225,68,0,192,168,71,64,49,119,76,0,0,0,0,0,80,5,95,0,0,0,0,0,0,0,0,28,0,2,0,0,244,1,225,0,25,0,0,128,64,0,0,32,65,144,1,0,0,112,65,0,0,0,63,16,0,3,0,10,215,163,60,10,215,35,59,10,215,35,59,9,0,5,0,0,0,0,0,1,88,0,9,0,7,240,150,61,0,0,0,0,0,0,0,0,28,124,225,61,52,128,215,63,0,0,160,64,0,0,0,0,0,0,0,0,205,204,12,62,103,213,39,62,230,63,76,192,0,0,0,0,0,0,0,0,145,237,60,191,251,58,64,63,177,80,131,64,0,0,0,0,0,0,0,0,93,254,227,62,54,60,133,191,0,0,64,64,12,0,10,0,0,0,0,0,0,0,0,0,229,0,254,0,2,1,5,48,117,100,0,44,1,112,23,151,7,132,3,197,0,92,4,144,1,64,1,64,1,144,1,48,117,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,48,117,48,117,100,0,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,100,0,100,0,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,255,255,255,255,255,255,255,255,220,5,220,5,220,5,255,255,255,255,255,255,220,5,220,5,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,44,1,0,0,0,0,81,246,0,0 diff --git a/lib/Bosch-BSEC/config/generic_18v_3s_4d/bsec_serialized_configurations_iaq.c b/lib/Bosch-BSEC/config/generic_18v_3s_4d/bsec_serialized_configurations_iaq.c new file mode 100644 index 00000000..625cdc4e --- /dev/null +++ b/lib/Bosch-BSEC/config/generic_18v_3s_4d/bsec_serialized_configurations_iaq.c @@ -0,0 +1,5 @@ +#include "bsec_serialized_configurations_iaq.h" + +const uint8_t bsec_config_iaq[454] = + {1,7,4,1,61,0,0,0,0,0,0,0,174,1,0,0,48,0,1,0,137,65,0,63,205,204,204,62,0,0,64,63,205,204,204,62,0,0,225,68,0,192,168,71,64,49,119,76,0,0,0,0,0,80,5,95,0,0,0,0,0,0,0,0,28,0,2,0,0,244,1,225,0,25,0,0,128,64,0,0,32,65,144,1,0,0,112,65,0,0,0,63,16,0,3,0,10,215,163,60,10,215,35,59,10,215,35,59,9,0,5,0,0,0,0,0,1,88,0,9,0,7,240,150,61,0,0,0,0,0,0,0,0,28,124,225,61,52,128,215,63,0,0,160,64,0,0,0,0,0,0,0,0,205,204,12,62,103,213,39,62,230,63,76,192,0,0,0,0,0,0,0,0,145,237,60,191,251,58,64,63,177,80,131,64,0,0,0,0,0,0,0,0,93,254,227,62,54,60,133,191,0,0,64,64,12,0,10,0,0,0,0,0,0,0,0,0,229,0,254,0,2,1,5,48,117,100,0,44,1,112,23,151,7,132,3,197,0,92,4,144,1,64,1,64,1,144,1,48,117,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,48,117,48,117,100,0,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,100,0,100,0,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,255,255,255,255,255,255,255,255,220,5,220,5,220,5,255,255,255,255,255,255,220,5,220,5,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,44,1,0,0,0,0,81,246,0,0}; + diff --git a/lib/Bosch-BSEC/config/generic_18v_3s_4d/bsec_serialized_configurations_iaq.h b/lib/Bosch-BSEC/config/generic_18v_3s_4d/bsec_serialized_configurations_iaq.h new file mode 100644 index 00000000..1986e2be --- /dev/null +++ b/lib/Bosch-BSEC/config/generic_18v_3s_4d/bsec_serialized_configurations_iaq.h @@ -0,0 +1,4 @@ +#include + +extern const uint8_t bsec_config_iaq[454]; + diff --git a/lib/Bosch-BSEC/config/generic_33v_300s_28d/bsec_iaq.config b/lib/Bosch-BSEC/config/generic_33v_300s_28d/bsec_iaq.config new file mode 100644 index 0000000000000000000000000000000000000000..e518942bce7d902e4287ca62b80126af75750591 GIT binary patch literal 458 zcmX@c$iTqJ&cbNR00HZOd;%han1rug?%J7eYiILTyG=)Kju|Rw}dkgbXh8UI!j1E9JfzhB80#g`3 x5WxnqAY#a(5H?6$hY>gAV8;y$#Bsy_P;iG81R)#*3nq(68 + +extern const uint8_t bsec_config_iaq[454]; + diff --git a/lib/Bosch-BSEC/config/generic_33v_300s_4d/bsec_iaq.config b/lib/Bosch-BSEC/config/generic_33v_300s_4d/bsec_iaq.config new file mode 100644 index 0000000000000000000000000000000000000000..698c69fe0a808342219419ce56fdc1e7e8934954 GIT binary patch literal 458 zcmX@c$iTqJ&cbNR00HZOd;*t#zVC* z$S^Q5FnnQr$RNqU(BQzppx`(GXi9-2P~KjEfti8p`eGZd>&n(3%*ntC*2WmYz{&9R zf)daI2)HFZ$L=AwvjYRe0w9KfIB$==vH#{fIN2@O4--?A-?Fc3L!yJ@$K-u5vE`NS zwoCVF9@rtb*MWzD3nt9)l;Ix(6C)&3^6Pd7#)Cc0;54G1g0>6 xAc75ILBxJ!Hydih~tL;q2LZH2tqgr7EBhCHYf%8w$_b-0RVX@g8Kjf literal 0 HcmV?d00001 diff --git a/lib/Bosch-BSEC/config/generic_33v_300s_4d/bsec_iaq.csv b/lib/Bosch-BSEC/config/generic_33v_300s_4d/bsec_iaq.csv new file mode 100644 index 00000000..223adff0 --- /dev/null +++ b/lib/Bosch-BSEC/config/generic_33v_300s_4d/bsec_iaq.csv @@ -0,0 +1 @@ +454,1,7,4,1,61,0,0,0,0,0,0,0,174,1,0,0,48,0,1,0,137,65,0,63,205,204,204,62,0,0,64,63,205,204,204,62,0,0,225,68,0,192,168,71,64,49,119,76,0,0,0,0,0,80,5,95,0,0,0,0,0,0,0,0,28,0,2,0,0,244,1,225,0,25,0,0,128,64,0,0,32,65,144,1,0,0,112,65,0,0,0,63,16,0,3,0,10,215,163,60,10,215,35,59,10,215,35,59,9,0,5,0,0,0,0,0,1,88,0,9,0,229,208,34,62,0,0,0,0,0,0,0,0,218,27,156,62,225,11,67,64,0,0,160,64,0,0,0,0,0,0,0,0,94,75,72,189,93,254,159,64,66,62,160,191,0,0,0,0,0,0,0,0,33,31,180,190,138,176,97,64,65,241,99,190,0,0,0,0,0,0,0,0,167,121,71,61,165,189,41,192,184,30,189,64,12,0,10,0,0,0,0,0,0,0,0,0,229,0,254,0,2,1,5,48,117,100,0,44,1,112,23,151,7,132,3,197,0,92,4,144,1,64,1,64,1,144,1,48,117,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,48,117,48,117,100,0,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,100,0,100,0,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,255,255,255,255,255,255,255,255,220,5,220,5,220,5,255,255,255,255,255,255,220,5,220,5,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,117,0,0,0,0,125,70,0,0 diff --git a/lib/Bosch-BSEC/config/generic_33v_300s_4d/bsec_serialized_configurations_iaq.c b/lib/Bosch-BSEC/config/generic_33v_300s_4d/bsec_serialized_configurations_iaq.c new file mode 100644 index 00000000..f76832cc --- /dev/null +++ b/lib/Bosch-BSEC/config/generic_33v_300s_4d/bsec_serialized_configurations_iaq.c @@ -0,0 +1,5 @@ +#include "bsec_serialized_configurations_iaq.h" + +const uint8_t bsec_config_iaq[454] = + {1,7,4,1,61,0,0,0,0,0,0,0,174,1,0,0,48,0,1,0,137,65,0,63,205,204,204,62,0,0,64,63,205,204,204,62,0,0,225,68,0,192,168,71,64,49,119,76,0,0,0,0,0,80,5,95,0,0,0,0,0,0,0,0,28,0,2,0,0,244,1,225,0,25,0,0,128,64,0,0,32,65,144,1,0,0,112,65,0,0,0,63,16,0,3,0,10,215,163,60,10,215,35,59,10,215,35,59,9,0,5,0,0,0,0,0,1,88,0,9,0,229,208,34,62,0,0,0,0,0,0,0,0,218,27,156,62,225,11,67,64,0,0,160,64,0,0,0,0,0,0,0,0,94,75,72,189,93,254,159,64,66,62,160,191,0,0,0,0,0,0,0,0,33,31,180,190,138,176,97,64,65,241,99,190,0,0,0,0,0,0,0,0,167,121,71,61,165,189,41,192,184,30,189,64,12,0,10,0,0,0,0,0,0,0,0,0,229,0,254,0,2,1,5,48,117,100,0,44,1,112,23,151,7,132,3,197,0,92,4,144,1,64,1,64,1,144,1,48,117,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,48,117,48,117,100,0,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,100,0,100,0,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,255,255,255,255,255,255,255,255,220,5,220,5,220,5,255,255,255,255,255,255,220,5,220,5,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,117,0,0,0,0,125,70,0,0}; + diff --git a/lib/Bosch-BSEC/config/generic_33v_300s_4d/bsec_serialized_configurations_iaq.h b/lib/Bosch-BSEC/config/generic_33v_300s_4d/bsec_serialized_configurations_iaq.h new file mode 100644 index 00000000..1986e2be --- /dev/null +++ b/lib/Bosch-BSEC/config/generic_33v_300s_4d/bsec_serialized_configurations_iaq.h @@ -0,0 +1,4 @@ +#include + +extern const uint8_t bsec_config_iaq[454]; + diff --git a/lib/Bosch-BSEC/config/generic_33v_3s_28d/bsec_iaq.config b/lib/Bosch-BSEC/config/generic_33v_3s_28d/bsec_iaq.config new file mode 100644 index 0000000000000000000000000000000000000000..f2ff51895c7f644cf1acf40fd623b91b7b11d45c GIT binary patch literal 458 zcmX@c$iTqJ&cbNR00HZOd;%han1rug?%J7eYiILTyG=)Kju|Rw}dkgbXh8UI!j1E9JfzhB80#g`3 y5WxnqAY#a(5H?6$hY>gAV8;y$#Bsy_P;iG81R)#*3nq(6>i|QVfx#%6fdK$uqJg3S literal 0 HcmV?d00001 diff --git a/lib/Bosch-BSEC/config/generic_33v_3s_28d/bsec_iaq.csv b/lib/Bosch-BSEC/config/generic_33v_3s_28d/bsec_iaq.csv new file mode 100644 index 00000000..1396776c --- /dev/null +++ b/lib/Bosch-BSEC/config/generic_33v_3s_28d/bsec_iaq.csv @@ -0,0 +1 @@ +454,1,7,4,1,61,0,0,0,0,0,0,0,174,1,0,0,48,0,1,0,137,65,0,63,205,204,204,62,0,0,64,63,205,204,204,62,0,0,225,68,0,168,19,73,64,49,119,76,0,0,0,0,0,80,5,95,0,0,0,0,0,0,0,0,28,0,2,0,0,244,1,225,0,25,0,0,128,64,0,0,32,65,144,1,0,0,112,65,0,0,0,63,16,0,3,0,10,215,163,60,10,215,35,59,10,215,35,59,9,0,5,0,0,0,0,0,1,88,0,9,0,229,208,34,62,0,0,0,0,0,0,0,0,218,27,156,62,225,11,67,64,0,0,160,64,0,0,0,0,0,0,0,0,94,75,72,189,93,254,159,64,66,62,160,191,0,0,0,0,0,0,0,0,33,31,180,190,138,176,97,64,65,241,99,190,0,0,0,0,0,0,0,0,167,121,71,61,165,189,41,192,184,30,189,64,12,0,10,0,0,0,0,0,0,0,0,0,229,0,254,0,2,1,5,48,117,100,0,44,1,112,23,151,7,132,3,197,0,92,4,144,1,64,1,64,1,144,1,48,117,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,48,117,48,117,100,0,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,100,0,100,0,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,255,255,255,255,255,255,255,255,220,5,220,5,220,5,255,255,255,255,255,255,220,5,220,5,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,44,1,0,0,0,0,50,91,0,0 diff --git a/lib/Bosch-BSEC/config/generic_33v_3s_28d/bsec_serialized_configurations_iaq.c b/lib/Bosch-BSEC/config/generic_33v_3s_28d/bsec_serialized_configurations_iaq.c new file mode 100644 index 00000000..e1f1bfe3 --- /dev/null +++ b/lib/Bosch-BSEC/config/generic_33v_3s_28d/bsec_serialized_configurations_iaq.c @@ -0,0 +1,5 @@ +#include "bsec_serialized_configurations_iaq.h" + +const uint8_t bsec_config_iaq[454] = + {1,7,4,1,61,0,0,0,0,0,0,0,174,1,0,0,48,0,1,0,137,65,0,63,205,204,204,62,0,0,64,63,205,204,204,62,0,0,225,68,0,168,19,73,64,49,119,76,0,0,0,0,0,80,5,95,0,0,0,0,0,0,0,0,28,0,2,0,0,244,1,225,0,25,0,0,128,64,0,0,32,65,144,1,0,0,112,65,0,0,0,63,16,0,3,0,10,215,163,60,10,215,35,59,10,215,35,59,9,0,5,0,0,0,0,0,1,88,0,9,0,229,208,34,62,0,0,0,0,0,0,0,0,218,27,156,62,225,11,67,64,0,0,160,64,0,0,0,0,0,0,0,0,94,75,72,189,93,254,159,64,66,62,160,191,0,0,0,0,0,0,0,0,33,31,180,190,138,176,97,64,65,241,99,190,0,0,0,0,0,0,0,0,167,121,71,61,165,189,41,192,184,30,189,64,12,0,10,0,0,0,0,0,0,0,0,0,229,0,254,0,2,1,5,48,117,100,0,44,1,112,23,151,7,132,3,197,0,92,4,144,1,64,1,64,1,144,1,48,117,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,48,117,48,117,100,0,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,100,0,100,0,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,255,255,255,255,255,255,255,255,220,5,220,5,220,5,255,255,255,255,255,255,220,5,220,5,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,44,1,0,0,0,0,50,91,0,0}; + diff --git a/lib/Bosch-BSEC/config/generic_33v_3s_28d/bsec_serialized_configurations_iaq.h b/lib/Bosch-BSEC/config/generic_33v_3s_28d/bsec_serialized_configurations_iaq.h new file mode 100644 index 00000000..1986e2be --- /dev/null +++ b/lib/Bosch-BSEC/config/generic_33v_3s_28d/bsec_serialized_configurations_iaq.h @@ -0,0 +1,4 @@ +#include + +extern const uint8_t bsec_config_iaq[454]; + diff --git a/lib/Bosch-BSEC/config/generic_33v_3s_4d/bsec_iaq.config b/lib/Bosch-BSEC/config/generic_33v_3s_4d/bsec_iaq.config new file mode 100644 index 0000000000000000000000000000000000000000..a79b3ccb7341c837ca568f6d3fb1461e50ed93f1 GIT binary patch literal 458 zcmX@c$iTqJ&cbNR00HZOd;*t#zVC* z$S^Q5FnnQr$RNqU(BQzppx`(GXi9-2P~KjEfti8p`eGZd>&n(3%*ntC*2WmYz{&9R zf)daI2)HFZ$L=AwvjYRe0w9KfIB$==vH#{fIN2@O4--?A-?Fc3L!yJ@$K-u5vE`NS zwoCVF9@rtb*MWzD3nt9)l;Ix(6C)&3^6Pd7#)Cc0;54G1g0>6 yAc75ILBxJ!Hydih~tL;q2LZH2tqgr7EBhC)&Yhz1H*fN1_l6j&w~B{ literal 0 HcmV?d00001 diff --git a/lib/Bosch-BSEC/config/generic_33v_3s_4d/bsec_iaq.csv b/lib/Bosch-BSEC/config/generic_33v_3s_4d/bsec_iaq.csv new file mode 100644 index 00000000..b0001d9c --- /dev/null +++ b/lib/Bosch-BSEC/config/generic_33v_3s_4d/bsec_iaq.csv @@ -0,0 +1 @@ +454,1,7,4,1,61,0,0,0,0,0,0,0,174,1,0,0,48,0,1,0,137,65,0,63,205,204,204,62,0,0,64,63,205,204,204,62,0,0,225,68,0,192,168,71,64,49,119,76,0,0,0,0,0,80,5,95,0,0,0,0,0,0,0,0,28,0,2,0,0,244,1,225,0,25,0,0,128,64,0,0,32,65,144,1,0,0,112,65,0,0,0,63,16,0,3,0,10,215,163,60,10,215,35,59,10,215,35,59,9,0,5,0,0,0,0,0,1,88,0,9,0,229,208,34,62,0,0,0,0,0,0,0,0,218,27,156,62,225,11,67,64,0,0,160,64,0,0,0,0,0,0,0,0,94,75,72,189,93,254,159,64,66,62,160,191,0,0,0,0,0,0,0,0,33,31,180,190,138,176,97,64,65,241,99,190,0,0,0,0,0,0,0,0,167,121,71,61,165,189,41,192,184,30,189,64,12,0,10,0,0,0,0,0,0,0,0,0,229,0,254,0,2,1,5,48,117,100,0,44,1,112,23,151,7,132,3,197,0,92,4,144,1,64,1,64,1,144,1,48,117,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,48,117,48,117,100,0,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,100,0,100,0,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,255,255,255,255,255,255,255,255,220,5,220,5,220,5,255,255,255,255,255,255,220,5,220,5,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,44,1,0,0,0,0,239,79,0,0 diff --git a/lib/Bosch-BSEC/config/generic_33v_3s_4d/bsec_serialized_configurations_iaq.c b/lib/Bosch-BSEC/config/generic_33v_3s_4d/bsec_serialized_configurations_iaq.c new file mode 100644 index 00000000..b6007c1a --- /dev/null +++ b/lib/Bosch-BSEC/config/generic_33v_3s_4d/bsec_serialized_configurations_iaq.c @@ -0,0 +1,5 @@ +#include "bsec_serialized_configurations_iaq.h" + + +const uint8_t bsec_config_iaq[454] = + {1,7,4,1,61,0,0,0,0,0,0,0,174,1,0,0,48,0,1,0,137,65,0,63,205,204,204,62,0,0,64,63,205,204,204,62,0,0,225,68,0,192,168,71,64,49,119,76,0,0,0,0,0,80,5,95,0,0,0,0,0,0,0,0,28,0,2,0,0,244,1,225,0,25,0,0,128,64,0,0,32,65,144,1,0,0,112,65,0,0,0,63,16,0,3,0,10,215,163,60,10,215,35,59,10,215,35,59,9,0,5,0,0,0,0,0,1,88,0,9,0,229,208,34,62,0,0,0,0,0,0,0,0,218,27,156,62,225,11,67,64,0,0,160,64,0,0,0,0,0,0,0,0,94,75,72,189,93,254,159,64,66,62,160,191,0,0,0,0,0,0,0,0,33,31,180,190,138,176,97,64,65,241,99,190,0,0,0,0,0,0,0,0,167,121,71,61,165,189,41,192,184,30,189,64,12,0,10,0,0,0,0,0,0,0,0,0,229,0,254,0,2,1,5,48,117,100,0,44,1,112,23,151,7,132,3,197,0,92,4,144,1,64,1,64,1,144,1,48,117,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,48,117,48,117,100,0,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,100,0,100,0,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,255,255,255,255,255,255,255,255,220,5,220,5,220,5,255,255,255,255,255,255,220,5,220,5,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,44,1,0,0,0,0,239,79,0,0}; diff --git a/lib/Bosch-BSEC/config/generic_33v_3s_4d/bsec_serialized_configurations_iaq.h b/lib/Bosch-BSEC/config/generic_33v_3s_4d/bsec_serialized_configurations_iaq.h new file mode 100644 index 00000000..1986e2be --- /dev/null +++ b/lib/Bosch-BSEC/config/generic_33v_3s_4d/bsec_serialized_configurations_iaq.h @@ -0,0 +1,4 @@ +#include + +extern const uint8_t bsec_config_iaq[454]; + diff --git a/platformio.ini b/platformio.ini index 08731c11..c329409b 100644 --- a/platformio.ini +++ b/platformio.ini @@ -29,13 +29,13 @@ description = Paxcounter is a proof-of-concept ESP32 device for metering passeng [common] ; for release_version use max. 10 chars total, use any decimal format like "a.b.c" -release_version = 1.6.86 +release_version = 1.6.88 ; DEBUG LEVEL: For production run set to 0, otherwise device will leak RAM while running! ; 0=None, 1=Error, 2=Warn, 3=Info, 4=Debug, 5=Verbose debug_level = 3 ; UPLOAD MODE: select esptool to flash via USB/UART, select custom to upload to cloud for OTA -upload_protocol = esptool -;upload_protocol = custom +;upload_protocol = esptool +upload_protocol = custom extra_scripts = pre:build.py keyfile = ota.conf platform_espressif32 = https://github.com/platformio/platform-espressif32.git#a7b1fe6 diff --git a/src/bme680mems.cpp b/src/bme680mems.cpp index 7226919b..82a4b6f7 100644 --- a/src/bme680mems.cpp +++ b/src/bme680mems.cpp @@ -8,10 +8,10 @@ static const char TAG[] = "main"; bmeStatus_t bme_status; TaskHandle_t BmeTask; -// BSEC configuration -// 3,3V supply voltage; 3s sensor_control; 4 days calibration -// change this const if not applicable for your application (see BME680 -// datasheet) +// --- Bosch BSEC library configuration --- +// 3,3V supply voltage; 3s max time between sensor_control calls; 4 days +// calibration. Change this const if not applicable for your application (see +// BME680 datasheet) const uint8_t bsec_config_iaq[454] = { 1, 7, 4, 1, 61, 0, 0, 0, 0, 0, 0, 0, 174, 1, 0, 0, 48, 0, 1, 0, 137, 65, 0, 63, 205, 204, 204, 62, 0, 0, From 54dea2e505eb4f9a2c22fc8ad5326d755300d12b Mon Sep 17 00:00:00 2001 From: Klaus K Wilting Date: Sun, 25 Nov 2018 22:16:14 +0100 Subject: [PATCH 4/5] ota.cpp: WIFI_STA mode; lorawan.cpp: rssi negative display --- src/lorawan.cpp | 14 ++++++++++---- src/ota.cpp | 2 +- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/lorawan.cpp b/src/lorawan.cpp index 82ce696f..fa92d1a5 100644 --- a/src/lorawan.cpp +++ b/src/lorawan.cpp @@ -214,11 +214,17 @@ void onEvent(ev_t ev) { : PSTR("TX_COMPLETE")); sprintf(display_line6, " "); // clear previous lmic status + // if (LMIC.dataLen) { + // ESP_LOGI(TAG, "Received %d bytes of payload, RSSI %d SNR %d", + // LMIC.dataLen, (signed char)LMIC.rssi, (signed + // char)LMIC.snr); + // sprintf(display_line6, "RSSI %d SNR %d", (signed char)LMIC.rssi, + // (signed char)LMIC.snr); + if (LMIC.dataLen) { - ESP_LOGI(TAG, "Received %d bytes of payload, RSSI %d SNR %d", - LMIC.dataLen, (signed char)LMIC.rssi, (signed char)LMIC.snr); - sprintf(display_line6, "RSSI %d SNR %d", (signed char)LMIC.rssi, - (signed char)LMIC.snr); + ESP_LOGI(TAG, "Received %d bytes of payload, RSSI -%d SNR %d", + LMIC.dataLen, LMIC.rssi, LMIC.snr / 4); + sprintf(display_line6, "RSSI -%d SNR %d", LMIC.rssi, LMIC.snr / 4); // check if command is received on command port, then call interpreter if ((LMIC.txrxFlags & TXRX_PORT) && diff --git a/src/ota.cpp b/src/ota.cpp index ac409a0c..4f5a5e01 100644 --- a/src/ota.cpp +++ b/src/ota.cpp @@ -68,7 +68,7 @@ void start_ota_update() { ESP_LOGI(TAG, "Starting Wifi OTA update"); display(1, "**", WIFI_SSID); - WiFi.mode(WIFI_AP_STA); + WiFi.mode(WIFI_STA); WiFi.begin(WIFI_SSID, WIFI_PASS); int i = WIFI_MAX_TRY, j = OTA_MAX_TRY; From 4da2260852aa61e9466043c59521a3a8b6c88fbc Mon Sep 17 00:00:00 2001 From: Klaus K Wilting Date: Sun, 25 Nov 2018 23:39:12 +0100 Subject: [PATCH 5/5] BME280 payload corrections --- include/payload.h | 5 +++-- platformio.ini | 12 ++++++------ src/TTN/packed_decoder.js | 13 ++++++++++++- src/payload.cpp | 24 ++++++++++++++---------- src/senddata.cpp | 17 ++++++++++++++--- 5 files changed, 49 insertions(+), 22 deletions(-) diff --git a/include/payload.h b/include/payload.h index 2fce0fff..f5872881 100644 --- a/include/payload.h +++ b/include/payload.h @@ -66,8 +66,9 @@ private: void writeUint32(uint32_t i); void writeUint16(uint16_t i); void writeUint8(uint8_t i); - void writeFloat(float humidity); - void writeUFloat(float temperature); + void writeFloat(float value); + void writeUFloat(float value); + void writePressure(float value); void writeVersion(char * version); void writeBitmap(bool a, bool b, bool c, bool d, bool e, bool f, bool g, bool h); diff --git a/platformio.ini b/platformio.ini index c329409b..49369f08 100644 --- a/platformio.ini +++ b/platformio.ini @@ -6,7 +6,7 @@ ; ---> SELECT TARGET PLATFORM HERE! <--- [platformio] -;env_default = generic +env_default = generic ;env_default = ebox ;env_default = eboxtube ;env_default = heltec @@ -15,7 +15,7 @@ ;env_default = ttgov2 ;env_default = ttgov21old ;env_default = ttgov21new -env_default = ttgobeam +;env_default = ttgobeam ;env_default = lopy ;env_default = lopy4 ;env_default = fipy @@ -29,13 +29,13 @@ description = Paxcounter is a proof-of-concept ESP32 device for metering passeng [common] ; for release_version use max. 10 chars total, use any decimal format like "a.b.c" -release_version = 1.6.88 +release_version = 1.6.9 ; DEBUG LEVEL: For production run set to 0, otherwise device will leak RAM while running! ; 0=None, 1=Error, 2=Warn, 3=Info, 4=Debug, 5=Verbose -debug_level = 3 +debug_level = 0 ; UPLOAD MODE: select esptool to flash via USB/UART, select custom to upload to cloud for OTA -;upload_protocol = esptool -upload_protocol = custom +upload_protocol = esptool +;upload_protocol = custom extra_scripts = pre:build.py keyfile = ota.conf platform_espressif32 = https://github.com/platformio/platform-espressif32.git#a7b1fe6 diff --git a/src/TTN/packed_decoder.js b/src/TTN/packed_decoder.js index 46ac91c2..a8f71f9e 100644 --- a/src/TTN/packed_decoder.js +++ b/src/TTN/packed_decoder.js @@ -43,7 +43,7 @@ function Decoder(bytes, port) { if (port === 7) { // BME680 sensor data - return decode(bytes, [float, ufloat, ufloat, ufloat], ['temperature', 'pressure', 'humidity', 'air']); + return decode(bytes, [float, uint16, ufloat, ufloat], ['temperature', 'pressure', 'humidity', 'air']); } } @@ -151,6 +151,16 @@ var ufloat = function (bytes) { }; ufloat.BYTES = 2; +var pressure = function (bytes) { + if (bytes.length !== pressure.BYTES) { + throw new Error('Pressure must have exactly 2 bytes'); + } + + var h = bytesToInt(bytes); + return +(h / 10).toFixed(1); +}; +pressure.BYTES = 2; + var bitmap = function (byte) { if (byte.length !== bitmap.BYTES) { throw new Error('Bitmap must have exactly 1 byte'); @@ -195,6 +205,7 @@ if (typeof module === 'object' && typeof module.exports !== 'undefined') { uptime: uptime, float: float, ufloat: ufloat, + pressure: pressure, latLng: latLng, hdop: hdop, bitmap: bitmap, diff --git a/src/payload.cpp b/src/payload.cpp index 14991e96..a00bd052 100644 --- a/src/payload.cpp +++ b/src/payload.cpp @@ -194,7 +194,7 @@ void PayloadConvert::addSensor(uint8_t buf[]) { void PayloadConvert::addBME(bmeStatus_t value) { #ifdef HAS_BME writeFloat(value.temperature); - writeUFloat(value.pressure); + writePressure(value.pressure); writeUFloat(value.humidity); writeUFloat(value.iaq); #endif @@ -233,8 +233,13 @@ void PayloadConvert::writeUint16(uint16_t i) { intToBytes(cursor, i, 2); } void PayloadConvert::writeUint8(uint8_t i) { intToBytes(cursor, i, 1); } -void PayloadConvert::writeUFloat(float humidity) { - int16_t h = (int16_t)(humidity * 100); +void PayloadConvert::writeUFloat(float value) { + int16_t h = (int16_t)(value * 100); + intToBytes(cursor, h, 2); +} + +void PayloadConvert::writePressure(float value) { + int16_t h = (int16_t)(value); intToBytes(cursor, h, 2); } @@ -242,9 +247,9 @@ void PayloadConvert::writeUFloat(float humidity) { * Uses a 16bit two's complement with two decimals, so the range is * -327.68 to +327.67 degrees */ -void PayloadConvert::writeFloat(float temperature) { - int16_t t = (int16_t)(temperature * 100); - if (temperature < 0) { +void PayloadConvert::writeFloat(float value) { + int16_t t = (int16_t)(value * 100); + if (value < 0) { t = ~-t; t = t + 1; } @@ -372,11 +377,10 @@ void PayloadConvert::addBME(bmeStatus_t value) { // 0.1°C per bit => -3276,7 .. +3276,7 °C int16_t temperature = (int16_t)(value.temperature * 10.0); // 0.1 hPa per bit => 0 .. 6553,6 hPa - uint16_t pressure = value.pressure * 10; + uint16_t pressure = (uint16_t)(value.pressure * 10); // 0.5% per bit => 0 .. 128 %C uint8_t humidity = (uint8_t)(value.humidity * 2.0); - // 0.01 IAQ per bit => 0 .. 655,36 IAQ - uint16_t iaq = (uint16_t)value.iaq * 100; + int16_t iaq = (int16_t)(value.iaq); #if (PAYLOAD_ENCODER == 3) buffer[cursor++] = LPP_TEMPERATURE_CHANNEL; @@ -398,7 +402,7 @@ void PayloadConvert::addBME(bmeStatus_t value) { #if (PAYLOAD_ENCODER == 3) buffer[cursor++] = LPP_AIR_CHANNEL; #endif - buffer[cursor++] = LPP_ANALOG_INPUT; // 2 bytes 0.01 Signed + buffer[cursor++] = LPP_LUMINOSITY; // 2 bytes, 1.0 unsigned buffer[cursor++] = highByte(iaq); buffer[cursor++] = lowByte(iaq); #endif // HAS_BME diff --git a/src/senddata.cpp b/src/senddata.cpp index 5860c5fb..bed8d312 100644 --- a/src/senddata.cpp +++ b/src/senddata.cpp @@ -7,9 +7,20 @@ void SendPayload(uint8_t port) { MessageBuffer_t SendBuffer; // contains MessageSize, MessagePort, Message[] SendBuffer.MessageSize = payload.getSize(); - SendBuffer.MessagePort = PAYLOAD_ENCODER <= 2 - ? port - : (PAYLOAD_ENCODER == 4 ? LPP2PORT : LPP1PORT); + switch (PAYLOAD_ENCODER) { + case 1: + case 2: + SendBuffer.MessagePort = port; + break; + case 3: + SendBuffer.MessagePort = LPP1PORT; + break; + case 4: + SendBuffer.MessagePort = LPP2PORT; + break; + default: + SendBuffer.MessagePort = port; + } memcpy(SendBuffer.Message, payload.getBuffer(), payload.getSize()); // enqueue message in device's send queues