Browse Source

implement ICM sensor on SPI (application callback)

Juraj Ďuďák 1 year ago
parent
commit
143c92dd34

+ 1 - 0
Inc/app_bridge.h

@@ -51,6 +51,7 @@ typedef struct{
 	nBus_param_t (*setParam)(uint8_t sensor_index, nBus_param_t param_name, uint8_t param_value);
 	nBus_param_t (*setParam)(uint8_t sensor_index, nBus_param_t param_name, uint8_t param_value);
 	void (*start)();
 	void (*start)();
 	void (*stop)();
 	void (*stop)();
+	void (*read)();
 }nBusAppInterface_t;
 }nBusAppInterface_t;
 
 
 
 

+ 36 - 0
Inc/app_dummy.h

@@ -0,0 +1,36 @@
+/*
+ * app_dummy.h
+ *
+ *  Created on: Nov 2, 2023
+ *      Author: juraj
+ */
+
+#ifndef INC_APP_DUMMY_H_
+#define INC_APP_DUMMY_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "app_bridge.h"
+
+nBusAppInterface_t *getDummyDriver();
+
+void dummy_init(void *hw_interface, void *hw_config);
+void dummy_reset();
+nBus_sensorType_t dummy_getType(uint8_t sensor_index);
+uint8_t dummy_getSensorCount();
+uint8_t dummy_getData(uint8_t sensor_index, uint8_t *data);
+uint8_t dummy_setData(uint8_t *data);
+uint8_t dummy_getParam(uint8_t sensor_index, nBus_param_t param);
+uint8_t dummy_hasParam(uint8_t sensor_index, nBus_param_t param);
+nBus_param_t dummy_setParam(uint8_t sensor_index, nBus_param_t param, uint8_t value);
+void dummy_start(void);
+void dummy_stop(void);
+void dummy_read(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* INC_APP_DUMMY_H_ */

+ 4 - 0
Inc/mcu_platform.h

@@ -43,4 +43,8 @@
 #include "stm32l4xx_hal.h"
 #include "stm32l4xx_hal.h"
 #endif
 #endif
 
 
+#if defined(ESP32) || defined (ESP8266)
+#include "inttypes.h"
+#endif
+
 #endif
 #endif

+ 10 - 0
Inc/nbus_app.h

@@ -18,13 +18,23 @@
 
 
 #include "nbus_cmd.h"
 #include "nbus_cmd.h"
 
 
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
 void nbus_init(nBusAppInterface_t *interface, nBusPlatformInterface_t *hw);
 void nbus_init(nBusAppInterface_t *interface, nBusPlatformInterface_t *hw);
 void nbus_init_app(void *hw_interface, void *hw_config);
 void nbus_init_app(void *hw_interface, void *hw_config);
+void nbus_set_app_callback(void (*cb)());
 void nbus_stack(void);
 void nbus_stack(void);
 void nbus_init_memory_driver(nBus_MemoryDriver *memDriver, uint16_t capacity);
 void nbus_init_memory_driver(nBus_MemoryDriver *memDriver, uint16_t capacity);
 
 
 void nbus_cb_UART_RX(void);
 void nbus_cb_UART_RX(void);
 void nbus_cb_TIM_periodElapsed(void);
 void nbus_cb_TIM_periodElapsed(void);
 
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif
 #endif
 
 

+ 6 - 0
Inc/nbus_config.h.default

@@ -23,12 +23,18 @@
 
 
 // Do not modify
 // Do not modify
 
 
+#define MODULE_DUMMY 0xFF
 #define MODULE_FSR 	1		
 #define MODULE_FSR 	1		
 #define MODULE_IMU 	2
 #define MODULE_IMU 	2
 #define MODULE_GNOSTIC_DISTANCE 	3
 #define MODULE_GNOSTIC_DISTANCE 	3
 
 
 #define MODULE MODULE_FSR
 #define MODULE MODULE_FSR
 
 
+#if MODULE == MODULE_DUMMY
+	// MUST BE 3 BYTE LONG
+	#define MODULE_TYPE "DMY"
+#endif
+
 #if MODULE == MODULE_FSR
 #if MODULE == MODULE_FSR
 	// MUST BE 3 BYTE LONG
 	// MUST BE 3 BYTE LONG
 	#define MODULE_TYPE "FSR"
 	#define MODULE_TYPE "FSR"

+ 1 - 0
Inc/nbus_types.h

@@ -107,6 +107,7 @@ typedef struct{
 	void (*timer_uart_start)(int);
 	void (*timer_uart_start)(int);
 	void (*timer_uart_stop)(void);
 	void (*timer_uart_stop)(void);
 	void (*delay_ms)(uint8_t);
 	void (*delay_ms)(uint8_t);
+	uint8_t (*loop_callback)(void);
 
 
 }nBusPlatformInterface_t;
 }nBusPlatformInterface_t;
 
 

+ 97 - 0
Src/app_dummy.c

@@ -0,0 +1,97 @@
+#include "app_dummy.h"
+#include <stdint.h>
+
+
+nBusAppInterface_t dummy_driver = {
+	  dummy_init,
+	  dummy_reset,
+	  dummy_getType,
+	  dummy_getSensorCount,
+	  dummy_getData,
+	  dummy_setData,
+	  dummy_hasParam,
+	  dummy_getParam,
+	  dummy_setParam,
+	  dummy_start,
+	  dummy_stop,
+	  dummy_read,
+};
+
+
+nBusAppInterface_t *getDummyDriver(){
+	return &dummy_driver;
+}
+
+void dummy_init(void *hw_interface, void *hw_config){
+
+}
+
+void dummy_reset(){
+
+}
+
+nBus_sensorType_t dummy_getType(uint8_t sensor_index){
+
+	if (sensor_index > dummy_getSensorCount())
+		return TYPE_UNKNOWN;
+
+	switch (sensor_index){
+	case 1:
+		return TYPE_ACCELEROMETER;
+	case 2:
+		return TYPE_GYROSCOPE;
+	case 3:
+		return TYPE_MAGNETOMETER;
+	case 4:
+		return TYPE_HEART_RATE;
+	case 5:
+		return TYPE_PRESSURE;
+	}
+	return TYPE_UNKNOWN;
+}
+
+
+uint8_t dummy_getSensorCount(){
+	return 4;
+}
+
+uint32_t dummy_data[4]={0x12345678, 0x9ABCDEF0, 0x87654321, 0x0FEDCBA9};
+
+uint8_t dummy_getData(uint8_t sensor_index, uint8_t *data){
+    for (uint8_t i=0; i<4 ;++i){
+            data[i] = ((uint8_t*)&dummy_data)[i+(sensor_index-1)*8];
+            data[4+i] = ((uint8_t*)&dummy_data)[4+i+(sensor_index-1)*8];
+    }
+
+	return 8;
+}
+
+uint8_t dummy_setData(uint8_t *data){
+	return 1;
+}
+
+uint8_t dummy_getParam(uint8_t sensor_index, nBus_param_t param){
+	return 0xAB;
+}
+
+uint8_t dummy_hasParam(uint8_t sensor_index, nBus_param_t param){
+	if (sensor_index < dummy_getSensorCount())
+		return 1;
+	return 0;
+}
+
+nBus_param_t dummy_setParam(uint8_t sensor_index, nBus_param_t param, uint8_t value){
+	return param;
+}
+
+void dummy_start(void){
+	return;
+}
+
+void dummy_stop(void){
+	return;
+}
+
+void dummy_read(void){
+	return;
+}

+ 6 - 1
Src/nbus_app.c

@@ -234,7 +234,6 @@ void nbus_init_memory_driver(nBus_MemoryDriver *memDriver, uint16_t capacity){
 void nbus_stack(void){
 void nbus_stack(void){
 
 
 	nbus_blink_LED(50);
 	nbus_blink_LED(50);
-	//nBus.interface->stop();
 
 
 	while(1){
 	while(1){
 		if(nBus.uart_state == UART_RECEIVED){
 		if(nBus.uart_state == UART_RECEIVED){
@@ -249,6 +248,12 @@ void nbus_stack(void){
 			receive_slave_response();
 			receive_slave_response();
 #endif
 #endif
 		}
 		}
+
+		if (nBus.hw_platform->loop_callback != NULL) {
+			if (nBus.hw_platform->loop_callback() == 1){
+				nBus.interface->read();
+			}
+		}
 	}
 	}
 
 
 }
 }

+ 0 - 2
Src/nbus_slave_broadcast.c

@@ -22,7 +22,6 @@ void nbus_slave_broadcast(nBus_TypeDef *nbus, nBusCommandType_t request_type){
 		{
 		{
 			nbus->measure_active = MEASURE_RUNNING;
 			nbus->measure_active = MEASURE_RUNNING;
 			nbus->interface->start();
 			nbus->interface->start();
-			//HAL_GPIO_WritePin(nbus->periph->led->port, nbus->periph->led->pin, GPIO_PIN_SET);
 			nbus->hw_platform->led_on();
 			nbus->hw_platform->led_on();
 		}
 		}
 		break;
 		break;
@@ -31,7 +30,6 @@ void nbus_slave_broadcast(nBus_TypeDef *nbus, nBusCommandType_t request_type){
 		{
 		{
 			nbus->measure_active = MEASURE_STOPPED;
 			nbus->measure_active = MEASURE_STOPPED;
 			nbus->interface->stop();
 			nbus->interface->stop();
-			//HAL_GPIO_WritePin(nbus->periph->led->port, nbus->periph->led->pin, GPIO_PIN_RESET);
 			nbus->hw_platform->led_off();
 			nbus->hw_platform->led_off();
 		}
 		}
 		break;
 		break;

+ 2 - 0
Src/nbus_slave_module_unicast.c

@@ -91,8 +91,10 @@ void nbus_slave_unicastToModuleGet(nBus_TypeDef *nbus){
 			nbus->tx_length += 3;
 			nbus->tx_length += 3;
 			break;
 			break;
 		case INFO_MODULE_MEMORY_ID:
 		case INFO_MODULE_MEMORY_ID:
+			{
 			uint8_t n = nbus->memoryInterface->getId(&nbus->tx_buffer[4]);
 			uint8_t n = nbus->memoryInterface->getId(&nbus->tx_buffer[4]);
 			nbus->tx_length += n;
 			nbus->tx_length += n;
+			}
 		}
 		}
 	}
 	}
 	break;
 	break;