Răsfoiți Sursa

format only

Juraj Ďuďák 1 lună în urmă
părinte
comite
5ce191d319
3 a modificat fișierele cu 15 adăugiri și 3 ștergeri
  1. 2 0
      Core/Inc/NbusCommunicator.h
  2. 9 1
      Core/Src/NbusBridge.cpp
  3. 4 2
      Core/Src/NbusCommunicator.cpp

+ 2 - 0
Core/Inc/NbusCommunicator.h

@@ -19,6 +19,8 @@
 
 #define NBUS_MAX_FRAME_SIZE 64
 
+#define UART_NBUS_RX_TIMEOUT	5
+
 /* DEFINES END */
 
 class NbusCommunicator {

+ 9 - 1
Core/Src/NbusBridge.cpp

@@ -1,4 +1,4 @@
-/*
+/**
  * @file NbusBridge.cpp
  * @brief Implemetnácia modulu nBus Brige
  * @date Mar 7, 2025
@@ -65,6 +65,11 @@ NbusBridge::~NbusBridge() {
 }
 
 
+/**
+ * Spustí scan internej nbus siete.
+ * Posiela requesty pre celý adresný priestor ako ECHO paket.
+ * Výsledok je uložený interne. K jednotlivým slave-om sa dá dostať cez metódu getSlave(index), kde 0<=index<num_slaves
+ */
 void NbusBridge::scan(){
 	_num_slaves = 0;
 
@@ -160,6 +165,9 @@ void NbusBridge::process_broadcast(uint8_t *rxFrame){
 }
 
 
+/**
+ * Implementácia rozhrania nBus.
+ */
 void NbusBridge::processRequest(uint8_t *rxFrame, uint8_t size){
 	if (MODULE_ADDRESS(rxFrame) == 0){
 		process_broadcast(rxFrame);

+ 4 - 2
Core/Src/NbusCommunicator.cpp

@@ -1,4 +1,4 @@
-/*
+/**
  * @file NbusCommunicator.cpp
  * @brief Implemetnácia komunikačnej vrstvy: 1) internej 2) externej
  * @date Mar 7, 2025
@@ -54,7 +54,7 @@ void NbusCommunicator::_receive(){
 	memset(_data_packet_comm, 0, NBUS_MAX_FRAME_SIZE);
 	// komunikacia v DMA musi byt spracovana aj tak ako blokujuca
 	// takto je tu menej rezie. Timeout je 2ms
-	HAL_StatusTypeDef status = HAL_UARTEx_ReceiveToIdle(_uart_nbus, _data_packet_comm, NBUS_MAX_FRAME_SIZE, &received_size, 2);
+	HAL_StatusTypeDef status = HAL_UARTEx_ReceiveToIdle(_uart_nbus, _data_packet_comm, NBUS_MAX_FRAME_SIZE, &received_size, UART_NBUS_RX_TIMEOUT);
 
 	_packet_rx->Init();
 
@@ -86,6 +86,7 @@ void NbusCommunicator::send(Nbus_pdu *pdu, uint8_t *data, uint8_t data_len){
 	for(int i = 0 ; i< data_len ; i++){
 		_packet_tx->AddInt8(data[i]);
 	}
+
 	int length = _packet_tx->Commit();
 
 	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_SET);
@@ -100,6 +101,7 @@ void NbusCommunicator::sendToMaster(DataFrame *master_frame){
 		__NOP(); // cakanie na ukoncenie prebiehajuceho odosielania
 				// tu to moze byt vcelku tesno odoslany dalsi paket. je tam pauza o dlzke 1.2bit
 	}
+
 	HAL_UART_Transmit_DMA(_uart_master, master_frame->GetFrame(), master_frame->GetLength());
 }