Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 #include <labust/tritech/DiverMsg.hpp>
00038 #include <stdexcept>
00039
00040 using namespace labust::tritech;
00041
00042
00043 DiverMsg::BitsCollection DiverMsg::topsideMap;
00044 DiverMsg::BitsCollection DiverMsg::diverMap;
00045
00046 #define PP_ADD_CASE(x) \
00047 case x: \
00048 this->latlonToBits<x>(lat,lon); \
00049 break; \
00050
00051 void LatLon2Bits::convert(double lat, double lon, int bits)
00052 {
00053 switch (bits)
00054 {
00055 case 0: break;
00056 PP_ADD_CASE(7);
00057 PP_ADD_CASE(10);
00058 PP_ADD_CASE(14);
00059 PP_ADD_CASE(18);
00060 PP_ADD_CASE(22);
00061 default:
00062 throw std::runtime_error("LatLon2Bits: Missing lat-lon conversion definition.");
00063 }
00064 }
00065
00066 #undef ADD_CASE
00067 template <>
00068 void LatLon2Bits::latlonToBits<22>(double lat, double lon)
00069 {
00070 double min = (lon - int(lon))*60;
00071 this->lon = int((int(lon)+180)*10000 + min*100);
00072
00073 min = (lat - int(lat))*60;
00074 this->lat = int((int(lat)+90)*10000 + min*100);
00075 }
00076
00077 template <>
00078 void LatLon2Bits::latlonToBits<18>(double lat, double lon)
00079 {
00080 this->lat = int((lat - int(lat))*600000)%100000;
00081 this->lon = int((lon - int(lon))*600000)%100000;
00082 }
00083
00084 template <>
00085 void LatLon2Bits::latlonToBits<14>(double lat, double lon)
00086 {
00087 double min = (lon - int(lon))*60;
00088 this->lon = int((min - int(min))*10000);
00089
00090 min = (lat - int(lat))*60;
00091 this->lat = int((min - int(min))*10000);
00092 }
00093
00094 template <>
00095 void LatLon2Bits::latlonToBits<10>(double lat, double lon)
00096 {
00097 this->latlonToBits<14>(lat,lon);
00098 this->lat/=10;
00099 this->lon/=10;
00100 }
00101
00102 template <>
00103 void LatLon2Bits::latlonToBits<7>(double lat, double lon)
00104 {
00105 this->latlonToBits<14>(lat,lon);
00106 this->lat%=100;
00107 this->lon%=100;
00108 }