Browse Source

Changed header to 10B and updated CMD Slaves

xnecas 1 week ago
parent
commit
30de4ba588

+ 1 - 0
Core/Inc/NbusBridge.h

@@ -140,6 +140,7 @@ private:
 	DataFrame _raw_data_frame{_data_packet, NBUS_BRIDGE_DATAPACKET_SIZE, TYPE_RAW, CRC_OFF};    ///< raw data frame for copying
 	uint8_t _scan_request{0};																	///< flag if scan request is necessary
 	Nbus_PDU_t _pdu{NBUS_BROADCAST_ADDRESS, NBUS_BROADCAST_ADDRESS, FC_ECHO};                   ///< nBus actual PDU
+	uint8_t _bridge_cast_header[NBUS_BRIDGE_HEADER_SIZE]{NBUS_BRIDGE_HEADER_SEQ};               ///< data header for bridge-cast
 };
 
 #endif /* SRC_NBUSBRIDGE_H_ */

+ 3 - 3
Core/Inc/NbusSlave.h

@@ -54,9 +54,9 @@ public:
 
 	/** Send nBus request and get sensor count.
 	 * @param check_hw: 1 = load from bus, 0 = use local cache
-	 * @return: response data frame
+	 * @return: number of sensors / actuators
 	 */
-	uint8_t cmdGetSensorCnt(bool check_hw);
+	Nbus_SensorCnt_t cmdGetSensorCnt(bool check_hw);
 
 private:
 	/** Make nBus packet for selected function code.
@@ -66,7 +66,7 @@ private:
 	DataFrame* _makePacket(Nbus_FC_e fc);
 
 	NbusCommunicator* _communicator{nullptr};											///< hardware bus communicator
-	uint8_t _sensor_count{0};															///< number of sensors
+	Nbus_SensorCnt_t _sensor_count{0, 0};												///< number of sensors / actuators
 	Nbus_PDU_t _pdu{0, 0, FC_ECHO}; 													///< slave PDU
 	uint8_t _slave_cache[NBUS_SLAVE_CACHE_SIZE]{0};									    ///< slave temporary data
 	DataFrame _cache_frame{_slave_cache, NBUS_SLAVE_CACHE_SIZE, TYPE_PLAIN, CRC_ON};    ///< data frame of _slave_cache

+ 4 - 4
Core/Inc/nbus_config.h

@@ -52,10 +52,6 @@
 #define NBUS_BRIDGE_ECHO_SCAN_BYTE1		 (uint8_t)'B'
 #define NBUS_BRIDGE_ECHO_SCAN_BYTE2		 (uint8_t)'u'
 #define NBUS_BRIDGE_ECHO_SCAN_BYTE3		 (uint8_t)'s'
-/** @brief Macro for 0th byte of data footer in bridge-cast. */
-#define NBUS_BRIDGE_FOOTER_BYTE0	  	 0xFF
-/** @brief Macro for 1st byte of data footer in bridge-cast. */
-#define NBUS_BRIDGE_FOOTER_BYTE1	     0xFF
 /** @brief Macro for nBus Bridge running state delay. **/
 #define NBUS_BRIDGE_RUNNING_STATE_DELAY  50
 /** @brief Macro for nBus Bridge info version. **/
@@ -66,6 +62,10 @@
 #define NBUS_BRIDGE_INFO_HW_VERSION		"0.5"
 /** @brief Macro for nBus Bridge data packet size. **/
 #define NBUS_BRIDGE_DATAPACKET_SIZE  (NBUS_COMM_MAX_FRAME_SIZE*NBUS_BRIDGE_MAX_SLAVES)
+/** @brief Macro for header size in bridge-cast. **/
+#define NBUS_BRIDGE_HEADER_SIZE		    10
+/** @brief Macro for header byte in bridge-cast. **/
+#define NBUS_BRIDGE_HEADER_SEQ			0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00
 
 /* END NBUS BRIDGE DEFINES */
 

+ 8 - 0
Core/Inc/nbus_defines.h

@@ -93,6 +93,14 @@ typedef struct {
 } Nbus_PDU_t;
 
 
+/** @brief Structure for sensor count. */
+typedef struct
+{
+    uint8_t read_only_count;
+    uint8_t read_write_count;
+} Nbus_SensorCnt_t;
+
+
 /** @brief Enumerate for error codes.  */
 typedef enum {
 	OK_CODE                	=	0x00,

+ 9 - 10
Core/Src/NbusBridge.cpp

@@ -233,8 +233,8 @@ DataFrame* NbusBridge::_cmdGetData()
 	NbusSlave * slave_ptr = nullptr;
 
 	_bridge_cast_frame.Init();
-	_bridge_cast_frame.AddHeader(TYPE_HEADER_2B);
-	_bridge_cast_frame.AddInt32(HAL_GetTick());
+	_bridge_cast_frame.AddArray(_bridge_cast_header, NBUS_BRIDGE_HEADER_SIZE);		// add header
+	_bridge_cast_frame.AddUint32(HAL_GetTick());
 
 
 	for (uint32_t i = 0; i < _num_slaves; i++)
@@ -242,15 +242,13 @@ DataFrame* NbusBridge::_cmdGetData()
 		slave_ptr = _getSlave(_slave_adress[i]);
 		if (slave_ptr != nullptr)
 		{
-			_bridge_cast_frame.AddInt8(slave_ptr->getModuleAddress());
+			_bridge_cast_frame.AddUint8(slave_ptr->getModuleAddress());
 			_worker_frame_ptr = slave_ptr->cmdGetData();
 			_bridge_cast_frame.AddArray(&NBUS_RX_DATA0(_worker_frame_ptr->GetFrame() + 1), _worker_frame_ptr->GetLength() - (NBUS_RX_META_SIZE + 1)); // add without length byte
 		}
 	}
 
-	_bridge_cast_frame.AddInt8(NBUS_BRIDGE_FOOTER_BYTE0);
-	_bridge_cast_frame.AddInt8(NBUS_BRIDGE_FOOTER_BYTE1);
-	_bridge_cast_frame.Commit();
+	_bridge_cast_frame.AddUint8(_crc8x_fast(_bridge_cast_frame.GetFrame(), _bridge_cast_frame.GetLength())); // add crc8
 
 	return &_bridge_cast_frame;
 }
@@ -302,9 +300,8 @@ DataFrame* NbusBridge::_cmdGetSlaves()
 	_default_frame.AddUint8(NBUS_BROADCAST_ADDRESS);
 	_default_frame.AddUint8(NBUS_BRIDGE_ADDRESS);
 	_default_frame.AddUint8(FC_SLAVES);
-	_default_frame.AddUint8(_num_slaves);
-
 
+	Nbus_SensorCnt_t sensor_cnt{0, 0};
 
 	for (uint8_t i = 0; i < _num_slaves; i++)
     {
@@ -312,8 +309,11 @@ DataFrame* NbusBridge::_cmdGetSlaves()
 
 		if (slave_ptr != nullptr)
 		{
+			sensor_cnt = slave_ptr->cmdGetSensorCnt(false);
+
 			_default_frame.AddUint8(slave_ptr->getModuleAddress());
-			_default_frame.AddUint8(slave_ptr->cmdGetSensorCnt(false));
+			_default_frame.AddUint8(sensor_cnt.read_only_count);
+			_default_frame.AddUint8(sensor_cnt.read_write_count);
 		}
     }
 
@@ -377,7 +377,6 @@ DataFrame* NbusBridge::_forwardPacket(uint8_t *data, uint8_t size)
 	_raw_data_frame.Init();
 	_raw_data_frame.AddUint8(size);
 	_raw_data_frame.AddArray(data, size);
-	_raw_data_frame.Commit();
 
 	return &_raw_data_frame;
 }

+ 5 - 3
Core/Src/NbusSlave.cpp

@@ -42,17 +42,19 @@ DataFrame *NbusSlave::cmdGetFormat()
 	return _communicator->sendAndReceiveSlave(_makePacket(FC_SENSOR_FORMAT));
 }
 
-uint8_t NbusSlave::cmdGetSensorCnt(bool check_hw)
+Nbus_SensorCnt_t NbusSlave::cmdGetSensorCnt(bool check_hw)
 {
-    if (_sensor_count == 0 || check_hw == true)
+    if (check_hw == true)
     {
 		DataFrame *df = _communicator->sendAndReceiveSlave(_makePacket(FC_SENSOR_CNT));
-		_sensor_count = NBUS_RX_DATA0(df->GetFrame() + 1);
+		_sensor_count.read_only_count = NBUS_RX_DATA0(df->GetFrame()  + 1); 	// without length byte
+		_sensor_count.read_write_count = NBUS_RX_DATA0(df->GetFrame() + 2);
     }
 
     return _sensor_count;
 }
 
+
 DataFrame* NbusSlave::_makePacket(Nbus_FC_e fc)
 {
 	_cache_frame.Init();