summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Friesel <derf@finalrewind.org>2021-02-25 21:49:29 +0100
committerDaniel Friesel <derf@finalrewind.org>2021-02-25 21:49:29 +0100
commit4e70dc99f2fe61235c7e23739f91e3f7e2fff837 (patch)
treeb14fa43290d7eda6089bd7837835d7128d620aa0
parent86668d2be24abb4af71cf8af74438cc66472b25a (diff)
move datalog functions from i2cdetect into separate app
-rw-r--r--src/app/datalogger/Kconfig6
-rw-r--r--src/app/datalogger/Makefile.inc10
-rw-r--r--src/app/datalogger/main.cc217
-rw-r--r--src/app/i2cdetect/Kconfig2
-rw-r--r--src/app/i2cdetect/Makefile.inc1
-rw-r--r--src/app/i2cdetect/main.cc225
6 files changed, 256 insertions, 205 deletions
diff --git a/src/app/datalogger/Kconfig b/src/app/datalogger/Kconfig
new file mode 100644
index 0000000..5364fac
--- /dev/null
+++ b/src/app/datalogger/Kconfig
@@ -0,0 +1,6 @@
+# Copyright 2020 Daniel Friesel
+#
+# SPDX-License-Identifier: CC0-1.0
+
+prompt "Data Logger for Arbitrary Devices"
+depends on loop && !wakeup
diff --git a/src/app/datalogger/Makefile.inc b/src/app/datalogger/Makefile.inc
new file mode 100644
index 0000000..d2a9de5
--- /dev/null
+++ b/src/app/datalogger/Makefile.inc
@@ -0,0 +1,10 @@
+# vim:ft=make
+#
+# Copyright 2020 Daniel Friesel
+#
+# SPDX-License-Identifier: CC0-1.0
+
+ifdef app
+ CONFIG_loop = y
+ override arch_drivers += ,i2c
+endif
diff --git a/src/app/datalogger/main.cc b/src/app/datalogger/main.cc
new file mode 100644
index 0000000..8312367
--- /dev/null
+++ b/src/app/datalogger/main.cc
@@ -0,0 +1,217 @@
+/*
+ * Copyright 2020 Daniel Friesel
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+#include "arch.h"
+#include "driver/gpio.h"
+#include "driver/stdout.h"
+
+#if defined(DRIVER_I2C)
+#include "driver/i2c.h"
+#elif defined(DRIVER_SOFTI2C)
+#include "driver/soft_i2c.h"
+#endif
+
+#ifdef DRIVER_LM75
+#include "driver/lm75.h"
+#endif
+#ifdef DRIVER_S5851A
+#include "driver/s5851a.h"
+#endif
+#ifdef DRIVER_AM2320
+#include "driver/am2320.h"
+#endif
+#ifdef DRIVER_BME280
+#include "driver/bme280.h"
+#include "driver/bme680_util.h"
+#endif
+#ifdef DRIVER_BME680
+#include "driver/bme680.h"
+#include "driver/bme680_util.h"
+#endif
+#ifdef DRIVER_CCS811
+#include "driver/ccs811.h"
+#endif
+#ifdef DRIVER_MAX44009
+#include "driver/max44009.h"
+#endif
+#ifdef DRIVER_HDC1080
+#include "driver/hdc1080.h"
+#endif
+#ifdef DRIVER_MPU9250
+#include "driver/mpu9250.h"
+#endif
+
+void loop(void)
+{
+#ifdef DRIVER_LM75
+ kout << "temperature_celsius: ";
+ kout.printf_float(lm75.getTemp());
+ kout << endl;
+#endif
+
+#ifdef DRIVER_S5851A
+ kout << "temperature_celsius: ";
+ kout.printf_float(s5851a.getTemp());
+ kout << endl;
+#endif
+
+#ifdef DRIVER_AM2320
+ am2320.read();
+ if (am2320.getStatus() == 0) {
+ kout.printf_float(am2320.getTemp());
+ kout << " degC @ ";
+ kout.printf_float(am2320.getHumidity());
+ kout << " rel%" << endl;
+ } else {
+ kout << "AM2320 error " << dec << am2320.getStatus() << endl;
+ }
+#endif
+
+#ifdef DRIVER_BME280
+ struct bme280_data comp_data;
+ int8_t rslt = bme280.getSensorData(BME280_ALL, &comp_data);
+ kout << "BME280 read " << rslt << endl;
+ kout << "BME280 temperature " << (float)comp_data.temperature / 100 << " degC" << endl;
+ kout << "BME280 humidity " << (float)comp_data.humidity / 1024 << " %" << endl;
+ kout << "BME280 pressure " << (float)comp_data.pressure / 100 << " Pa" << endl;
+#endif
+
+#ifdef DRIVER_BME680
+ struct bme680_field_data data;
+ bme680.setSensorMode();
+ arch.delay_ms(250);
+ bme680.getSensorData(&data);
+ kout << "BME680 temperature " << (float)data.temperature / 100 << " degC" << endl;
+ kout << "BME680 humidity " << (float)data.humidity / 1000 << " %" << endl;
+ kout << "BME680 pressure " << (float)data.pressure / 100 << " hPa" << endl;
+ kout << "BME680 gas resistance " << data.gas_resistance << endl;
+#endif
+
+#ifdef DRIVER_CCS811
+ ccs811.read();
+ kout << bin;
+ kout << "CCS811 status / error: " << ccs811.status << " / " << ccs811.error_id << endl;
+ kout << dec;
+ kout << "CCS811 tVOC / eCO₂ : " << ccs811.tvoc << " ppb / " << ccs811.eco2 << " ppm" << endl;
+#endif
+
+#ifdef DRIVER_HDC1080
+ /*
+ hdc1080.heater(1);
+ for (unsigned char i = 0; i < 50; i++) {
+ hdc1080.getTemp();
+ }
+ */
+ kout << "HDC1080 temperature " << hdc1080.getTemp() << " degC" << endl;
+ kout << "HDC1080 humidity " << hdc1080.getRH() << " %H" << endl;
+#endif
+
+#ifdef DRIVER_MPU9250
+ int mx, my, mz;
+ kout << "Temperature: " << mpu9250.getTemperature() << endl;
+ kout << "Accel X " << mpu9250.getAccelX() << endl;
+ kout << "Accel Y " << mpu9250.getAccelY() << endl;
+ kout << "Accel Z " << mpu9250.getAccelZ() << endl;
+ kout << "Gyro X " << mpu9250.getGyroX() << endl;
+ kout << "Gyro Y " << mpu9250.getGyroY() << endl;
+ kout << "Gyro Z " << mpu9250.getGyroZ() << endl;
+ mpu9250.getRawMagnet(&mx, &my, &mz);
+ kout << "Magnet X " << mx << endl;
+ kout << "Magnet Y " << my << endl;
+ kout << "Magnet Z " << mz << endl;
+#endif
+
+#ifdef DRIVER_MAX44009
+ kout.printf_float(max44009.getLux());
+ kout << endl;
+#endif
+}
+
+int main(void)
+{
+
+ arch.setup();
+ gpio.setup();
+ kout.setup();
+
+#if defined(DRIVER_I2C) || defined(DRIVER_SOFTI2C)
+ if (i2c.setup() != 0) {
+ kout << "I2C setup FAILED" << endl;
+ return 1;
+ }
+ kout << "I2C setup OK" << endl;
+#endif
+
+#ifdef DRIVER_BME280
+ bme280.intf = BME280_I2C_INTF;
+ bme280.read = bme680_i2c_read;
+ bme280.write = bme680_i2c_write;
+ bme280.delay_ms = bme680_delay_ms;
+
+ int8_t rslt = BME280_OK;
+ rslt = bme280.init();
+ kout << "BME280 init " << rslt << endl;
+
+ bme280.settings.osr_p = BME280_OVERSAMPLING_16X;
+ bme280.settings.osr_t = BME280_OVERSAMPLING_16X;
+ bme280.settings.osr_h = BME280_OVERSAMPLING_16X;
+ bme280.settings.filter = BME280_FILTER_COEFF_OFF;
+ bme280.settings.standby_time = BME280_STANDBY_TIME_500_MS;
+ bme280.setSensorSettings(BME280_OSR_PRESS_SEL | BME280_OSR_TEMP_SEL | BME280_OSR_HUM_SEL | BME280_FILTER_SEL | BME280_STANDBY_SEL);
+ bme280.enterNormalMode();
+#endif
+
+#ifdef DRIVER_BME680
+ bme680.intf = BME680_I2C_INTF;
+ bme680.read = bme680_i2c_read;
+ bme680.write = bme680_i2c_write;
+ bme680.delay_ms = bme680_delay_ms;
+
+ bme680.amb_temp = 25;
+
+ int8_t rslt = BME680_OK;
+ rslt = bme680.init();
+ kout << "BME680 init " << rslt << endl;
+
+ bme680.power_mode = BME680_FORCED_MODE;
+ bme680.tph_sett.os_hum = BME680_OS_1X;
+ bme680.tph_sett.os_pres = BME680_OS_16X;
+ bme680.tph_sett.os_temp = BME680_OS_2X;
+
+ bme680.gas_sett.run_gas = BME680_ENABLE_GAS_MEAS;
+ bme680.gas_sett.heatr_dur = 100;
+ bme680.gas_sett.heatr_temp = 300;
+ bme680.setSensorSettings(BME680_OST_SEL | BME680_OSP_SEL | BME680_OSH_SEL | BME680_GAS_SENSOR_SEL);
+#endif
+
+#ifdef DRIVER_CCS811
+ kout << hex;
+ kout << "CCS811 HWID: " << ccs811.getManufacturerID() << endl;
+ arch.delay_ms(65);
+ kout << "CCS811 status: " << ccs811.getStatus() << endl;
+ arch.delay_ms(65);
+ ccs811.init();
+ arch.delay_ms(65);
+ kout << "CCS811 status: " << ccs811.getStatus() << endl;
+ kout << dec;
+ ccs811.setMode(1);
+ arch.delay_ms(50);
+#endif
+
+#ifdef DRIVER_HDC1080
+ hdc1080.init();
+ if (hdc1080.getManufacturerID() != 0x5449) {
+ kout << "[!] invalid HDC1080 manufacturer ID: " << hex << hdc1080.getManufacturerID() << endl;
+ }
+#endif
+
+#ifdef DRIVER_MPU9250
+ mpu9250.init();
+#endif
+
+ arch.idle_loop();
+
+ return 0;
+}
diff --git a/src/app/i2cdetect/Kconfig b/src/app/i2cdetect/Kconfig
index fe4de80..c8c6744 100644
--- a/src/app/i2cdetect/Kconfig
+++ b/src/app/i2cdetect/Kconfig
@@ -3,4 +3,4 @@
# SPDX-License-Identifier: CC0-1.0
prompt "I2C Bus Scanner"
-depends on loop && !wakeup && meta_driver_i2c
+depends on !loop && !wakeup && meta_driver_i2c
diff --git a/src/app/i2cdetect/Makefile.inc b/src/app/i2cdetect/Makefile.inc
index d2a9de5..501e914 100644
--- a/src/app/i2cdetect/Makefile.inc
+++ b/src/app/i2cdetect/Makefile.inc
@@ -5,6 +5,5 @@
# SPDX-License-Identifier: CC0-1.0
ifdef app
- CONFIG_loop = y
override arch_drivers += ,i2c
endif
diff --git a/src/app/i2cdetect/main.cc b/src/app/i2cdetect/main.cc
index 27e35bf..fb6f54c 100644
--- a/src/app/i2cdetect/main.cc
+++ b/src/app/i2cdetect/main.cc
@@ -11,168 +11,6 @@
#else
#include "driver/soft_i2c.h"
#endif
-#ifdef DRIVER_LM75
-#include "driver/lm75.h"
-#endif
-#ifdef DRIVER_S5851A
-#include "driver/s5851a.h"
-#endif
-#ifdef DRIVER_AM2320
-#include "driver/am2320.h"
-#endif
-#ifdef DRIVER_BME280
-#include "driver/bme280.h"
-#include "driver/bme680_util.h"
-#endif
-#ifdef DRIVER_BME680
-#include "driver/bme680.h"
-#include "driver/bme680_util.h"
-#endif
-#ifdef DRIVER_CCS811
-#include "driver/ccs811.h"
-#endif
-#ifdef DRIVER_EEPROM24LC64
-#include "driver/eeprom24lc64.h"
-#endif
-#ifdef DRIVER_MAX44009
-#include "driver/max44009.h"
-#endif
-#ifdef DRIVER_HDC1080
-#include "driver/hdc1080.h"
-#endif
-#ifdef DRIVER_MPU9250
-#include "driver/mpu9250.h"
-#endif
-#ifdef DRIVER_MMSIMPLE
-#include "driver/mmsimple.h"
-#endif
-
-void loop(void)
-{
-#ifdef DRIVER_LM75
- kout.printf_float(lm75.getTemp());
- kout << endl;
-#endif
-#ifdef DRIVER_S5851A
- kout.printf_float(s5851a.getTemp());
- kout << endl;
-#endif
-#ifdef DRIVER_AM2320
- am2320.read();
- if (am2320.getStatus() == 0) {
- kout.printf_float(am2320.getTemp());
- kout << " degC @ ";
- kout.printf_float(am2320.getHumidity());
- kout << " rel%" << endl;
- } else {
- kout << "AM2320 error " << dec << am2320.getStatus() << endl;
- }
-#endif
-#ifdef DRIVER_BME280
- bme280.intf = BME280_I2C_INTF;
- bme280.read = bme680_i2c_read;
- bme280.write = bme680_i2c_write;
- bme280.delay_ms = bme680_delay_ms;
-
- int8_t rslt = BME280_OK;
- struct bme280_data comp_data;
- rslt = bme280.init();
- kout << "BME280 init " << rslt << endl;
- bme280.settings.osr_p = BME280_OVERSAMPLING_16X;
- bme280.settings.osr_t = BME280_OVERSAMPLING_16X;
- bme280.settings.osr_h = BME280_OVERSAMPLING_16X;
- bme280.settings.filter = BME280_FILTER_COEFF_OFF;
- bme280.settings.standby_time = BME280_STANDBY_TIME_500_MS;
- bme280.setSensorSettings(BME280_OSR_PRESS_SEL | BME280_OSR_TEMP_SEL | BME280_OSR_HUM_SEL | BME280_FILTER_SEL | BME280_STANDBY_SEL);
- bme280.enterNormalMode();
- arch.delay_ms(100);
- rslt = bme280.getSensorData(BME280_ALL, &comp_data);
- kout << "BME280 read " << rslt << endl;
- kout << "BME280 temperature " << (float)comp_data.temperature / 100 << " degC" << endl;
- kout << "BME280 humidity " << (float)comp_data.humidity / 1024 << " %" << endl;
- kout << "BME280 pressure " << (float)comp_data.pressure / 100 << " Pa" << endl;
-#endif
-#ifdef DRIVER_BME680
- bme680.intf = BME680_I2C_INTF;
- bme680.read = bme680_i2c_read;
- bme680.write = bme680_i2c_write;
- bme680.delay_ms = bme680_delay_ms;
- /* amb_temp can be set to 25 prior to configuring the gas sensor
- * or by performing a few temperature readings without operating the gas sensor.
- */
- bme680.amb_temp = 25;
-
- int8_t rslt = BME680_OK;
- rslt = bme680.init();
- kout << "BME680 init " << rslt << endl;
-
- bme680.power_mode = BME680_FORCED_MODE;
- bme680.tph_sett.os_hum = BME680_OS_1X;
- bme680.tph_sett.os_pres = BME680_OS_16X;
- bme680.tph_sett.os_temp = BME680_OS_2X;
-
- bme680.gas_sett.run_gas = BME680_ENABLE_GAS_MEAS;
- bme680.gas_sett.heatr_dur = 30;
- bme680.gas_sett.heatr_temp = 300;
- bme680.setSensorSettings(BME680_OST_SEL | BME680_OSP_SEL | BME680_OSH_SEL | BME680_GAS_SENSOR_SEL);
- bme680.setSensorMode();
- arch.delay_ms(200);
- struct bme680_field_data data;
- bme680.getSensorData(&data);
- kout << "BME680 temperature " << (float)data.temperature / 100 << " degC" << endl;
- kout << "BME680 humidity " << (float)data.humidity / 1000 << " %" << endl;
- kout << "BME680 pressure " << (float)data.pressure / 100 << " hPa" << endl;
- kout << "BME680 gas resistance " << data.gas_resistance << endl;
-#endif
-#ifdef DRIVER_CCS811
- ccs811.read();
- kout << bin;
- kout << "CCS811 status / error: " << ccs811.status << " / " << ccs811.error_id << endl;
- kout << dec;
- kout << "CCS811 tVOC / eCO₂ : " << ccs811.tvoc << " ppb / " << ccs811.eco2 << " ppm" << endl;
-#endif
-#ifdef DRIVER_HDC1080
- /*
- hdc1080.heater(1);
- for (unsigned char i = 0; i < 50; i++) {
- hdc1080.getTemp();
- }
- */
- kout << "HDC1080 temperature " << hdc1080.getTemp() << " degC" << endl;
- kout << "HDC1080 humidity " << hdc1080.getRH() << " %H" << endl;
-#endif
-#ifdef DRIVER_MPU9250
- int mx, my, mz;
- kout << "Temperature: " << mpu9250.getTemperature() << endl;
- kout << "Accel X " << mpu9250.getAccelX() << endl;
- kout << "Accel Y " << mpu9250.getAccelY() << endl;
- kout << "Accel Z " << mpu9250.getAccelZ() << endl;
- kout << "Gyro X " << mpu9250.getGyroX() << endl;
- kout << "Gyro Y " << mpu9250.getGyroY() << endl;
- kout << "Gyro Z " << mpu9250.getGyroZ() << endl;
- mpu9250.getRawMagnet(&mx, &my, &mz);
- kout << "Magnet X " << mx << endl;
- kout << "Magnet Y " << my << endl;
- kout << "Magnet Z " << mz << endl;
-#endif
-#ifdef DRIVER_MAX44009
- kout.printf_float(max44009.getLux());
- kout << endl;
-#endif
-#ifdef DRIVER_EEPROM24LC64
- char buf[33];
- static unsigned char page = 0;
- eeprom24lc64.writePage(page, "Hello, World! Und so weiter, lol");
- arch.delay_ms(10);
- eeprom24lc64.readPage(page, buf);
- buf[32] = '\0';
- kout << "Address " << page << ": " << buf << endl;
- page++;
-#endif
-#ifdef DRIVER_MMSIMPLE
- moody.toggleBlue();
-#endif
-}
unsigned int i2c_status[128 / (8 * sizeof(unsigned int)) + 1];
@@ -184,56 +22,37 @@ int main(void)
kout.setup();
if (i2c.setup() != 0) {
+ kout << "I2C setup FAILED" << endl;
return 1;
}
kout << "I2C setup OK" << endl;
-#ifdef DRIVER_CCS811
- kout << hex;
- kout << "CCS811 HWID: " << ccs811.getManufacturerID() << endl;
- arch.delay_ms(65);
- kout << "CCS811 status: " << ccs811.getStatus() << endl;
- arch.delay_ms(65);
- ccs811.init();
- arch.delay_ms(65);
- kout << "CCS811 status: " << ccs811.getStatus() << endl;
- kout << dec;
- ccs811.setMode(2);
- //arch.delay_ms(50);
-#endif
-#ifdef DRIVER_HDC1080
- hdc1080.init();
- if (hdc1080.getManufacturerID() != 0x5449) {
- kout << "[!] invalid HDC1080 manufacturer ID: " << hex << hdc1080.getManufacturerID() << endl;
- }
-#endif
-#ifdef DRIVER_MPU9250
- mpu9250.init();
-#endif
-
- for (unsigned char i = 0; i < sizeof(i2c_status)/sizeof(unsigned int); i++) {
- i2c_status[i] = 0;
- }
-
- i2c.scan(i2c_status);
-
- kout << " 0 1 2 3 4 5 6 7 8 9 a b c d e f";
- for (unsigned char address = 0; address < 128; address++) {
- if ((address & 0x0f) == 0) {
- kout << endl;
- kout.printf_uint8(address);
- kout << ":";
+ while (1) {
+ for (unsigned char i = 0; i < sizeof(i2c_status)/sizeof(unsigned int); i++) {
+ i2c_status[i] = 0;
}
- if (i2c_status[address / (8 * sizeof(unsigned int))] & (1 << (address % (8 * sizeof(unsigned int))))) {
- kout << " ";
- kout.printf_uint8(address);
- } else {
- kout << " --";
+ i2c.scan(i2c_status);
+
+ kout << " 0 1 2 3 4 5 6 7 8 9 a b c d e f";
+ for (unsigned char address = 0; address < 128; address++) {
+ if ((address & 0x0f) == 0) {
+ kout << endl;
+ kout.printf_uint8(address);
+ kout << ":";
+ }
+
+ if (i2c_status[address / (8 * sizeof(unsigned int))] & (1 << (address % (8 * sizeof(unsigned int))))) {
+ kout << " ";
+ kout.printf_uint8(address);
+ } else {
+ kout << " --";
+ }
}
+ kout << endl << endl;
+ arch.delay_ms(1000);
}
- kout << endl;
arch.idle_loop();