nbus_memory.h 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. /*
  2. * nbus_memory.h
  3. *
  4. * Created on: Nov 4, 2023
  5. * Author: juraj
  6. */
  7. #ifndef MODULES_NBUS_INC_NBUS_MEMORY_H_
  8. #define MODULES_NBUS_INC_NBUS_MEMORY_H_
  9. #include "mcu_platform.h"
  10. #define ERROR_VALUE_I32 0x7FFFFFFF
  11. #define MODULE_SENSORS_ADDRESS_OFFSET 64
  12. #define MODULE_PARAMS_COUNT 16
  13. #define MODULE_PARAM_SIZE 4
  14. #define GET_PARAM_ADDRESS(sensor, param) \
  15. (MODULE_SENSORS_ADDRESS_OFFSET + \
  16. (sensor)*MODULE_PARAMS_COUNT * MODULE_PARAM_SIZE + \
  17. (param)*MODULE_PARAM_SIZE)
  18. #define PARAMETER_VALID 0b10
  19. #define PARAMETER_UNSET 0b01
  20. typedef struct {
  21. uint8_t (*init)(void *, uint16_t);
  22. uint32_t (*read_word)(uint16_t);
  23. uint16_t (*read_half_word)(uint16_t);
  24. uint8_t (*read_byte)(uint16_t);
  25. /**
  26. * @brief Zapíše 4B/2B/1B hodnotu na adresu
  27. * @param uint32_t data dáta
  28. * @param uint16_t address adresa v pamati. Povolený rozsah: 0-0x09FF
  29. * @param uint8_t length dĺžka zapisovaných dát
  30. */
  31. uint8_t (*write_data)(uint8_t *data, uint16_t address, uint8_t length);
  32. uint8_t (*read_id)(uint8_t *);
  33. uint32_t (*get_capacity)(void);
  34. } nBus_MemoryDriver;
  35. typedef enum {
  36. MEMORY_STORE_FAIL,
  37. MEMORY_STORE_OK,
  38. } nBus_memoryState_t;
  39. typedef struct {
  40. uint8_t (*storeParam)(uint8_t sensor_index, uint8_t param_name,
  41. uint32_t param_value);
  42. uint32_t (*readParam)(uint8_t sensor_index, uint8_t param_name);
  43. uint8_t (*isParamActive)(uint8_t sensor_index, uint8_t param_name);
  44. void (*readHeaderData)(void);
  45. uint8_t (*getId)(uint8_t *);
  46. uint32_t (*getCapacity)(void);
  47. } nBus_memoryInterface_t;
  48. typedef struct __attribute__((packed)) {
  49. uint8_t param0 : 2;
  50. uint8_t param1 : 2;
  51. uint8_t param2 : 2;
  52. uint8_t param3 : 2;
  53. } nBus_MemorySensorParam_t;
  54. typedef struct {
  55. nBus_MemorySensorParam_t params_map[64];
  56. } nBus_memoryHeader_t;
  57. nBus_memoryInterface_t *getnbusMemoryInterface(void);
  58. void nbus_memory_init(nBus_MemoryDriver *driver);
  59. /**
  60. * @brief Store sensor parameter.
  61. */
  62. nBus_memoryState_t nbus_memory_store_param(uint8_t sensor_index, uint8_t param_name,
  63. uint32_t param_value);
  64. uint32_t nbus_memory_read_param(uint8_t sensor_index, uint8_t param_name);
  65. uint8_t nbus_memory_id(uint8_t *);
  66. uint32_t nbus_get_capacity(void);
  67. void nbus_read_header_data(void);
  68. void memory_params_format(void);
  69. uint8_t nbus_is_param_active(uint8_t sensor_index, uint8_t param_name);
  70. uint8_t getParameterHeaderOffset(uint8_t sensor_index, uint8_t param_name);
  71. #endif /* MODULES_NBUS_INC_NBUS_MEMORY_H_ */