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;
}