ソースを参照

add Memory layer. for storing parameters

Juraj Ďuďák 2 年 前
コミット
fda3d79fea
7 ファイル変更102 行追加7 行削除
  1. 1 1
      Inc/app_bridge.h
  2. 4 1
      Inc/nbus_app.h
  3. 54 0
      Inc/nbus_memory.h
  4. 4 2
      Inc/nbus_types.h
  5. 5 2
      Src/nbus_app.c
  6. 2 1
      Src/nbus_impl.c
  7. 32 0
      Src/nbus_memory.c

+ 1 - 1
Inc/app_bridge.h

@@ -8,7 +8,7 @@
 #ifndef MODULES_NBUS_INC_APP_BRIDGE_H_
 #define MODULES_NBUS_INC_APP_BRIDGE_H_
 
-#include <stdint.h>
+#include "mcu_platform.h"
 
 typedef enum{
 	TYPE_UNKNOWN = 0xFF,

+ 4 - 1
Inc/nbus_app.h

@@ -11,11 +11,14 @@
 #include "nbus_impl.h"
 #include "nbus_cmd.h"
 #include "app_bridge.h"
+#include "nbus_memory.h"
+#include "one_wire.h"
+#include "memory_ec20.h"
 
 void nbus_init(Peripheral_typeDef *periph, nBusAppInterface_t *interface);
 void nbus_init_app(void *hw_interface, void *hw_config);
 void nbus_stack(void);
-
+void nbus_init_memory_driver(nBus_MemoryDriver *memDriver, uint16_t capacity);
 
 
 #endif

+ 54 - 0
Inc/nbus_memory.h

@@ -0,0 +1,54 @@
+/*
+ * 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"
+
+
+typedef struct{
+	uint8_t (*init)(GPIO_TypeDef*, uint16_t);
+	uint32_t (*read_word)(uint16_t);
+	uint16_t (*read_half_word)(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);
+} 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 (*getParam)(uint8_t sensor_index, uint8_t param_name);
+}nBus_memoryInterface_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);
+
+
+
+
+#endif /* MODULES_NBUS_INC_NBUS_MEMORY_H_ */

+ 4 - 2
Inc/nbus_types.h

@@ -9,9 +9,9 @@
 #define __NBUS_TYPES_H
 
 #include <stdint.h>
-#include "mcu_platform.h"
 #include "nbus_config.h"
 #include "app_bridge.h"
+#include "nbus_memory.h"
 
 /**
 * @brief Počet bajtov v pakete, ktoré tvoria réžiu.
@@ -159,6 +159,7 @@ typedef enum {
 } nBusMeasurementActive_t;
 
 
+
 /**
 * @brief Základná štruktúra protokolu nBUS.
 *
@@ -217,6 +218,8 @@ typedef struct {
 
     nBusAppInterface_t *interface;
 
+    nBus_memoryInterface_t *memoryInterface;
+
 #if USE_USART_DMA_TX == 1
     /**
      * @brief Príznak ukončenia odoslania dát cez DMA
@@ -263,7 +266,6 @@ typedef enum {
 
 
 
-
 /**
 * @TODO prerobit na nBUS
 * @brief Pripraví chybovú odpoveď prorokolu nBus.

+ 5 - 2
Src/nbus_app.c

@@ -2,7 +2,6 @@
 
 nBus_TypeDef nBus;
 
-
 static uint8_t const crc8x_table[] = {
 		0x00,0x07,0x0E,0x09,0x1C,0x1B,0x12,0x15,0x38,0x3F,0x36,0x31,0x24,0x23,0x2A,0x2D,
 		0x70,0x77,0x7E,0x79,0x6C,0x6B,0x62,0x65,0x48,0x4F,0x46,0x41,0x54,0x53,0x5A,0x5D,
@@ -213,12 +212,16 @@ void nbus_init_app(void *hw_interface, void *hw_config){
 	nBus.interface->init(hw_interface, hw_config);
 }
 
+void nbus_init_memory_driver(nBus_MemoryDriver *memDriver, uint16_t capacity){
+	nbus_memory_init(memDriver);
+	nBus.memoryInterface = getnbusMemoryInterface();
+}
+
 void nbus_stack(void){
 	receiveOneByte();
 
 	while(1){
 		if(nBus.uart_state == UART_RECEIVED){
-			//HAL_TIM_Base_Stop_IT(nBus.periph->uart_timer);
 
 			process_request();
 

+ 2 - 1
Src/nbus_impl.c

@@ -1,5 +1,4 @@
 #include "nbus_impl.h"
-#include "app_bridge.h"
 
 
 inline static void setErrorResponse(nBus_TypeDef *nbus, uint8_t code){
@@ -44,6 +43,8 @@ void nbus_unicastToSensorGet(nBus_TypeDef *nbus){
 			}
 
 		}
+		// alebo
+		nbus->memoryInterface->getParam(nbus->sensorInfo.address, 0x05);
 	}
 	break;
 

+ 32 - 0
Src/nbus_memory.c

@@ -0,0 +1,32 @@
+/*
+ * nbus_memory.c
+ *
+ *  Created on: Nov 4, 2023
+ *      Author: juraj
+ */
+
+#include "nbus_memory.h"
+
+nBus_MemoryDriver *memoryImplementation;
+
+nBus_memoryInterface_t memory_itnerface = {
+		nbus_store_param,
+		nbus_read_param
+};
+
+nBus_memoryInterface_t *getnbusMemoryInterface(void){
+	return &memory_itnerface;
+}
+
+void nbus_memory_init(nBus_MemoryDriver *driver){
+	memoryImplementation = driver;
+}
+
+
+nBus_memoryState_t nbus_store_param(uint8_t sensor_index, uint8_t param_name, uint32_t param_value){
+	return MEMORY_STORE_OK;
+}
+uint32_t nbus_read_param(uint8_t sensor_index, uint8_t param_name){
+	uint16_t adr = sensor_index + param_name;
+	return memoryImplementation->read_word(adr);;
+}