|
@@ -185,44 +185,58 @@ void NbusBridge::process_broadcast(uint8_t *rxFrame)
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-/**
|
|
|
|
|
- * Pripraví informáciu o všetkcýh nBus slave moduloch
|
|
|
|
|
- */
|
|
|
|
|
-DataFrame *NbusBridge::getSlavesInfo()
|
|
|
|
|
-{
|
|
|
|
|
- return _communicator->formatSlaveInfo(_slave_adress, _num_slaves);
|
|
|
|
|
- ;
|
|
|
|
|
-}
|
|
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
- * Implementácia rozhrania nBus.
|
|
|
|
|
|
|
+ * Spracovanie requestu pre bridge.
|
|
|
|
|
+ * Implementované funkcie:
|
|
|
|
|
+ * - FC_SLAVES
|
|
|
|
|
+ * - FC_INFO
|
|
|
|
|
+ * - FC_ECHO
|
|
|
*/
|
|
*/
|
|
|
-void NbusBridge::processRequest(uint8_t *rxFrame, uint8_t size)
|
|
|
|
|
|
|
+void NbusBridge::process_bridge_request(uint8_t *rxFrame, uint8_t size)
|
|
|
{
|
|
{
|
|
|
- if (MODULE_ADDRESS(rxFrame) == 0)
|
|
|
|
|
|
|
+ switch (FUNCTION_CODE(rxFrame))
|
|
|
{
|
|
{
|
|
|
- process_broadcast(rxFrame);
|
|
|
|
|
- return;
|
|
|
|
|
- }
|
|
|
|
|
|
|
|
|
|
- uint8_t send_reponse = 1;
|
|
|
|
|
- NbusSlave *selected_slave = getSlave(MODULE_ADDRESS(rxFrame));
|
|
|
|
|
- if (selected_slave == NULL)
|
|
|
|
|
- {
|
|
|
|
|
- return;
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ case FC_ECHO: /* 1 */
|
|
|
|
|
+ _frame_nbus_internal = _communicator->formatPacket(rxFrame, size);
|
|
|
|
|
+ break;
|
|
|
|
|
|
|
|
- if (!selected_slave->isActive())
|
|
|
|
|
- {
|
|
|
|
|
- return;
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ case FC_INFO: /* 0xE => 15 */
|
|
|
|
|
+ /*
|
|
|
|
|
+ * verzia
|
|
|
|
|
+ * HW
|
|
|
|
|
+ * HW.verzia
|
|
|
|
|
+ */
|
|
|
|
|
+ _frame_nbus_internal->Init();
|
|
|
|
|
+ _frame_nbus_internal->AddArray((uint8_t*)BRIDGE_INFO_VERSION, 3);
|
|
|
|
|
+ _frame_nbus_internal->AddArray((uint8_t*)BRIDGE_INFO_HW_FAMILY, 3);
|
|
|
|
|
+ _frame_nbus_internal->AddArray((uint8_t*)BRIDGE_INFO_HW_VERSION, 3);
|
|
|
|
|
+ _frame_nbus_internal->Commit();
|
|
|
|
|
+ break;
|
|
|
|
|
|
|
|
- uint8_t crcC = crc8x_fast(rxFrame, size - 1);
|
|
|
|
|
|
|
+ case FC_SLAVES: /* 0x10 => 16 */
|
|
|
|
|
+ _frame_nbus_internal = getSlavesInfo();
|
|
|
|
|
+ break;
|
|
|
|
|
|
|
|
- if (crcC != rxFrame[size - 1])
|
|
|
|
|
- {
|
|
|
|
|
- return;
|
|
|
|
|
|
|
+ default:; // nothing
|
|
|
}
|
|
}
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+void NbusBridge::process_slave_request(uint8_t *rxFrame, uint8_t size)
|
|
|
|
|
+{
|
|
|
|
|
+ uint8_t send_reponse = 1;
|
|
|
|
|
+
|
|
|
|
|
+ NbusSlave * selected_slave = getSlave(MODULE_ADDRESS(rxFrame));
|
|
|
|
|
+ if (selected_slave == NULL)
|
|
|
|
|
+ {
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (!selected_slave->isActive())
|
|
|
|
|
+ {
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
switch (FUNCTION_CODE(rxFrame))
|
|
switch (FUNCTION_CODE(rxFrame))
|
|
|
{
|
|
{
|
|
@@ -284,9 +298,6 @@ void NbusBridge::processRequest(uint8_t *rxFrame, uint8_t size)
|
|
|
_frame_nbus_internal = selected_slave->nbus_sensor_format(SENSOR_ADDRESS(rxFrame));
|
|
_frame_nbus_internal = selected_slave->nbus_sensor_format(SENSOR_ADDRESS(rxFrame));
|
|
|
break;
|
|
break;
|
|
|
|
|
|
|
|
- case FC_SLAVES: /* 0x10 => 16 */
|
|
|
|
|
- _frame_nbus_internal = getSlaves();
|
|
|
|
|
- break;
|
|
|
|
|
default:
|
|
default:
|
|
|
send_reponse = 0;
|
|
send_reponse = 0;
|
|
|
}
|
|
}
|
|
@@ -297,6 +308,41 @@ void NbusBridge::processRequest(uint8_t *rxFrame, uint8_t size)
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+/**
|
|
|
|
|
+ * Pripraví informáciu o všetkcýh nBus slave moduloch
|
|
|
|
|
+ */
|
|
|
|
|
+DataFrame *NbusBridge::getSlavesInfo()
|
|
|
|
|
+{
|
|
|
|
|
+ return _communicator->formatSlaveInfo(_slave_adress, _num_slaves);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * Implementácia rozhrania nBus.
|
|
|
|
|
+ */
|
|
|
|
|
+void NbusBridge::processRequest(uint8_t *rxFrame, uint8_t size)
|
|
|
|
|
+{
|
|
|
|
|
+ uint8_t crcC = crc8x_fast(rxFrame, size - 1);
|
|
|
|
|
+
|
|
|
|
|
+ if (crcC != rxFrame[size - 1])
|
|
|
|
|
+ {
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (MODULE_ADDRESS(rxFrame) == BROADCAST_ADDRESS)
|
|
|
|
|
+ {
|
|
|
|
|
+ if (SENSOR_ADDRESS(rxFrame) == BRIDGE_ADDRESS) {
|
|
|
|
|
+ process_bridge_request(rxFrame, size);
|
|
|
|
|
+ sendResponseToMaster(_frame_nbus_internal);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ process_broadcast(rxFrame);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ } else {
|
|
|
|
|
+ process_slave_request(rxFrame, size);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* Implementácia stavu STATE_RUNNING.
|
|
* Implementácia stavu STATE_RUNNING.
|
|
|
* V tomto stave je spustené automatické odčítanie údajov zo všetkých slave/všetkých senzorov.
|
|
* V tomto stave je spustené automatické odčítanie údajov zo všetkých slave/všetkých senzorov.
|