Quellcode durchsuchen

Several Bug fixes 2.

xnecas vor 2 Wochen
Ursprung
Commit
4c98134603
3 geänderte Dateien mit 31 neuen und 14 gelöschten Zeilen
  1. 1 1
      include/NbusBridge.h
  2. 2 2
      include/nbus_config.h
  3. 28 11
      src/NbusBridge.cpp

+ 1 - 1
include/NbusBridge.h

@@ -135,7 +135,7 @@ private:
 	/** Add whole payload for bridge data packet. 
 	 * @param data_frame: dataframe to work with (in-out param)
 	*/
-	void _addDataPayload(DataFrame * data_frame);
+	uint8_t _addDataPayload(DataFrame * data_frame);
 
 	NbusCommunicator *_communicator{nullptr};													///< nBus HW communicator
 	NbusSlave _slaves[NBUS_BRIDGE_MAX_SLAVES];                                                  ///< array of nBus slaves

+ 2 - 2
include/nbus_config.h

@@ -35,7 +35,7 @@
 /** @brief Macro for frame size of nBus Communicator. */
 #define NBUS_COMM_MAX_FRAME_SIZE		64
 /** @brief Macro for receive timeout in ms. */
-#define NBUS_COMM_UART_RX_TIMEOUT  		 5
+#define NBUS_COMM_UART_RX_TIMEOUT  		5
 /** @brief Macro for transfer timeout in ms. */
 #define NBUS_COMM_UART_TX_TIMEOUT 		10
 
@@ -74,7 +74,7 @@
 /** @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
+#define NBUS_BRIDGE_HEADER_SEQ			0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF, 0xDD, 0xCC, 0xBB, 0xAA
 
 /* END NBUS BRIDGE DEFINES */
 

+ 28 - 11
src/NbusBridge.cpp

@@ -118,6 +118,11 @@ void NbusBridge::processRunningState()
 
     _worker_frame_ptr = _makeBridgeDataPacket();
 
+    if (_worker_frame_ptr == nullptr)
+    {
+        return;
+    }
+
     if (_run_state == STATE_RUNNING)
     {
         _communicator->sendToMaster(_worker_frame_ptr);
@@ -190,13 +195,14 @@ void NbusBridge::_processBridgeRequest(uint8_t *rx_frame, uint8_t size)
 void NbusBridge::_processSlaveRequest(uint8_t *rx_frame, uint8_t size)
 {
     uint8_t module_address = NBUS_RX_MODULE_ADDRESS(rx_frame);
-    bool valid_slave = true;
+    bool valid_slave = false;
 
     for (uint32_t i = 0; i < _num_slaves; i++)
     {
     	if (module_address == _slaves[i].getModuleAddress())
     	{
-    		valid_slave = false;
+    		valid_slave = true;
+            break;
     	}
     }
 
@@ -207,7 +213,7 @@ void NbusBridge::_processSlaveRequest(uint8_t *rx_frame, uint8_t size)
     }
     else
     {
-    	_worker_frame_ptr = _rspSetError(ILLEGAL_DEVICE_ADDRESS);
+        _worker_frame_ptr = _rspSetError(ILLEGAL_DEVICE_ADDRESS);
     }
 
     _communicator->sendToMaster(_worker_frame_ptr);
@@ -336,9 +342,13 @@ DataFrame* NbusBridge::_makeBridgeDataPacket()
 
 	_bridge_cast_frame.Init();
 	_bridge_cast_frame.AddArray(_bridge_cast_header, NBUS_BRIDGE_HEADER_SIZE);		// add header
-	_addDataPayload(&_bridge_cast_frame);
-	_bridge_cast_frame.AddUint8(_crc8x_fast(_bridge_cast_frame.GetFrame() + NBUS_BRIDGE_HEADER_SIZE, _bridge_cast_frame.GetLength() - NBUS_BRIDGE_HEADER_SIZE)); // add crc8
+	
+    if (_addDataPayload(&_bridge_cast_frame) == 0)
+    {
+        return nullptr;
+    }
 
+    _bridge_cast_frame.AddUint8(_crc8x_fast(_bridge_cast_frame.GetFrame() + NBUS_BRIDGE_HEADER_SIZE, _bridge_cast_frame.GetLength() - NBUS_BRIDGE_HEADER_SIZE)); // add crc8
 	return &_bridge_cast_frame;
 }
 
@@ -352,21 +362,28 @@ DataFrame* NbusBridge::_forwardPacket(uint8_t *data, uint8_t size)
 	return &_raw_data_frame;
 }
 
-void NbusBridge::_addDataPayload(DataFrame * data_frame)
+uint8_t NbusBridge::_addDataPayload(DataFrame * data_frame)
 {
 	data_frame->AddUint32(_communicator->getTime());
 
+    uint8_t non_empty_slaves = 0;
+
 	for (uint32_t i = 0; i < _num_slaves; i++)
 	{
-		data_frame->AddUint8(_slaves[i].getModuleAddress());
-		_worker_frame_ptr = _slaves[i].cmdGetData();
-
 		// check error state
 		if (_worker_frame_ptr->GetLength() < (NBUS_RX_META_SIZE + 1) || NBUS_CHECK_ERR_RESPONSE(_worker_frame_ptr->GetFrame() + 1))
 		{
-			continue;
+            continue;
 		}
 
-		data_frame->AddArray(&NBUS_RX_DATA0(_worker_frame_ptr->GetFrame() + 1), _worker_frame_ptr->GetLength() - (NBUS_RX_META_SIZE + 1)); // add without length byte
+        // add MA
+        data_frame->AddUint8(_slaves[i].getModuleAddress());
+		_worker_frame_ptr = _slaves[i].cmdGetData();
+
+		// add data
+        data_frame->AddArray(&NBUS_RX_DATA0(_worker_frame_ptr->GetFrame() + 1), _worker_frame_ptr->GetLength() - (NBUS_RX_META_SIZE + 1)); // add without length byte
+        non_empty_slaves++;
 	}
+
+   return non_empty_slaves;
 }