app_bridge.h 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. /*
  2. * app_bridge.h
  3. *
  4. * Created on: Nov 2, 2023
  5. * Author: juraj
  6. */
  7. #ifndef MODULES_NBUS_INC_APP_BRIDGE_H_
  8. #define MODULES_NBUS_INC_APP_BRIDGE_H_
  9. #include "mcu_platform.h"
  10. typedef enum
  11. {
  12. TYPE_UNKNOWN = 0xFF,
  13. TYPE_ACCELEROMETER = 0,
  14. TYPE_GYROSCOPE,
  15. TYPE_MAGNETOMETER,
  16. TYPE_TEMPERATURE,
  17. TYPE_HUMIDITY,
  18. TYPE_PRESSURE,
  19. TYPE_HEART_RATE,
  20. TYPE_DEVIATION_DISTANCE,
  21. } nBus_sensorType_t;
  22. typedef enum
  23. {
  24. PARAM_NONE = 0xFF,
  25. PARAM_TIMEBASE = 0,
  26. PARAM_RESOLUTION,
  27. PARAM_GAIN,
  28. PARAM_OFFSET,
  29. PARAM_SAMPLERATE,
  30. PARAM_RANGE,
  31. PARAM_RANGE0,
  32. PARAM_FILTER
  33. } nBus_param_t;
  34. /**
  35. * @brief Definuje formát dát senzora.
  36. * @note Bajtová reprezentácia (Little Endian) bude nasledovná: | unit_multiplier | sign | value_multiplier | samples |
  37. * byte_length
  38. */
  39. typedef struct __attribute__((packed, aligned(1)))
  40. {
  41. /** Bit určujúci či sú dáta znamienkové.
  42. * 0 = ungigned, 1 = signed */
  43. uint8_t sign : 1;
  44. /** Násobok základnej meranej jednotky (mili, micro, kilo, deka, mega, ...)
  45. * uložený v logaritmickom tvare (pr. 2 -> 10^2).
  46. * @note: povolený rozsah [-64 , +63]
  47. */
  48. uint8_t unit_multiplier : 7;
  49. /** Násobok meranej hodnoty uložený v logaritmickom tvare (pr. 1 -> 10^1).
  50. * @note: povolený rozsah [-128 , +127]
  51. */
  52. uint8_t value_multiplier : 8;
  53. /** Počet bajtov meranej hodnoty.
  54. * @note: povolený rozsah [1 , 8]
  55. */
  56. uint8_t byte_length : 4;
  57. /** Počet vzoriek meranej hodnoty.
  58. * @note: povolený rozsah [1 , 16]
  59. */
  60. uint8_t samples : 4;
  61. } nBus_sensorFormat_t;
  62. #define PARAM_VALUE_NONE 0x7FFFFFFF
  63. nBus_param_t *nbus_interface_allParams();
  64. uint8_t nbus_interface_allParamsCount();
  65. nBus_sensorType_t *nbus_interface_allTypes();
  66. uint8_t nbus_interface_allTypesCount();
  67. typedef struct
  68. {
  69. void (*init)(void *hw_interface, void *hw_config);
  70. void (*reset)();
  71. nBus_sensorType_t (*getType)(uint8_t sensor_index);
  72. uint8_t (*getSensorCount)();
  73. uint8_t (*getData)(uint8_t sensor_index, uint8_t *data);
  74. uint8_t (*setData)(uint8_t *data);
  75. uint8_t (*hasParam)(uint8_t sensor_index, nBus_param_t param_name);
  76. int32_t (*getParam)(uint8_t sensor_index, nBus_param_t param_name);
  77. nBus_param_t (*setParam)(uint8_t sensor_index, nBus_param_t param_name, int32_t param_value);
  78. void (*start)(void);
  79. void (*stop)(void);
  80. void (*read)(void);
  81. uint8_t (*store)(void);
  82. uint8_t (*calibrate)(uint8_t subslaveIndex, uint8_t calibrationParamsNum, uint8_t *calibrationParams);
  83. nBus_sensorFormat_t (*getSensorFormat)(uint8_t sensor_index);
  84. } nBusAppInterface_t;
  85. #endif /* MODULES_NBUS_INC_APP_BRIDGE_H_ */