Brief description of class still missing. More...
#include <DaemonLink.h>
Signals | |
void | stateChanged () |
Public Member Functions | |
DaemonLink (Station *station) | |
bool | isAvailable () |
unsigned int | port () const |
void | send (const char *msg) |
void | send (const char *buf, unsigned int len) |
void | setPort (unsigned int p) |
~DaemonLink () | |
Protected Slots | |
virtual void | connected () |
Protected Member Functions | |
virtual int | bytesAvailable (const char *buffer, int bytesCount)=0 |
int | findMatch (const char *buffer, int &bytesRead, int bytesCount, const char *string) |
bool | match (const char *buffer, int &bytesRead, int bytesCount, const char *string) |
double | readDouble (const char *buffer, int &bytesRead, int bytesCount, bool &ok) |
int | readInteger (const char *buffer, int &bytesRead, int bytesCount, bool &ok) |
long int | readLongInteger (const char *buffer, int &bytesRead, int bytesCount, bool &ok) |
QByteArray | readString (const char *buffer, int &bytesRead, int bytesCount, bool &ok) |
Station * | station () |
const Station * | station () const |
Brief description of class still missing.
Full description of class still missing
DaemonLink::DaemonLink | ( | Station * | station | ) |
Description of constructor still missing
References bytesAvailable(), connected(), station(), and TRACE.
: QObject(station) { TRACE; _station=station; _port=0; _connectionTimer.setInterval(5000); QObject::connect(&_connectionTimer, SIGNAL(timeout()), this, SLOT(connect())); QObject::connect(&_socket, SIGNAL(readyRead()), this, SLOT(bytesAvailable())); QObject::connect(&_socket, SIGNAL(connected()), this, SLOT(connected())); QObject::connect(&_socket, SIGNAL(disconnected()), this, SLOT(hungUp())); connect(); _connectionTimer.start(); }
virtual int DaemonLink::bytesAvailable | ( | const char * | buffer, |
int | bytesCount | ||
) | [protected, pure virtual] |
Implemented in GpsLink, SystemLink, CubeLink, and NetLink.
Referenced by DaemonLink().
void DaemonLink::connected | ( | ) | [protected, virtual, slot] |
Reimplemented in GpsLink, and CubeLink.
References stateChanged(), and TRACE.
Referenced by DaemonLink().
{ TRACE; _connectionTimer.stop(); emit stateChanged(); }
int DaemonLink::findMatch | ( | const char * | buffer, |
int & | bytesRead, | ||
int | bytesCount, | ||
const char * | string | ||
) | [protected] |
Returns 0 if buffer at bytesRead index does not contain string even partially at the end. Returns 1 if buffer at bytesRead index contains string partially at the end. Returns 2 if buffer at bytesRead index contains string completely.
{ int si=0; int bi=bytesRead; while(bi<bytesCount) { if(string[si]=='\0') { // Completely matched bytesRead=bi; return 2; } if(buffer[bi]==string[si]) { si++; } else { si=0; } bi++; } if(si>0) { // Partially matched, do not advance bytesRead return 1; } else { bytesRead=bytesCount; return 0; } }
bool DaemonLink::isAvailable | ( | ) |
References TRACE.
Referenced by Station::abortDownloadGps(), Station::clearUsb(), Station::downloadGps(), Station::isAvailable(), Station::linkState(), Station::navigationGps(), Station::powerOff(), Station::reboot(), Station::setSeismicParameters(), Station::startGps(), Station::startSeismic(), Station::stopGps(), and Station::stopSeismic().
{ TRACE; switch(_socket.state()) { case QAbstractSocket::UnconnectedState: connect(); _connectionTimer.start(); return false; case QAbstractSocket::HostLookupState: case QAbstractSocket::ConnectingState: case QAbstractSocket::ClosingState: // Transient state, skip for now, try next time return false; case QAbstractSocket::ConnectedState: // Connection available break; case QAbstractSocket::BoundState: case QAbstractSocket::ListeningState: // Not possible here (server states only) return false; } return true; }
bool DaemonLink::match | ( | const char * | buffer, |
int & | bytesRead, | ||
int | bytesCount, | ||
const char * | string | ||
) | [protected] |
Returns true if buffer at bytesRead index starts with string.
Referenced by CubeLink::bytesAvailable(), SystemLink::bytesAvailable(), and GpsLink::bytesAvailable().
{ int n=bytesCount-bytesRead; int sn=strlen(string); if(n>=sn && strncmp(buffer+bytesRead, string, sn)==0) { bytesRead+=sn; return true; } else { return false; } }
unsigned int DaemonLink::port | ( | ) | const [inline] |
{return _port;}
double DaemonLink::readDouble | ( | const char * | buffer, |
int & | bytesRead, | ||
int | bytesCount, | ||
bool & | ok | ||
) | [protected] |
Returns -1 if value is truncated and bytesRead is not modified.
{ int i; double value; for(i=bytesRead; i<bytesCount && !isspace(buffer[i]); i++) {} int n=i-bytesRead; if(n>0 && i<bytesCount) { char * temp=new char[n+1]; strncpy(temp, buffer+bytesRead, n); temp[n]='\0'; value=atof(temp); bytesRead=i; ok=true; delete [] temp; } else { value=-1; ok=false; } return value; }
int DaemonLink::readInteger | ( | const char * | buffer, |
int & | bytesRead, | ||
int | bytesCount, | ||
bool & | ok | ||
) | [protected] |
Returns -1 if value is truncated and bytesRead is not modified.
{ int i; int value; for(i=bytesRead; i<bytesCount && !isspace(buffer[i]); i++) {} int n=i-bytesRead; if(n>0 && i<bytesCount) { char * temp=new char[n+1]; strncpy(temp, buffer+bytesRead, n); temp[n]='\0'; value=atoi(temp); bytesRead=i; ok=true; delete [] temp; } else { value=-1; ok=false; } return value; }
long int DaemonLink::readLongInteger | ( | const char * | buffer, |
int & | bytesRead, | ||
int | bytesCount, | ||
bool & | ok | ||
) | [protected] |
Returns -1 if value is truncated and bytesRead is not modified.
{ int i; long int value; for(i=bytesRead; i<bytesCount && !isspace(buffer[i]); i++) {} int n=i-bytesRead; if(n>0 && i<bytesCount) { char * temp=new char[n+1]; strncpy(temp, buffer+bytesRead, n); temp[n]='\0'; value=atol(temp); bytesRead=i; ok=true; delete [] temp; } else { value=-1; ok=false; } return value; }
QByteArray DaemonLink::readString | ( | const char * | buffer, |
int & | bytesRead, | ||
int | bytesCount, | ||
bool & | ok | ||
) | [protected] |
Returns -1 if value is truncated and bytesRead is not modified.
{ int i; QByteArray value; for(i=bytesRead; i<bytesCount && !isspace(buffer[i]); i++) {} int n=i-bytesRead; if(n>0 && i<bytesCount) { value=QByteArray(buffer+bytesRead, n); bytesRead=i; ok=true; } else { ok=false; } return value; }
void DaemonLink::send | ( | const char * | msg | ) |
References TRACE.
Referenced by SystemLink::addComment(), SystemLink::clearUsb(), SystemLink::comments(), SystemLink::diskSpace(), GpsLink::navigation(), SystemLink::powerOff(), GpsLink::raw(), SystemLink::reboot(), CubeLink::setFrequency(), CubeLink::setGains(), GpsLink::start(), CubeLink::start(), CubeLink::stop(), and GpsLink::stop().
{ TRACE; if(_socket.state()==QAbstractSocket::ConnectedState) { _socket.write(msg, strlen(msg)); _socket.flush(); } }
void DaemonLink::send | ( | const char * | buf, |
unsigned int | len | ||
) |
void DaemonLink::setPort | ( | unsigned int | p | ) | [inline] |
Referenced by CubeLink::CubeLink(), GpsLink::GpsLink(), NetLink::NetLink(), and SystemLink::SystemLink().
{_port=p;}
void DaemonLink::stateChanged | ( | ) | [signal] |
Referenced by connected().
Station* DaemonLink::station | ( | ) | [inline, protected] |
Referenced by NetLink::bytesAvailable(), DaemonLink(), and GpsLink::raw().
{return _station;}
const Station* DaemonLink::station | ( | ) | const [inline, protected] |
{return _station;}