Simplify using of UnbufferedSerial(Serial), USBCDC, TCP, SMTP, NTP Fork : https://github.com/YSI-LPS/lib_Transmission
Dependents: lib_Transmission_Serial_example 2022_TICE_Electrolyse lib_Transmission_TCP_example
Diff: lib_Transmission.cpp
- Revision:
- 11:de94dcd67561
- Parent:
- 10:25e049353db5
- Child:
- 12:e22ff63d237c
diff -r 25e049353db5 -r de94dcd67561 lib_Transmission.cpp --- a/lib_Transmission.cpp Tue Nov 24 15:58:38 2020 +0000 +++ b/lib_Transmission.cpp Thu Dec 10 09:49:22 2020 +0000 @@ -1,7 +1,6 @@ #include "lib_Transmission.h" -#include <sstream> -Transmission::Transmission(UnbufferedSerial *serial, EthernetInterface *eth, void(*init)(void), void(*processing)(string, enumTRANSMISSION)) +Transmission::Transmission(UnbufferedSerial *serial, EthernetInterface *eth, void(*init)(void), void(*processing)(string, Transmission::enum_trans_to)) { _queueThread.start(callback(&_queue, &EventQueue::dispatch_forever)); _serial = serial; @@ -12,6 +11,7 @@ string Transmission::set(bool SET, const char* IP, uint16_t PORT) { + if(_eth == NULL) return "00:00:00:00:00:00"; if(message.SET && SET) { if(message.PORT != PORT) @@ -32,6 +32,7 @@ string Transmission::get(void) { + if(_eth == NULL) return "0.0.0.0"; SocketAddress ip; _eth->get_ip_address(&ip); string address(ip.get_ip_address()?ip.get_ip_address():"0.0.0.0"); @@ -41,6 +42,7 @@ bool Transmission::eth_connect(void) { + if(_eth == NULL) return false; if(message.SET) { switch(_eth->get_connection_status()) @@ -96,7 +98,7 @@ _serverTCP.set_blocking(false); _serverTCP.sigio(callback(this, &Transmission::serverTCP_event)); message.CONNECT = true; - _queue.call(_init); + if(_init != NULL) _queue.call(_init); } return message.CONNECT; } @@ -142,7 +144,7 @@ } } -enumTRANSTATUS Transmission::recv(void) +Transmission::enum_trans_status Transmission::recv(void) { if(eth_connect()) { @@ -152,30 +154,37 @@ if(ack < NSAPI_ERROR_WOULD_BLOCK) eth_error("clientTCP_recv", ack); if(!size) message.BREAK = ((ack == NSAPI_ERROR_OK) || (ack == NSAPI_ERROR_NO_CONNECTION)); for(int i = 0; i < size; i++) if(buffer[i] == '\n') buffer[i] = ';'; - _processing(buffer, TCP); + if(_processing != NULL) _processing(buffer, TCP); } - if(_serial->readable()) + if(_serial != NULL) { - char caractere; - _serial->read(&caractere, 1); - if((caractere == '\n') || (caractere == '\r')) + if(_serial->readable()) { - _processing(message.serial, SERIAL); - message.serial.clear(); + char caractere; + _serial->read(&caractere, 1); + if((caractere == '\n') || (caractere == '\r')) + { + if(_processing != NULL) _processing(message.serial, SERIAL); + message.serial.clear(); + } + else if((caractere > 31) && (caractere < 127)) message.serial += caractere; } - else if((caractere > 31) && (caractere < 127)) message.serial += caractere; } return message.status; } -nsapi_error_t Transmission::send(const string& buff, const enumTRANSMISSION& type) +nsapi_error_t Transmission::send(const string& buff, const enum_trans_to& type) { nsapi_error_t ack = NSAPI_ERROR_WOULD_BLOCK; string ssend(buff+"\n"); - - if((type != TCP) && (type != HTTP) && !buff.empty()) ack = _serial->write(ssend.c_str(), ssend.length()); + if((type != TCP) && (type != HTTP) && !buff.empty()) + { + if(_serial == NULL) return NSAPI_ERROR_NO_CONNECTION; + ack = _serial->write(ssend.c_str(), ssend.length()); + } if(type != SERIAL) { + if(_eth == NULL) return NSAPI_ERROR_NO_CONNECTION; if(!message.BREAK && !buff.empty() && (message.status == BLUE_CLIENT)) eth_error("clientTCP_send", ack = _clientTCP->send(ssend.c_str(), ssend.size())); if(message.BREAK || (type == HTTP)) @@ -191,6 +200,7 @@ bool Transmission::smtp(const char* MAIL, const char* FROM, const char* SUBJECT, const char* DATA) { + if(_eth == NULL) return false; if((!message.DHCP) || (_eth->get_connection_status() != NSAPI_STATUS_GLOBAL_UP)) return false; TCPSocket clientSMTP; clientSMTP.set_timeout(REQUEST_TIMEOUT*20); @@ -219,6 +229,7 @@ time_t Transmission::ntp(const char* ADDRESS) { + if(_eth == NULL) return 0; if((!message.DHCP) || (_eth->get_connection_status() != NSAPI_STATUS_GLOBAL_UP)) return 0; time_t timeStamp = 0; UDPSocket clientNTP;