/* * app_bridge.h * * Created on: Nov 2, 2023 * Author: juraj */ #ifndef MODULES_NBUS_INC_APP_BRIDGE_H_ #define MODULES_NBUS_INC_APP_BRIDGE_H_ #include "mcu_platform.h" typedef enum { // read-only sensors TYPE_UNKNOWN = 0xFF, TYPE_ACCELEROMETER = 0, TYPE_GYROSCOPE, TYPE_MAGNETOMETER, TYPE_THERMOMETER, TYPE_HYGROMETER, TYPE_PRESSURE_GAUGE, TYPE_HEART_RATE_MONITOR, TYPE_LENGTH_GAUGE, // read-write sensors TYPE_LED_CONTROLLER, TYPE_MOTOR_CONTROLLER } nBus_sensorType_t; typedef enum { PARAM_NONE = 0xFF, PARAM_TIMEBASE = 0, PARAM_RESOLUTION, PARAM_GAIN, PARAM_OFFSET, PARAM_SAMPLERATE, PARAM_RANGE, PARAM_RANGE0, PARAM_FILTER, _NBUS_PARAM_COUNT // number of parameters, must be last! } nBus_param_t; typedef enum { STATUS_NOT_SUPPORTED = 0xFF, STATUS_SUCCESS = 0, STATUS_FAIL = 1 } nBus_statusType_t; /** * @brief Definuje formát dát senzora. * @note Bajtová reprezentácia (Little Endian) bude nasledovná: | unit_multiplier | sign | value_multiplier | samples | * byte_length */ typedef struct __attribute__((packed, aligned(1))) { /** Bit určujúci či sú dáta znamienkové. * 0 = ungigned, 1 = signed */ uint8_t sign : 1; /** Násobok základnej meranej jednotky (mili, micro, kilo, deka, mega, ...) * uložený v logaritmickom tvare (pr. 2 -> 10^2). * @note: povolený rozsah [-64 , +63] */ uint8_t unit_multiplier : 7; /** Násobok meranej hodnoty uložený v logaritmickom tvare (pr. 1 -> 10^1). * @note: povolený rozsah [-128 , +127] */ uint8_t value_multiplier : 8; /** Počet bajtov meranej hodnoty. * @note: povolený rozsah [1 , 8] */ uint8_t byte_length : 4; /** Počet vzoriek meranej hodnoty. * @note: povolený rozsah [1 , 16] */ uint8_t samples : 4; } nBus_sensorFormat_t; typedef struct { uint8_t read_only_count; uint8_t read_write_count; } nBus_sensorCount_t; #define PARAM_VALUE_NONE 0x7FFFFFFF typedef struct { void (*init)(void *hw_interface, void *hw_config); void (*reset)(); nBus_sensorType_t (*getType)(uint8_t sensor_index); nBus_sensorCount_t (*getSensorCount)(); uint8_t (*getData)(uint8_t sensor_index, uint8_t *data); nBus_statusType_t (*setData)(uint8_t *data, uint8_t count, uint8_t *response); uint8_t (*hasParam)(uint8_t sensor_index, nBus_param_t param_name); int32_t (*getParam)(uint8_t sensor_index, nBus_param_t param_name); nBus_statusType_t (*setParam)(uint8_t sensor_index, nBus_param_t param_name, int32_t param_value); nBus_statusType_t (*start)(void); nBus_statusType_t (*stop)(void); void (*read)(void); uint8_t (*store)(void); nBus_statusType_t (*calibrate)(uint8_t sensor_index); nBus_sensorFormat_t (*getSensorFormat)(uint8_t sensor_index); nBus_statusType_t (*find)(uint8_t enable); uint8_t (*device_ready)(); } nBusAppInterface_t; #endif /* MODULES_NBUS_INC_APP_BRIDGE_H_ */