|
|
@@ -105,13 +105,6 @@ void NbusBridge::processRequest(uint8_t *rxFrame, uint8_t size)
|
|
|
|
|
|
void NbusBridge::processRunningState()
|
|
|
{
|
|
|
-
|
|
|
- if (_scan_request == 1)
|
|
|
- {
|
|
|
- _scan_request = 0;
|
|
|
- this->scanNetwork();
|
|
|
- }
|
|
|
-
|
|
|
if (_run_state == STATE_STOPPED)
|
|
|
{
|
|
|
return;
|
|
|
@@ -126,7 +119,7 @@ void NbusBridge::processRunningState()
|
|
|
|
|
|
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_SET);
|
|
|
|
|
|
- _worker_frame_ptr = _cmdGetData();
|
|
|
+ _worker_frame_ptr = _makeBridgeDataPacket();
|
|
|
|
|
|
// TODO problem: v stavi RUNNING pride STOP prikaz, ale ten sa nespracuje, pretoze bezi obsluha tejto funkcie.
|
|
|
if (_run_state == STATE_RUNNING)
|
|
|
@@ -178,14 +171,16 @@ void NbusBridge::_processBridgeRequest(uint8_t *rx_frame, uint8_t size)
|
|
|
|
|
|
case NBUS_SET_CMD(FC_STOP): /* SET 2 */
|
|
|
_cmdSetStop();
|
|
|
+ _worker_frame_ptr = nullptr;
|
|
|
break;
|
|
|
|
|
|
case NBUS_SET_CMD(FC_START): /* SET 3 */
|
|
|
_cmdSetStart();
|
|
|
+ _worker_frame_ptr = nullptr;
|
|
|
break;
|
|
|
|
|
|
case NBUS_SET_CMD(FC_RESET): /* SET 9 */
|
|
|
- _scan_request = 1;
|
|
|
+ scanNetwork();
|
|
|
_worker_frame_ptr = _rspSetStatus(STATUS_SUCCESS);
|
|
|
break;
|
|
|
|
|
|
@@ -230,27 +225,14 @@ void NbusBridge::_processSlaveRequest(uint8_t *rx_frame, uint8_t size)
|
|
|
|
|
|
DataFrame* NbusBridge::_cmdGetData()
|
|
|
{
|
|
|
- NbusSlave * slave_ptr = nullptr;
|
|
|
-
|
|
|
- _bridge_cast_frame.Init();
|
|
|
- _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++)
|
|
|
- {
|
|
|
- slave_ptr = _getSlave(_slave_adress[i]);
|
|
|
- if (slave_ptr != nullptr)
|
|
|
- {
|
|
|
- _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.AddUint8(_crc8x_fast(_bridge_cast_frame.GetFrame(), _bridge_cast_frame.GetLength())); // add crc8
|
|
|
+ _default_frame.Init();
|
|
|
+ _default_frame.AddUint8(NBUS_BROADCAST_ADDRESS);
|
|
|
+ _default_frame.AddUint8(NBUS_BRIDGE_ADDRESS);
|
|
|
+ _default_frame.AddUint8((Nbus_FC_e)FC_DATA);
|
|
|
+ _addDataPayload(&_default_frame);
|
|
|
+ _default_frame.Commit();
|
|
|
|
|
|
- return &_bridge_cast_frame;
|
|
|
+ return &_default_frame;
|
|
|
}
|
|
|
|
|
|
DataFrame * NbusBridge::_cmdGetInfo()
|
|
|
@@ -372,6 +354,18 @@ DataFrame* NbusBridge::_makePacket(Nbus_PDU_t pdu, uint8_t *data, uint8_t size)
|
|
|
return &_default_frame;
|
|
|
}
|
|
|
|
|
|
+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
|
|
|
+
|
|
|
+ return &_bridge_cast_frame;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
DataFrame* NbusBridge::_forwardPacket(uint8_t *data, uint8_t size)
|
|
|
{
|
|
|
_raw_data_frame.Init();
|
|
|
@@ -380,3 +374,29 @@ DataFrame* NbusBridge::_forwardPacket(uint8_t *data, uint8_t size)
|
|
|
|
|
|
return &_raw_data_frame;
|
|
|
}
|
|
|
+
|
|
|
+void NbusBridge::_addDataPayload(DataFrame * data_frame)
|
|
|
+{
|
|
|
+ NbusSlave *slave_ptr = nullptr;
|
|
|
+
|
|
|
+ data_frame->AddUint32(HAL_GetTick());
|
|
|
+
|
|
|
+ for (uint32_t i = 0; i < _num_slaves; i++)
|
|
|
+ {
|
|
|
+ slave_ptr = _getSlave(_slave_adress[i]);
|
|
|
+
|
|
|
+ if (slave_ptr != nullptr)
|
|
|
+ {
|
|
|
+ data_frame->AddUint8(slave_ptr->getModuleAddress());
|
|
|
+ _worker_frame_ptr = slave_ptr->cmdGetData();
|
|
|
+
|
|
|
+ // check error state
|
|
|
+ if (_worker_frame_ptr->GetLength() < (NBUS_RX_META_SIZE + 1) || NBUS_CHECK_ERR_RESPONSE(_worker_frame_ptr->GetFrame() + 1))
|
|
|
+ {
|
|
|
+ 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
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|