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