Brief description of class still missing. More...
#include <CubeTcpBuffer.h>
Public Member Functions | |
CubeTcpBuffer (int fileDescriptor, CubeDevice *device, CubeTcpServer *server) | |
~CubeTcpBuffer () | |
Protected Member Functions | |
virtual int | bytesAvailable (char *buffer, int bytesCount) |
Brief description of class still missing.
Full description of class still missing
CubeTcpBuffer::CubeTcpBuffer | ( | int | fileDescriptor, |
CubeDevice * | device, | ||
CubeTcpServer * | server | ||
) |
Description of constructor still missing
References TRACE.
: DynamicBuffer(fileDescriptor) { TRACE; _device=device; _server=server; }
int CubeTcpBuffer::bytesAvailable | ( | char * | buffer, |
int | bytesCount | ||
) | [protected, virtual] |
Communication protocol:
'start' Requests acquisition to start 'stop' Requests acquisition to stop 'reset' Requests acquisition to reset 'frequency?' Requests frequency 'frequency=value' Sets frequency 'gains?' Requests gains 'gains=hard,soft' Sets gains 'timeMode?' Requests time mode 'timeMode=value' Sets time mode 'hardVersion?' Requests hardware version 'softVersion?' Requests software version 'battery?' Requests battery voltage 'temperature?' Requests temperature 'state?' Requests a string describing current state: "recording", "stopped", "disconnected"
Each command is followed by at least one '
'
Implements GpCoreTools::DynamicBuffer.
References CubeTcpServer::sendState(), and TRACE.
{ TRACE; int bytesRead=0; while(bytesRead<bytesCount) { // Scan for a line int newBytesRead; for(newBytesRead=bytesRead; newBytesRead<bytesCount && buffer[newBytesRead]!='\n'; newBytesRead++) {} if(newBytesRead==bytesCount) { return bytesRead; // partial line } switch(buffer[bytesRead]) { case 'b': if(File::match(buffer, bytesRead, bytesCount, "battery?")) { requestBattery(); } break; case 'f': if(File::match(buffer, bytesRead, bytesCount, "frequency")) { if(bytesRead<bytesCount) { switch(buffer[bytesRead]) { case '=': bytesRead++; setFrequency(buffer, bytesRead, bytesCount); break; case '?': requestFrequency(); break; default: break; } } } break; case 'g': if(File::match(buffer, bytesRead, bytesCount, "gains")) { if(bytesRead<bytesCount) { switch(buffer[bytesRead]) { case '=': bytesRead++; setGains(buffer, bytesRead, bytesCount); break; case '?': requestGains(); break; default: break; } } } break; case 'h': if(File::match(buffer, bytesRead, bytesCount, "hardVersion?")) { requestHardVersion(); } break; case 'r': if(File::match(buffer, bytesRead, bytesCount, "reset")) { reset(); } break; case 's': if(File::match(buffer, bytesRead, bytesCount, "state")) { _server->sendState(); } else if(File::match(buffer, bytesRead, bytesCount, "stop")) { stop(); } else if(File::match(buffer, bytesRead, bytesCount, "start")) { start(); } else if(File::match(buffer, bytesRead, bytesCount, "softVersion?")) { requestSoftVersion(); } break; case 't': if(File::match(buffer, bytesRead, bytesCount, "timeMode")) { if(bytesRead<bytesCount) { switch(buffer[bytesRead]) { case '=': bytesRead++; setTimeMode(buffer, bytesRead, bytesCount); break; case '?': requestTimeMode(); default: break; } } } else if (File::match(buffer, bytesRead, bytesCount, "temperature?")) { requestTemperature(); } break; default: break; } bytesRead=newBytesRead+1; // Skip blanks and additionnal end of line characters while(bytesRead<bytesCount && isspace(buffer[bytesRead])) {bytesRead++;} } return bytesRead; }