All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines
Public Member Functions | Static Public Member Functions
WaranCore::GpsBlock Class Reference

Brief description of class still missing. More...

#include <GpsBlock.h>

List of all members.

Public Member Functions

void decode (GpsFix &fix) const
 GpsBlock (const char *bytes)
unsigned char index () const
unsigned char state () const
unsigned char totalSize () const

Static Public Member Functions

static char * encode (unsigned char index, const GpsFix &oldFix, const GpsFix &newdFix, unsigned int &byteCount)

Detailed Description

Brief description of class still missing.

Full description of class still missing


Constructor & Destructor Documentation

WaranCore::GpsBlock::GpsBlock ( const char *  bytes)

Parse buffer bytes. bytes must be at least 4-byte long.

{
  _bytes=bytes;
  unsigned int flags=*reinterpret_cast<const unsigned int *>(_bytes);
  _sizes[0]=size(flags, Longitude);
  _sizes[1]=size(flags, Latitude);
  _sizes[2]=size(flags, Altitude);
  _sizes[3]=size(flags, HorizontalAccuracy);
  _sizes[4]=size(flags, HorizontalDop);
  _sizes[5]=size(flags, NorthingDop);
  _sizes[6]=size(flags, EastingDop);
  _sizes[7]=size(flags, SateliteCount);
}

Member Function Documentation

void WaranCore::GpsBlock::decode ( GpsFix fix) const

References WaranCore::GpsFix::altitude(), WaranCore::GpsFix::eastingDop(), WaranCore::GpsFix::horizontalAccuracy(), WaranCore::GpsFix::horizontalDop(), WaranCore::GpsFix::latitude(), WaranCore::GpsFix::longitude(), WaranCore::GpsFix::northingDop(), and WaranCore::GpsFix::sateliteCount().

{
  const char * ptr=_bytes+4;
  decode(ptr, _sizes[0], fix.longitude());
  decode(ptr, _sizes[1], fix.latitude());
  decode(ptr, _sizes[2], fix.altitude());
  decode(ptr, _sizes[3], fix.horizontalAccuracy());
  decode(ptr, _sizes[4], fix.horizontalDop());
  decode(ptr, _sizes[5], fix.northingDop());
  decode(ptr, _sizes[6], fix.eastingDop());
  decode(ptr, _sizes[7], fix.sateliteCount());
  //printf("Longitude %hhi %i\n",_sizes[0], fix.longitude());
  //printf("Latitude %hhi %i\n",_sizes[1], fix.latitude());
}
char * WaranCore::GpsBlock::encode ( unsigned char  index,
const GpsFix oldFix,
const GpsFix newFix,
unsigned int &  byteCount 
) [static]

24 bits flags for size (number of bytes) of each value 0 to 3 (2 bits) for int values 0 to 2 (2 bits) for short values 0 to 1 (2 bits) for char values 2 bits fix state 8 bits index of block values

Values are stored in order(maximum length): longitude(int) latitude(int) altitude(int) horizontal accuracy(int) horizontal dop(short) northing dop(short) easting dop(short) satellite count(char)

Returned pointer must be deleted manually.

References WaranCore::GpsFix::altitude(), WaranCore::GpsFix::eastingDop(), WaranCore::GpsFix::horizontalAccuracy(), WaranCore::GpsFix::horizontalDop(), index(), WaranCore::GpsFix::latitude(), WaranCore::GpsFix::longitude(), WaranCore::GpsFix::northingDop(), WaranCore::GpsFix::sateliteCount(), and WaranCore::GpsFix::state().

{
  char * bytes=new char[32];
  unsigned int& flags=*reinterpret_cast<unsigned int *>(bytes);
  flags=index;
  flags|=(newFix.state() & 0x03) << 8;
  char * ptr=bytes+4;
  flags|=encode(ptr, Longitude, oldFix.longitude(), newFix.longitude());
  flags|=encode(ptr, Latitude, oldFix.latitude(), newFix.latitude());
  flags|=encode(ptr, Altitude, oldFix.altitude(), newFix.altitude());
  flags|=encode(ptr, HorizontalAccuracy, oldFix.horizontalAccuracy(), newFix.horizontalAccuracy());
  flags|=encode(ptr, HorizontalDop, oldFix.horizontalDop(), newFix.horizontalDop());
  flags|=encode(ptr, NorthingDop, oldFix.northingDop(), newFix.northingDop());
  flags|=encode(ptr, EastingDop, oldFix.eastingDop(), newFix.eastingDop());
  flags|=encode(ptr, SateliteCount, oldFix.sateliteCount(), newFix.sateliteCount());
  byteCount=ptr-bytes;
  //printf("Longitude %i, %i\n", (flags >> Longitude) & 0x00000003, newFix.longitude());
  //printf("Latitude %i, %i\n", (flags >> Latitude) & 0x00000003,newFix.latitude());
  return bytes;
}
unsigned char WaranCore::GpsBlock::index ( ) const

Referenced by encode().

{
  return *reinterpret_cast<const unsigned int *>(_bytes) & 0x000000FF;
}
unsigned char WaranCore::GpsBlock::state ( ) const
{
  return (*reinterpret_cast<const unsigned int *>(_bytes) & 0x00000300) >> 8;
}
unsigned char WaranCore::GpsBlock::totalSize ( ) const

Returns the total size of the payload (including state, index and flags). Initialize the internal individual sizes.

{
  unsigned char s=0;
  for(int i=0;i<8;i++) {
    s+=_sizes[i];
    //printf("size[%i]=%i\n", i, _sizes[i]);
  }
  //printf("flags %08X\n",flags);
  return s+4;
}

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