6#include <libtock-sync/services/alarm.h>
7#include <libtock/kernel/ipc.h>
12static size_t core_service = 0;
15static uint8_t core_buf[256] __attribute__((aligned(256)));
18static bool done =
false;
20static int meas_idx = 0;
31static void ipc_callback(
int pid,
int len,
int buf,
void* ud) {
57 ulog_trace(
"measure_sensor");
60 uint8_t* cmd = core_buf;
61 uint8_t* length = core_buf + 1;
62 uint8_t*
data = core_buf + 2;
72 meta.logger_id = cfg->logger_id;
73 meta.cell_id = cfg->cell_id;
76 *length = cb(
data, meta, meas_idx++);
81 ipc_notify_service(core_service);
95 ulog_trace(
"load_userconfig");
98 uint8_t* cmd = core_buf;
99 uint8_t* length = core_buf + 1;
100 uint8_t*
data = core_buf + 2;
105 ipc_notify_service(core_service);
116 ulog_trace(
"wait_for_ready");
124 ipc_notify_service(core_service);
128 ready = (bool)core_buf[1];
133 libtocksync_alarm_delay_ms(5000);
140 snprintf(prefix, prefix_size,
"Sensors\t");
145 libtocksync_alarm_delay_ms(500);
148 ulog_output_level_set_all(ULOG_LEVEL_TRACE);
150 ulog_info(
"=== Sensors App Initialized ===");
156 ret = ipc_discover(
"org.ents.core", &core_service);
158 ulog_fatal(
"No core service %d", ret);
161 ulog_info(
"Found core service");
165 ipc_register_client_callback(core_service, ipc_callback, NULL);
166 ipc_share(core_service, core_buf, 256);
178 ulog_info(
"Current user config:");
181 ulog_error(
"Could not load user config.");
191 uint32_t period_ms = (uint32_t)(cfg->Upload_interval * 1000);
198 static bool init =
false;
201 for (
int i = 0;
i < cfg->enabled_sensors_count;
i++) {
202 EnabledSensor sensor = cfg->enabled_sensors[
i];
204 if (sensor == EnabledSensor_Voltage || sensor == EnabledSensor_Current) {
208 ulog_error(
"Could not reset ads1219.");
214 if (sensor == EnabledSensor_Voltage) {
215#if !defined(USE_FLOW_METER_SENSOR) && !defined(USE_WATER_PRESSURE_SENSOR) && \
216 !defined(USE_CAP_SOIL_SENSOR) && !defined(USE_PHYTOS31_SENSOR)
222 ulog_info(
"Measured Voltage");
225#ifdef USE_FLOW_METER_SENSOR
228 ulog_info(
"Initialized flow meter");
231 ulog_info(
"Measured Flow Meter");
234#ifdef USE_WATER_PRESSURE_SENSOR
237 ulog_info(
"Initialized Water Pressure");
240 ulog_info(
"Measured Water Pressure Sensor");
243#ifdef USE_CAP_SOIL_SENSOR
246 ulog_info(
"Initialized Cap Soil");
249 ulog_info(
"Measured Cap Soil Sensor");
252#ifdef USE_PHYTOS31_SENSOR
257 if (sensor == EnabledSensor_Current) {
259 ulog_info(
"Measured Current");
269 if (sensor == EnabledSensor_BME280) {
272 ulog_info(
"Initialized BME280");
277 ulog_info(
"Measured BME280");
310 libtocksync_alarm_delay_ms(period_ms);
This file contains all the function prototypes for the ads.c file.
void wait_for_ready(void)
void ulog_prefix_handler(ulog_event *ev, char *prefix, size_t prefix_size)
uint8_t(* SensorsPrototypeMeasure)(uint8_t *data, Metadata meta, uint32_t idx)
Function prototype for measure functions.
int load_userconfig(void)
int measure_sensor(SensorsPrototypeMeasure cb)
BME280Status BME280Init(void)
uint8_t BME280MeasureHumidity(uint8_t *data, Metadata meta, uint32_t idx)
uint8_t BME280MeasureTemperature(uint8_t *data, Metadata meta, uint32_t idx)
BME280 sensor library function.
uint8_t BME280MeasurePressure(uint8_t *data, Metadata meta, uint32_t idx)
Sensor interface for the BME280 sensor.
uint8_t ads1219_sensor_voltage(uint8_t *data, Metadata meta, uint32_t idx)
Sensor measure functions.
int ads1219_reset(void)
This function starts up the ADS1219.
uint8_t ads1219_sensor_current(uint8_t *data, Metadata meta, uint32_t idx)
uint32_t ControllerMicroSDSave(const uint8_t *data, const uint16_t num_bytes)
Save data to the microSD card. Appends data to already-created files, otherwise creates a new file.
void UserConfigPrint(void)
Prints the current user configuration over serial.
const UserConfiguration * UserConfigGet(void)
Gets a reference to the loaded user configuration data in RAM.
UserConfigStatus UserConfigLoadBytes(uint8_t *buffer, uint16_t length)
Load user config from bytes.
uint32_t epoch(void)
Gets the current unix epoch timestamp.
Library for sensor measurement encoding/decoding.