diff --git a/MQTTSNGateway/src/MQTTSNGWClientRecvTask.cpp b/MQTTSNGateway/src/MQTTSNGWClientRecvTask.cpp index ccf6192..46100fa 100644 --- a/MQTTSNGateway/src/MQTTSNGWClientRecvTask.cpp +++ b/MQTTSNGateway/src/MQTTSNGWClientRecvTask.cpp @@ -45,10 +45,7 @@ ClientRecvTask::~ClientRecvTask() */ void ClientRecvTask::initialize(int argc, char** argv) { - if (_sensorNetwork->initialize() < 0) - { - throw EXCEPTION(" Can't open the sensor network.\n", 0); - } + _sensorNetwork->initialize(); } /* diff --git a/MQTTSNGateway/src/MQTTSNGWProcess.cpp b/MQTTSNGateway/src/MQTTSNGWProcess.cpp index 7cded4b..55bc475 100644 --- a/MQTTSNGateway/src/MQTTSNGWProcess.cpp +++ b/MQTTSNGateway/src/MQTTSNGWProcess.cpp @@ -336,19 +336,19 @@ int MultiTaskProcess::getParam(const char* parameter, char* value) /*===================================== Class Exception ======================================*/ -Exception::Exception(const char* message, const int exNo) +Exception::Exception(const char* message, const int errNo) { _message = message; - _exNo = exNo; + _errNo = errNo; _fileName = nullptr; _functionName = nullptr; _line = 0; } -Exception::Exception(const char* message, const int exNo, const char* file, +Exception::Exception(const char* message, const int errNo, const char* file, const char* function, const int line) { _message = message; - _exNo = exNo; + _errNo = errNo; _fileName = getFileName(file);; _functionName = function; _line = line; @@ -379,36 +379,35 @@ const int Exception::getLineNo() return _line; } -const int Exception::getExceptionNo() +const int Exception::getErrNo() { - return _exNo; + return _errNo; } void Exception::writeMessage() { if (_fileName == nullptr) { - if (_exNo == 0) + if (_errNo == 0) { - WRITELOG("%s %s\n", currentDateTime(), _message); + WRITELOG("%s%s %s%s\n", currentDateTime(), RED_HDR, _message, CLR_HDR); } else { - - WRITELOG("%s %s ExNo: %d\n", currentDateTime(), _message, _exNo); + WRITELOG("%s%s %s.\n errno=%d : %s%s\n", currentDateTime(), RED_HDR,_message, _errNo, strerror(_errNo), CLR_HDR); } } else { - if (_exNo == 0) + if (_errNo == 0) { - WRITELOG("%s %s line %-4d %s() : %s\n", - currentDateTime(), _fileName, _line, _functionName, _message); + WRITELOG("%s%s %s. %s line %-4d %s()%s\n", + currentDateTime(), RED_HDR, _message, _fileName, _line, _functionName, CLR_HDR); } else { - WRITELOG("%s %s line %-4d %s() : %s ExNo: %d\n", - currentDateTime(), _fileName, _line, _functionName, _message, _exNo); + WRITELOG("%s%s %s. %s line %-4d %s()\n errno=%d : %s%s\n", + currentDateTime(), RED_HDR, _message, _fileName, _line, _functionName, _errNo, strerror(_errNo), CLR_HDR); } } } diff --git a/MQTTSNGateway/src/MQTTSNGWProcess.h b/MQTTSNGateway/src/MQTTSNGWProcess.h index be69da8..7827d59 100644 --- a/MQTTSNGateway/src/MQTTSNGWProcess.h +++ b/MQTTSNGateway/src/MQTTSNGWProcess.h @@ -103,19 +103,19 @@ private: class Exception: public exception { public: - Exception(const char* message, const int exNo); - Exception(const char* message, const int exNo, const char* file, const char* func, int line); + Exception(const char* message, const int errNo); + Exception(const char* message, const int errNo, const char* file, const char* func, int line); virtual ~Exception() throw (); const char* getFileName(); const char* getFunctionName(); const int getLineNo(); - const int getExceptionNo(); + const int getErrNo(); virtual const char* what() const throw (); void writeMessage(); private: const char* getFileName(const char* file); - int _exNo; + int _errNo; const char* _message; const char* _fileName; const char* _functionName; diff --git a/MQTTSNGateway/src/linux/Threading.h b/MQTTSNGateway/src/linux/Threading.h index 7969fdd..7a8f985 100644 --- a/MQTTSNGateway/src/linux/Threading.h +++ b/MQTTSNGateway/src/linux/Threading.h @@ -31,6 +31,9 @@ namespace MQTTSNGW #define MQTTSNGW_RB_MUTEX_KEY "rbmutex.key" #define MQTTSNGW_RB_SEMAPHOR_NAME "/rbsemaphor" +#define RED_HDR "\033[0m\033[0;31m" +#define CLR_HDR "\033[0m\033[0;37m" + /*===================================== Class Mutex ====================================*/ @@ -129,9 +132,8 @@ public: void EXECRUN() \ } \ catch ( Exception &ex ) \ { \ - WRITELOG("\033[0m\033[0;31m"); \ ex.writeMessage(); \ - WRITELOG("\033[0m\033[0;37m%s caught an exception and stopped.\n", getTaskName()); \ + WRITELOG("%s%s caught an exception and stopped.%s\n", RED_HDR, getTaskName(), CLR_HDR); \ theMultiTaskProcess->abort(); \ } \ theMultiTaskProcess->threadStopped(); \ diff --git a/MQTTSNGateway/src/linux/loralink/SensorNetwork.cpp b/MQTTSNGateway/src/linux/loralink/SensorNetwork.cpp index 854854c..fc7f8e0 100644 --- a/MQTTSNGateway/src/linux/loralink/SensorNetwork.cpp +++ b/MQTTSNGateway/src/linux/loralink/SensorNetwork.cpp @@ -119,7 +119,7 @@ int SensorNetwork::read(uint8_t* buf, uint16_t bufLen) return LoRaLink::recv(buf, bufLen, &_clientAddr); } -int SensorNetwork::initialize(void) +void SensorNetwork::initialize(void) { char param[MQTTSNGW_PARAM_MAX]; uint32_t baudrate = 115200; @@ -135,15 +135,22 @@ int SensorNetwork::initialize(void) theProcess->getParam("DeviceRxLoRaLink", param); _description += ", SerialRx "; _description += param; + errno = 0; + if ( LoRaLink::open(LORALINK_MODEM_RX, param, baudrate) < 0 ) { - return -1; + throw EXCEPTION("Can't open a LoRaLink", errno); } theProcess->getParam("DeviceTxLoRaLink", param); _description += ", SerialTx "; _description += param; - return LoRaLink::open(LORALINK_MODEM_TX, param, baudrate); + errno = 0; + + if ( LoRaLink::open(LORALINK_MODEM_TX, param, baudrate) < 0 ) + { + throw EXCEPTION("Can't open a LoRaLink", errno); + } } const char* SensorNetwork::getDescription(void) diff --git a/MQTTSNGateway/src/linux/loralink/SensorNetwork.h b/MQTTSNGateway/src/linux/loralink/SensorNetwork.h index 0565ff1..febfeda 100644 --- a/MQTTSNGateway/src/linux/loralink/SensorNetwork.h +++ b/MQTTSNGateway/src/linux/loralink/SensorNetwork.h @@ -173,7 +173,7 @@ public: int unicast(const uint8_t* payload, uint16_t payloadLength, SensorNetAddress* sendto); int broadcast(const uint8_t* payload, uint16_t payloadLength); int read(uint8_t* buf, uint16_t bufLen); - int initialize(void); + void initialize(void); const char* getDescription(void); SensorNetAddress* getSenderAddress(void); diff --git a/MQTTSNGateway/src/linux/udp/SensorNetwork.cpp b/MQTTSNGateway/src/linux/udp/SensorNetwork.cpp index e96dca6..8a27510 100644 --- a/MQTTSNGateway/src/linux/udp/SensorNetwork.cpp +++ b/MQTTSNGateway/src/linux/udp/SensorNetwork.cpp @@ -177,9 +177,8 @@ int SensorNetwork::read(uint8_t* buf, uint16_t bufLen) * Prepare UDP sockets and description of SensorNetwork like * "UDP Multicast 225.1.1.1:1883 Gateway Port 10000". * The description is for a start up prompt. - * @return success = 0, error = -1 */ -int SensorNetwork::initialize(void) +void SensorNetwork::initialize(void) { char param[MQTTSNGW_PARAM_MAX]; uint16_t multicastPortNo = 0; @@ -224,7 +223,11 @@ int SensorNetwork::initialize(void) } /* Prepare UDP sockets */ - return UDPPort::open(ip.c_str(), multicastPortNo, unicastPortNo, ttl); + errno = 0; + if ( UDPPort::open(ip.c_str(), multicastPortNo, unicastPortNo, ttl) < 0 ) + { + throw EXCEPTION("Can't open a UDP", errno); + } } const char* SensorNetwork::getDescription(void) diff --git a/MQTTSNGateway/src/linux/udp/SensorNetwork.h b/MQTTSNGateway/src/linux/udp/SensorNetwork.h index 735a3c5..9fc9ce3 100644 --- a/MQTTSNGateway/src/linux/udp/SensorNetwork.h +++ b/MQTTSNGateway/src/linux/udp/SensorNetwork.h @@ -91,7 +91,7 @@ public: int unicast(const uint8_t* payload, uint16_t payloadLength, SensorNetAddress* sendto); int broadcast(const uint8_t* payload, uint16_t payloadLength); int read(uint8_t* buf, uint16_t bufLen); - int initialize(void); + void initialize(void); const char* getDescription(void); SensorNetAddress* getSenderAddress(void); diff --git a/MQTTSNGateway/src/linux/udp6/SensorNetwork.cpp b/MQTTSNGateway/src/linux/udp6/SensorNetwork.cpp index a0593f6..85acc2e 100644 --- a/MQTTSNGateway/src/linux/udp6/SensorNetwork.cpp +++ b/MQTTSNGateway/src/linux/udp6/SensorNetwork.cpp @@ -169,7 +169,7 @@ int SensorNetwork::read(uint8_t* buf, uint16_t bufLen) return UDPPort6::recv(buf, bufLen, &_clientAddr); } -int SensorNetwork::initialize(void) +void SensorNetwork::initialize(void) { char param[MQTTSNGW_PARAM_MAX]; uint16_t unicastPortNo = 0; @@ -209,7 +209,12 @@ int SensorNetwork::initialize(void) _description += param; } - return UDPPort6::open(ip.c_str(), unicastPortNo, broadcast.c_str(), interface.c_str(), hops); + errno = 0; + + if ( UDPPort6::open(ip.c_str(), unicastPortNo, broadcast.c_str(), interface.c_str(), hops) < 0 ) + { + throw EXCEPTION("Can't open a UDP6", errno); + } } const char* SensorNetwork::getDescription(void) diff --git a/MQTTSNGateway/src/linux/udp6/SensorNetwork.h b/MQTTSNGateway/src/linux/udp6/SensorNetwork.h index 0e3ab7e..59be5fa 100644 --- a/MQTTSNGateway/src/linux/udp6/SensorNetwork.h +++ b/MQTTSNGateway/src/linux/udp6/SensorNetwork.h @@ -99,7 +99,7 @@ public: int unicast(const uint8_t* payload, uint16_t payloadLength, SensorNetAddress* sendto); int broadcast(const uint8_t* payload, uint16_t payloadLength); int read(uint8_t* buf, uint16_t bufLen); - int initialize(void); + void initialize(void); const char* getDescription(void); SensorNetAddress* getSenderAddress(void); diff --git a/MQTTSNGateway/src/linux/xbee/SensorNetwork.cpp b/MQTTSNGateway/src/linux/xbee/SensorNetwork.cpp index 502a17d..06bd7f7 100644 --- a/MQTTSNGateway/src/linux/xbee/SensorNetwork.cpp +++ b/MQTTSNGateway/src/linux/xbee/SensorNetwork.cpp @@ -118,7 +118,7 @@ int SensorNetwork::read(uint8_t* buf, uint16_t bufLen) return XBee::recv(buf, bufLen, &_clientAddr); } -int SensorNetwork::initialize(void) +void SensorNetwork::initialize(void) { char param[MQTTSNGW_PARAM_MAX]; uint32_t baudrate = 9600; @@ -145,7 +145,12 @@ int SensorNetwork::initialize(void) _description += ", SerialDevice "; _description += param; - return XBee::open(param, baudrate); + errno =0; + + if ( XBee::open(param, baudrate) < 0 ) + { + throw EXCEPTION("Can't open a XBee", errno); + } } const char* SensorNetwork::getDescription(void) diff --git a/MQTTSNGateway/src/linux/xbee/SensorNetwork.h b/MQTTSNGateway/src/linux/xbee/SensorNetwork.h index 24b8752..52ad29e 100644 --- a/MQTTSNGateway/src/linux/xbee/SensorNetwork.h +++ b/MQTTSNGateway/src/linux/xbee/SensorNetwork.h @@ -126,7 +126,7 @@ public: int unicast(const uint8_t* payload, uint16_t payloadLength, SensorNetAddress* sendto); int broadcast(const uint8_t* payload, uint16_t payloadLength); int read(uint8_t* buf, uint16_t bufLen); - int initialize(void); + void initialize(void); const char* getDescription(void); SensorNetAddress* getSenderAddress(void);