|
|
@@ -1,12 +1,61 @@
|
|
|
#include "app_dummy.h"
|
|
|
#include <stdint.h>
|
|
|
|
|
|
+
|
|
|
nBusAppInterface_t dummy_driver = {
|
|
|
dummy_init, dummy_reset, dummy_getType, dummy_getSensorCount, dummy_getData,
|
|
|
dummy_setData, dummy_hasParam, dummy_getParam, dummy_setParam, dummy_start,
|
|
|
dummy_stop, dummy_read, dummy_store, dummy_calibrate, dummy_getSensorFormat,
|
|
|
+ dummy_find, dummy_device_ready
|
|
|
};
|
|
|
|
|
|
+
|
|
|
+////////////////////////////////////////////////////////////// Dummy test data structure /////////////////////////////////////////////////////////////////////
|
|
|
+uint16_t dummy_data_acc[3] = {0x31F5, 0xCCBD, 0xAABB}; // dec: 12789, -13123, -21829
|
|
|
+uint32_t dummy_data_gyro[3] = {0x1234ABCD, 0xFEDCBA98, 0x89ABCD13}; // dec: 305441741, -19088744, -1985229549
|
|
|
+uint8_t dummy_data_mag[2] = {0xAB, 0x12}; // dec: 171, 18
|
|
|
+uint64_t dummy_data_hrate[2] = {0x1234ABCD7890ABCD, 0xABCD123498765432}; // dec: 1311862290451049421, -6067173105892699086
|
|
|
+uint16_t dummy_data_pressure[1] = {0x7FAB}; // dec: 32683
|
|
|
+uint8_t dummy_data_led = 0;
|
|
|
+uint16_t dummy_data_motor[2] = {0x0000, 0x0000};
|
|
|
+
|
|
|
+
|
|
|
+#define DUMMY_SUB_COUNT 7
|
|
|
+#define DUMMY_SENSOR_COUNT 5
|
|
|
+#define DUMMY_ACTUATOR_COUNT 2
|
|
|
+
|
|
|
+
|
|
|
+// dummy sensors
|
|
|
+uint8_t *dummy_data_sensors[DUMMY_SENSOR_COUNT] = {(uint8_t *)dummy_data_acc, (uint8_t *)dummy_data_gyro, (uint8_t *)dummy_data_mag,
|
|
|
+ (uint8_t *)dummy_data_hrate, (uint8_t *)dummy_data_pressure};
|
|
|
+
|
|
|
+uint8_t dummy_data_sensor_lens[DUMMY_SENSOR_COUNT] = {sizeof(dummy_data_acc), sizeof(dummy_data_gyro), sizeof(dummy_data_mag), sizeof(dummy_data_hrate),
|
|
|
+ sizeof(dummy_data_pressure)};
|
|
|
+
|
|
|
+// dummy actuators
|
|
|
+uint8_t *dummy_data_actuators[DUMMY_ACTUATOR_COUNT] = {(uint8_t *)&dummy_data_led, (uint8_t *)dummy_data_motor};
|
|
|
+
|
|
|
+
|
|
|
+uint8_t dummy_data_actuator_lens[DUMMY_ACTUATOR_COUNT] = {sizeof(dummy_data_led), sizeof(dummy_data_motor)};
|
|
|
+
|
|
|
+
|
|
|
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
+
|
|
|
+
|
|
|
+uint8_t _dummy_memcpy(uint8_t sensor_index, uint8_t *dst, uint8_t *src, uint8_t count)
|
|
|
+{
|
|
|
+ uint8_t i = 0;
|
|
|
+
|
|
|
+ dst[i] = sensor_index;
|
|
|
+
|
|
|
+ for (; i < count; i++)
|
|
|
+ dst[i + 1] = src[i];
|
|
|
+
|
|
|
+ return i + 1;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
nBusAppInterface_t *getDummyDriver()
|
|
|
{
|
|
|
return &dummy_driver;
|
|
|
@@ -14,18 +63,16 @@ nBusAppInterface_t *getDummyDriver()
|
|
|
|
|
|
void dummy_init(void *hw_interface, void *hw_config)
|
|
|
{
|
|
|
+ // init whole module
|
|
|
}
|
|
|
|
|
|
void dummy_reset()
|
|
|
{
|
|
|
+ // reset all devices
|
|
|
}
|
|
|
|
|
|
nBus_sensorType_t dummy_getType(uint8_t sensor_index)
|
|
|
{
|
|
|
-
|
|
|
- if (sensor_index > dummy_getSensorCount())
|
|
|
- return TYPE_UNKNOWN;
|
|
|
-
|
|
|
switch (sensor_index)
|
|
|
{
|
|
|
case 1:
|
|
|
@@ -35,66 +82,108 @@ nBus_sensorType_t dummy_getType(uint8_t sensor_index)
|
|
|
case 3:
|
|
|
return TYPE_MAGNETOMETER;
|
|
|
case 4:
|
|
|
- return TYPE_HEART_RATE;
|
|
|
+ return TYPE_HEART_RATE_MONITOR;
|
|
|
case 5:
|
|
|
- return TYPE_PRESSURE;
|
|
|
+ return TYPE_PRESSURE_GAUGE;
|
|
|
+ case 129:
|
|
|
+ return TYPE_LED_CONTROLLER;
|
|
|
+ case 130:
|
|
|
+ return TYPE_MOTOR_CONTROLLER;
|
|
|
}
|
|
|
return TYPE_UNKNOWN;
|
|
|
}
|
|
|
|
|
|
uint8_t dummy_getSensorCount()
|
|
|
{
|
|
|
- return 5;
|
|
|
+ return 7;
|
|
|
}
|
|
|
|
|
|
-uint16_t dummy_data_acc[3] = {0x31F5, 0xCCBD, 0xAABB}; // dec: 12789, -13123, -21829
|
|
|
-uint32_t dummy_data_gyro[3] = {0x1234ABCD, 0xFEDCBA98, 0x89ABCD13}; // dec: 305441741, -19088744, -1985229549
|
|
|
-uint8_t dummy_data_mag[2] = {0xAB, 0x12}; // dec: 171, 18
|
|
|
-uint64_t dummy_data_hrate[2] = {0x1234ABCD7890ABCD,
|
|
|
- 0xABCD123498765432}; // dec: 1311862290451049421, -6067173105892699086
|
|
|
-uint16_t dummy_pressure[1] = {0x7FAB}; // dec: 32683
|
|
|
-
|
|
|
-uint8_t *dummy_data_ptrs[5] = {(uint8_t *)dummy_data_acc, (uint8_t *)dummy_data_gyro, (uint8_t *)dummy_data_mag,
|
|
|
- (uint8_t *)dummy_data_hrate, (uint8_t *)dummy_pressure};
|
|
|
-uint8_t dummy_data_lens[5] = {6, 12, 2, 16, 2};
|
|
|
|
|
|
uint8_t dummy_getData(uint8_t sensor_index, uint8_t *data)
|
|
|
{
|
|
|
- uint16_t current_len = 0;
|
|
|
+ uint8_t buff_index = 0;
|
|
|
|
|
|
- if (sensor_index)
|
|
|
+ switch (sensor_index)
|
|
|
{
|
|
|
- data[current_len++] = sensor_index;
|
|
|
+ case 1:
|
|
|
+ case 2:
|
|
|
+ case 3:
|
|
|
+ case 4:
|
|
|
+ case 5:
|
|
|
+ return _dummy_memcpy(sensor_index, data, dummy_data_sensors[sensor_index - 1], dummy_data_sensor_lens[sensor_index - 1]);
|
|
|
|
|
|
- uint16_t byte_len = dummy_data_lens[sensor_index - 1];
|
|
|
+ case 129:
|
|
|
+ case 130:
|
|
|
+ return _dummy_memcpy(sensor_index, data, dummy_data_actuators[sensor_index - 129], dummy_data_actuator_lens[sensor_index - 129]);
|
|
|
|
|
|
- for (uint16_t i = 0; i < byte_len; i++)
|
|
|
- {
|
|
|
- data[current_len++] = dummy_data_ptrs[sensor_index - 1][i];
|
|
|
- }
|
|
|
- }
|
|
|
- else
|
|
|
+ case 0:
|
|
|
{
|
|
|
- uint16_t sensors = dummy_getSensorCount();
|
|
|
+ uint8_t buff_index = 0;
|
|
|
+
|
|
|
+ for (uint8_t i = 0; i < DUMMY_SENSOR_COUNT; i++)
|
|
|
+ buff_index += _dummy_memcpy(i + 1, data + buff_index, dummy_data_sensors[i], dummy_data_sensor_lens[i]);
|
|
|
+
|
|
|
+ for (uint8_t i = 0; i < DUMMY_ACTUATOR_COUNT; i++)
|
|
|
+ buff_index += _dummy_memcpy(i + 129, data + buff_index, dummy_data_actuators[i], dummy_data_actuator_lens[i]);
|
|
|
+
|
|
|
+ return buff_index;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+
|
|
|
+ default:
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+}
|
|
|
|
|
|
- for (uint16_t sensor = 0; sensor < sensors; sensor++)
|
|
|
+nBus_statusType_t dummy_setData(uint8_t *data, uint8_t count, uint8_t *response)
|
|
|
+{
|
|
|
+ uint8_t actuaror_id;
|
|
|
+ nBus_sensorFormat_t actuator_format;
|
|
|
+ uint8_t actuator_byte_count;
|
|
|
+ uint8_t response_idx = 0;
|
|
|
+ uint8_t data_idx = 0;
|
|
|
+
|
|
|
+
|
|
|
+ while(data_idx < count)
|
|
|
+ {
|
|
|
+ actuaror_id = data[data_idx++]; // fetch actuator id
|
|
|
+
|
|
|
+ switch (actuaror_id)
|
|
|
{
|
|
|
- data[current_len++] = sensor + 1;
|
|
|
- uint16_t byte_len = dummy_data_lens[sensor];
|
|
|
+ case 129:
|
|
|
+ case 130:
|
|
|
+ {
|
|
|
+ actuator_format = dummy_getSensorFormat(actuaror_id);
|
|
|
+ actuator_byte_count = actuator_format.samples * actuator_format.byte_length;
|
|
|
+
|
|
|
+ // check for overflow
|
|
|
+ // if (data_idx + actuator_byte_count > count)
|
|
|
+ {
|
|
|
+ //response[response_idx++] = actuaror_id;
|
|
|
+ //response[response_idx++] = STATUS_FAIL;
|
|
|
+ //data_idx = count;
|
|
|
+ //break;
|
|
|
+ }
|
|
|
|
|
|
- for (uint16_t i = 0; i < byte_len; i++)
|
|
|
+ for (uint8_t i = 0; i < actuator_byte_count; i++)
|
|
|
{
|
|
|
- data[current_len++] = dummy_data_ptrs[sensor][i];
|
|
|
+
|
|
|
+ dummy_data_actuators[actuaror_id - 129][i] = data[data_idx++];
|
|
|
}
|
|
|
+
|
|
|
+ response[response_idx++] = actuaror_id;
|
|
|
+ response[response_idx++] = STATUS_SUCCESS;
|
|
|
}
|
|
|
- }
|
|
|
+ break;
|
|
|
|
|
|
- return current_len;
|
|
|
-}
|
|
|
+ default:
|
|
|
+ response[response_idx++] = actuaror_id;
|
|
|
+ response[response_idx++] = STATUS_NOT_SUPPORTED;
|
|
|
+ }
|
|
|
|
|
|
-uint8_t dummy_setData(uint8_t *data)
|
|
|
-{
|
|
|
- return 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ return response_idx;
|
|
|
}
|
|
|
|
|
|
int32_t dummy_getParam(uint8_t sensor_index, nBus_param_t param)
|
|
|
@@ -109,9 +198,9 @@ uint8_t dummy_hasParam(uint8_t sensor_index, nBus_param_t param)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-nBus_param_t dummy_setParam(uint8_t sensor_index, nBus_param_t param, int32_t value)
|
|
|
+nBus_statusType_t dummy_setParam(uint8_t sensor_index, nBus_param_t param, int32_t value)
|
|
|
{
|
|
|
- return param;
|
|
|
+ return STATUS_SUCCESS;
|
|
|
}
|
|
|
|
|
|
void dummy_start(void)
|
|
|
@@ -134,9 +223,9 @@ uint8_t dummy_store(void)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-uint8_t dummy_calibrate(uint8_t subslaveIndex, uint8_t calibrationParamsNum, uint8_t *calibrationParams)
|
|
|
+ nBus_statusType_t dummy_calibrate(uint8_t sensor_index)
|
|
|
{
|
|
|
- return 0;
|
|
|
+ return STATUS_NOT_SUPPORTED;
|
|
|
}
|
|
|
|
|
|
nBus_sensorFormat_t dummy_getSensorFormat(uint8_t sensor_index)
|
|
|
@@ -163,5 +252,23 @@ nBus_sensorFormat_t dummy_getSensorFormat(uint8_t sensor_index)
|
|
|
return (nBus_sensorFormat_t){
|
|
|
.sign = 1, .unit_multiplier = 4, .value_multiplier = -3, .byte_length = 2, .samples = 1};
|
|
|
break;
|
|
|
+ case 129:
|
|
|
+ return (nBus_sensorFormat_t){
|
|
|
+ .sign = 0, .unit_multiplier = 0, .value_multiplier = 0, .byte_length = 1, .samples = 1};
|
|
|
+ break;
|
|
|
+ case 130:
|
|
|
+ return (nBus_sensorFormat_t){
|
|
|
+ .sign = 1, .unit_multiplier = 1, .value_multiplier = -3, .byte_length = 2, .samples = 2};
|
|
|
+ break;
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+nBus_statusType_t dummy_find(uint8_t enable)
|
|
|
+{
|
|
|
+ return STATUS_NOT_SUPPORTED;
|
|
|
+}
|
|
|
+
|
|
|
+uint8_t dummy_device_ready()
|
|
|
+{
|
|
|
+ return 1;
|
|
|
+}
|