|
|
@@ -1,28 +1,29 @@
|
|
|
#include "nbus_app_driver.h"
|
|
|
+
|
|
|
+// Internal containers for data
|
|
|
+static tof_data_t _tof_data;
|
|
|
+static imu_data_t _imu_data;
|
|
|
+static env_data_t _env_data;
|
|
|
|
|
|
- tof_data_t tof_data;
|
|
|
- imu_data_t imu_data;
|
|
|
- env_data_t env_data;
|
|
|
+// Internal variable for phase
|
|
|
+phase_data_t _phase_data{IDLE_PH};
|
|
|
|
|
|
- phase_data_t _phase_data;
|
|
|
-
|
|
|
- int counter = 0;
|
|
|
-
|
|
|
-static nBusAppInterface_t appdrv = {
|
|
|
+// define pointers for nbus interface
|
|
|
+static nBusAppInterface_t _appdrv = {
|
|
|
appdrv_init, appdrv_reset, appdrv_getType, appdrv_getSensorCount, appdrv_getData, appdrv_setData, appdrv_hasParam,
|
|
|
appdrv_getParam, appdrv_setParam, appdrv_start, appdrv_stop, appdrv_read, appdrv_store, appdrv_calibrate, appdrv_getSensorFormat,
|
|
|
appdrv_find, appdrv_device_ready
|
|
|
};
|
|
|
|
|
|
-
|
|
|
nBusAppInterface_t *getAppdrvDriver()
|
|
|
{
|
|
|
- return &appdrv;
|
|
|
+ return &_appdrv;
|
|
|
}
|
|
|
|
|
|
void appdrv_init(void *hw_interface, void *hw_config)
|
|
|
{
|
|
|
- dtaq_read_env_data(env_data);
|
|
|
+ // initialize environmental data
|
|
|
+ dtaq_read_env_data(_env_data);
|
|
|
}
|
|
|
|
|
|
void appdrv_reset()
|
|
|
@@ -48,7 +49,10 @@ nBus_sensorType_t appdrv_getType(uint8_t sensor_index)
|
|
|
break;
|
|
|
case HUM_ID:
|
|
|
return TYPE_HYGROMETER;
|
|
|
- break;
|
|
|
+ break;
|
|
|
+ case MES_ID:
|
|
|
+ return TYPE_METADATA;
|
|
|
+ break;
|
|
|
default:
|
|
|
return TYPE_UNKNOWN;
|
|
|
}
|
|
|
@@ -56,7 +60,7 @@ nBus_sensorType_t appdrv_getType(uint8_t sensor_index)
|
|
|
|
|
|
nBus_sensorCount_t appdrv_getSensorCount()
|
|
|
{
|
|
|
- return {.read_only_count=APP_SENSOR_CNT, .read_write_count=0};
|
|
|
+ return {.read_only_count=APP_SENSOR_CNT, .read_write_count=APP_SENSOR_RW_CNT};
|
|
|
}
|
|
|
|
|
|
uint8_t appdrv_getData(uint8_t sensor_index, uint8_t *data)
|
|
|
@@ -65,33 +69,33 @@ uint8_t appdrv_getData(uint8_t sensor_index, uint8_t *data)
|
|
|
|
|
|
// measure data
|
|
|
if (OR_EQ4(sensor_index, ALL_ID, TMP_ID, HUM_ID, TOF_ID))
|
|
|
- dtaq_read_env_data(env_data);
|
|
|
+ dtaq_read_env_data(_env_data);
|
|
|
|
|
|
if (OR_EQ2(sensor_index, ALL_ID, TOF_ID))
|
|
|
- dtaq_read_tof_data(tof_data);
|
|
|
+ dtaq_read_tof_data(_tof_data);
|
|
|
|
|
|
if (OR_EQ3(sensor_index, ALL_ID, ACC_ID, GYR_ID))
|
|
|
- dtaq_read_imu_data(imu_data);
|
|
|
+ dtaq_read_imu_data(_imu_data);
|
|
|
|
|
|
// validate payload size
|
|
|
- if (NONE4(_phase_data.phase_num, tof_data.data_ready, imu_data.data_ready, env_data.data_ready))
|
|
|
+ if (NONE4(_phase_data.phase_num, _tof_data.data_ready, _imu_data.data_ready, _env_data.data_ready))
|
|
|
return 0;
|
|
|
|
|
|
// add data to tx buffer
|
|
|
if (OR_EQ2(sensor_index, ALL_ID, TOF_ID))
|
|
|
- data_size = _write_sensor_values(data, data_size, TOF_ID, tof_data.payload.coordinates, APP_TOF_VCNT);
|
|
|
+ data_size = _write_sensor_values(data, data_size, TOF_ID, _tof_data.payload.coordinates, APP_TOF_VCNT);
|
|
|
|
|
|
if (OR_EQ2(sensor_index, ALL_ID, ACC_ID))
|
|
|
- data_size = _write_sensor_values(data, data_size, ACC_ID, imu_data.payload.acc, APP_ACC_VCNT);
|
|
|
+ data_size = _write_sensor_values(data, data_size, ACC_ID, _imu_data.payload.acc, APP_ACC_VCNT);
|
|
|
|
|
|
if (OR_EQ2(sensor_index, ALL_ID, GYR_ID))
|
|
|
- data_size = _write_sensor_values(data, data_size, GYR_ID, imu_data.payload.gyr, APP_GYR_VCNT);
|
|
|
+ data_size = _write_sensor_values(data, data_size, GYR_ID, _imu_data.payload.gyr, APP_GYR_VCNT);
|
|
|
|
|
|
if (OR_EQ2(sensor_index, ALL_ID, TMP_ID))
|
|
|
- data_size = _write_sensor_values(data, data_size, TMP_ID, &env_data.payload.temp, APP_TMP_VCNT);
|
|
|
+ data_size = _write_sensor_values(data, data_size, TMP_ID, &_env_data.payload.temp, APP_TMP_VCNT);
|
|
|
|
|
|
if (OR_EQ2(sensor_index, ALL_ID, HUM_ID))
|
|
|
- data_size = _write_sensor_values(data, data_size, HUM_ID, &env_data.payload.hum, APP_HUM_VCNT);
|
|
|
+ data_size = _write_sensor_values(data, data_size, HUM_ID, &_env_data.payload.hum, APP_HUM_VCNT);
|
|
|
|
|
|
if (OR_EQ2(sensor_index, ALL_ID, MES_ID))
|
|
|
{
|
|
|
@@ -99,9 +103,7 @@ uint8_t appdrv_getData(uint8_t sensor_index, uint8_t *data)
|
|
|
data[data_size++] = _phase_data.series_num;
|
|
|
data[data_size++] = _phase_data.phase_num;
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
- counter++;
|
|
|
+
|
|
|
return data_size;
|
|
|
}
|
|
|
|
|
|
@@ -109,11 +111,11 @@ nBus_statusType_t appdrv_setData(uint8_t *data, uint8_t count, uint8_t *response
|
|
|
{
|
|
|
if (data[0] == MES_ID)
|
|
|
{
|
|
|
+ // update phase data
|
|
|
_phase_data.series_num = data[1];
|
|
|
_phase_data.phase_num = (app_phase_t)data[2];
|
|
|
|
|
|
- //Serial.printf("%d -- %d %d\n", millis(), _phase_data.series_num, _phase_data.phase_num );
|
|
|
-
|
|
|
+ // set new working mode
|
|
|
dtaq_set_working_mode(_phase_data.phase_num);
|
|
|
|
|
|
return STATUS_SUCCESS;
|
|
|
@@ -144,8 +146,12 @@ nBus_statusType_t appdrv_start(void)
|
|
|
|
|
|
nBus_statusType_t appdrv_stop(void)
|
|
|
{
|
|
|
+ // reset phase data
|
|
|
_phase_data.phase_num = IDLE_PH;
|
|
|
_phase_data.series_num = 0;
|
|
|
+
|
|
|
+ // reset working mode
|
|
|
+ dtaq_set_working_mode(_phase_data.phase_num);
|
|
|
|
|
|
return STATUS_SUCCESS;
|
|
|
}
|
|
|
@@ -165,7 +171,6 @@ nBus_statusType_t appdrv_calibrate(uint8_t sensor_index)
|
|
|
return STATUS_SUCCESS;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
nBus_sensorFormat_t appdrv_getSensorFormat(uint8_t sensor_index)
|
|
|
{
|
|
|
switch (sensor_index)
|
|
|
@@ -222,11 +227,11 @@ nBus_sensorFormat_t appdrv_getSensorFormat(uint8_t sensor_index)
|
|
|
|
|
|
case MES_ID:
|
|
|
return (nBus_sensorFormat_t) {
|
|
|
- .sign = 0,
|
|
|
- .unit_multiplier = 0,
|
|
|
- .value_multiplier = 0,
|
|
|
- .byte_length = 1,
|
|
|
- .samples = 2
|
|
|
+ .sign = APP_MES_VSGN,
|
|
|
+ .unit_multiplier = APP_MES_ULMUL,
|
|
|
+ .value_multiplier = APP_MES_VLMUL,
|
|
|
+ .byte_length = APP_MES_BCNT,
|
|
|
+ .samples = APP_MES_VCNT
|
|
|
};
|
|
|
break;
|
|
|
|