Brief description of class still missing. More...
#include <GpsBlock.h>
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) |
Brief description of class still missing.
Full description of class still missing
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); }
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; }