| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- /*
- * nbus_memory.h
- *
- * Created on: Nov 4, 2023
- * Author: juraj
- */
- #ifndef MODULES_NBUS_INC_NBUS_MEMORY_H_
- #define MODULES_NBUS_INC_NBUS_MEMORY_H_
- #include "mcu_platform.h"
- #define ERROR_VALUE_I32 0x7FFFFFFF
- #define MODULE_SENSORS_ADDRESS_OFFSET 64
- #define MODULE_PARAMS_COUNT 16
- #define MODULE_PARAM_SIZE 4
- #define GET_PARAM_ADDRESS(sensor, param) \
- (MODULE_SENSORS_ADDRESS_OFFSET + \
- (sensor)*MODULE_PARAMS_COUNT * MODULE_PARAM_SIZE + \
- (param)*MODULE_PARAM_SIZE)
- #define PARAMETER_VALID 0b10
- #define PARAMETER_UNSET 0b01
- typedef struct {
- uint8_t (*init)(void *, uint16_t);
- uint32_t (*read_word)(uint16_t);
- uint16_t (*read_half_word)(uint16_t);
- uint8_t (*read_byte)(uint16_t);
- /**
- * @brief Zapíše 4B hodnotu na adresu
- * @param uint32_t data dáta
- * @param uint16_t address adresa v pamati. Povolený rozsah: 0-0x09FF
- */
- uint8_t (*write_word)(uint32_t data, uint16_t address);
- uint8_t (*write_half_word)(uint16_t, uint16_t);
- uint8_t (*write_byte)(uint8_t, uint16_t);
- uint8_t (*read_id)(uint8_t *);
- uint32_t (*get_capacity)(void);
- } nBus_MemoryDriver;
- typedef enum {
- MEMORY_STORE_FAIL,
- MEMORY_STORE_OK,
- } nBus_memoryState_t;
- typedef struct {
- uint8_t (*storeParam)(uint8_t sensor_index, uint8_t param_name,
- uint32_t param_value);
- uint32_t (*readParam)(uint8_t sensor_index, uint8_t param_name);
- uint8_t (*isParamActive)(uint8_t sensor_index, uint8_t param_name);
- void (*readHeaderData)(void);
- uint8_t (*getId)(uint8_t *);
- uint32_t (*getCapacity)(void);
- } nBus_memoryInterface_t;
- typedef struct __attribute__((packed)) {
- uint8_t param0 : 2;
- uint8_t param1 : 2;
- uint8_t param2 : 2;
- uint8_t param3 : 2;
- } nBus_MemorySensorParam_t;
- typedef struct {
- nBus_MemorySensorParam_t params_map[64];
- } nBus_memoryHeader_t;
- nBus_memoryInterface_t *getnbusMemoryInterface(void);
- void nbus_memory_init(nBus_MemoryDriver *driver);
- /**
- * @brief Store sensor parameter.
- */
- nBus_memoryState_t nbus_store_param(uint8_t sensor_index, uint8_t param_name,
- uint32_t param_value);
- uint32_t nbus_read_param(uint8_t sensor_index, uint8_t param_name);
- uint8_t nbus_memory_id(uint8_t *);
- uint32_t nbus_get_capacity(void);
- void nbus_read_header_data(void);
- void memory_params_format(void);
- uint8_t nbus_is_param_active(uint8_t sensor_index, uint8_t param_name);
- uint8_t getParameterHeaderOffset(uint8_t sensor_index, uint8_t param_name);
- #endif /* MODULES_NBUS_INC_NBUS_MEMORY_H_ */
|