Public Member Functions | Protected Member Functions
CubeTcpBuffer Class Reference

Brief description of class still missing. More...

#include <CubeTcpBuffer.h>

Inheritance diagram for CubeTcpBuffer:
GpCoreTools::DynamicBuffer

List of all members.

Public Member Functions

 CubeTcpBuffer (int fileDescriptor, CubeDevice *device, CubeTcpServer *server)
 ~CubeTcpBuffer ()

Protected Member Functions

virtual int bytesAvailable (char *buffer, int bytesCount)

Detailed Description

Brief description of class still missing.

Full description of class still missing


Constructor & Destructor Documentation

CubeTcpBuffer::CubeTcpBuffer ( int  fileDescriptor,
CubeDevice device,
CubeTcpServer server 
)

Description of constructor still missing

References TRACE.

  : DynamicBuffer(fileDescriptor)
{
  TRACE;
  _device=device;
  _server=server;
}

Description of destructor still missing

References TRACE.

{
  TRACE;
}

Member Function Documentation

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

The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines