diff --git a/src/knx/platform.cpp b/src/knx/platform.cpp index 53eeaa9..eaf18bb 100644 --- a/src/knx/platform.cpp +++ b/src/knx/platform.cpp @@ -35,6 +35,4 @@ Platform::Platform() _memoryReference = (uint8_t*)malloc(1); free(_memoryReference); _memoryReference -= 1024; - print("MemRef: "); - println((long unsigned int)_memoryReference, HEX); } diff --git a/src/knx/tpuart_data_link_layer.cpp b/src/knx/tpuart_data_link_layer.cpp index 0715163..9804701 100644 --- a/src/knx/tpuart_data_link_layer.cpp +++ b/src/knx/tpuart_data_link_layer.cpp @@ -82,6 +82,7 @@ #define BYTE_TIMEOUT 3 //milli seconds #define CONFIRM_TIMEOUT 500 //milli seconds +#define RESET_TIMEOUT 100 //milli seconds void TpUartDataLinkLayer::loop() { @@ -369,15 +370,18 @@ bool TpUartDataLinkLayer::sendFrame(CemiFrame& frame) return true; } -void TpUartDataLinkLayer::resetChip() +bool TpUartDataLinkLayer::resetChip() { uint8_t cmd = U_RESET_REQ; _platform.writeUart(cmd); + _waitConfirmStartTime = _platform.millis(); while (true) { int resp = _platform.readUart(); if (resp == U_RESET_IND) - break; + return true; + else if (_platform.millis() - _waitConfirmStartTime > RESET_TIMEOUT) + return false; } } @@ -421,10 +425,16 @@ void TpUartDataLinkLayer::enabled(bool value) if (value && !_enabled) { _platform.setupUart(); - print("ownaddr "); - println(_deviceObject.induvidualAddress(), HEX); - resetChip(); - _enabled = true; + + if (resetChip()){ + _enabled = true; + print("ownaddr "); + println(_deviceObject.induvidualAddress(), HEX); + } + else{ + _enabled = false; + println("ERROR, TPUART not responding"); + } return; } diff --git a/src/knx/tpuart_data_link_layer.h b/src/knx/tpuart_data_link_layer.h index 6c080e5..39efd9c 100644 --- a/src/knx/tpuart_data_link_layer.h +++ b/src/knx/tpuart_data_link_layer.h @@ -56,6 +56,6 @@ class TpUartDataLinkLayer : public DataLinkLayer bool sendFrame(CemiFrame& frame); void frameBytesReceived(uint8_t* buffer, uint16_t length); void dataConBytesReceived(uint8_t* buffer, uint16_t length, bool success); - void resetChip(); + bool resetChip(); void stopChip(); };