00001 00058 #define _EXPORT_CCL_ 00059 00060 #include "CigiSOFV2.h" 00061 #include "CigiExceptions.h" 00062 #include "CigiSwapping.h" 00063 #include <memory.h> 00064 00065 00066 #ifdef CIGI_LITTLE_ENDIAN 00067 #define CIGI_SCOPY2 CigiSwap2 00068 #define CIGI_SCOPY4 CigiSwap4 00069 #define CIGI_SCOPY8 CigiSwap8 00070 #else 00071 #define CIGI_SCOPY2 CigiCopy2 00072 #define CIGI_SCOPY4 CigiCopy4 00073 #define CIGI_SCOPY8 CigiCopy8 00074 #endif 00075 00076 00077 // ==================================================================== 00078 // Construction/Destruction 00079 // ==================================================================== 00080 00081 // ================================================ 00082 // CigiSOFV2 00083 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv 00084 CigiSOFV2::CigiSOFV2() 00085 { 00086 00087 PacketID = CIGI_SOF_PACKET_ID_V2; 00088 PacketSize = CIGI_SOF_PACKET_SIZE_V2; 00089 Version = 2; 00090 MinorVersion = 0; 00091 00092 BSwapEn = false; 00093 DatabaseID = 0; 00094 FrameCntr = 0; 00095 TimeStampV2 = 0.0f; 00096 TimeStampV3 = 0; 00097 ByteSwap = 0x8000; 00098 IGMode = Standby; 00099 TimestampValid = false; 00100 EarthRefModel = WGS84; 00101 LastRcvdHostFrame = 0; 00102 00103 } 00104 00105 // ================================================ 00106 // ~CigiSOFV2 00107 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv 00108 CigiSOFV2::~CigiSOFV2() 00109 { 00110 00111 } 00112 00113 00114 00115 00116 // ==================================================================== 00117 // Pack and Unpack 00118 // ==================================================================== 00119 00120 // ================================================ 00121 // Pack 00122 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv 00123 int CigiSOFV2::Pack(CigiBasePacket * Base, Cigi_uint8 * Buff, void *Spec) const 00124 { 00125 PackPointer CDta; 00126 00127 CigiBaseSOF *Data = ( CigiBaseSOF *) Base; 00128 00129 00130 CDta.c = Buff; 00131 00132 *CDta.c++ = PacketID; 00133 *CDta.c++ = PacketSize; 00134 *CDta.c++ = Version; 00135 00136 *CDta.b++ = Data->DatabaseID; 00137 *CDta.c++ = Data->IGStatus; 00138 00139 Cigi_uint8 HDta = (Cigi_uint8)((Data->IGMode << 6) & 0xc0); 00140 00141 *CDta.c++ = HDta; 00142 *CDta.c++ = 0; 00143 *CDta.c++ = 0; 00144 00145 CIGI_SCOPY4(CDta.l++, &Data->FrameCntr); 00146 CIGI_SCOPY4(CDta.f++, &Data->TimeStampV2); 00147 00148 00149 return(PacketSize); 00150 00151 } 00152 00153 00154 // ================================================ 00155 // Unpack 00156 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv 00157 int CigiSOFV2::Unpack(Cigi_uint8 * Buff, bool Swap, void *Spec) 00158 { 00159 00160 PackPointer CDta; 00161 00162 CDta.c = Buff; 00163 00164 CDta.c += 3; 00165 00166 DatabaseID = *CDta.b++; 00167 IGStatus = *CDta.c++; 00168 00169 Cigi_uint8 HDta = *CDta.c++; 00170 00171 IGMode = (IGModeGrp)((HDta >> 6) & 0x03); 00172 00173 CDta.s++; 00174 00175 CIGI_SCOPY4(&FrameCntr,CDta.l++); 00176 CIGI_SCOPY4(&TimeStampV2,CDta.f++); 00177 00178 TimeStampV3 = ((Cigi_uint32)TimeStampV2) / 10; 00179 00180 LastRcvdHostFrame = FrameCntr; 00181 00182 Swap = false; 00183 00184 return(CIGI_SUCCESS); 00185 00186 } 00187 00188 00189 00190 00191 // ==================================================================== 00192 // Accessors 00193 // ==================================================================== 00194 00195 00196 00197 // ================================================ 00198 // SetTimeStamp 00199 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv 00200 int CigiSOFV2::SetTimeStamp(const float TimeStamp, bool bndchk) 00201 { 00202 00203 TimeStampV2 = TimeStamp; 00204 TimeStampV3 = ((Cigi_uint32)TimeStampV2) / 10; 00205 00206 TimestampValid = true; 00207 00208 return(CIGI_SUCCESS); 00209 00210 } 00211 00212 00213