00001 00055 #define _EXPORT_CCL_ 00056 00057 #include "CigiSOFV1.h" 00058 #include "CigiExceptions.h" 00059 #include "CigiSwapping.h" 00060 #include <memory.h> 00061 00062 00063 #ifdef CIGI_LITTLE_ENDIAN 00064 #define CIGI_SCOPY2 CigiSwap2 00065 #define CIGI_SCOPY4 CigiSwap4 00066 #define CIGI_SCOPY8 CigiSwap8 00067 #else 00068 #define CIGI_SCOPY2 CigiCopy2 00069 #define CIGI_SCOPY4 CigiCopy4 00070 #define CIGI_SCOPY8 CigiCopy8 00071 #endif 00072 00073 00074 // ==================================================================== 00075 // Construction/Destruction 00076 // ==================================================================== 00077 00078 // ================================================ 00079 // CigiSOFV1 00080 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv 00081 CigiSOFV1::CigiSOFV1() 00082 { 00083 00084 PacketID = CIGI_SOF_PACKET_ID_V1; 00085 PacketSize = CIGI_SOF_PACKET_SIZE_V1; 00086 Version = 1; 00087 MinorVersion = 0; 00088 00089 BSwapEn = false; 00090 DatabaseID = 0; 00091 FrameCntr = 0; 00092 TimeStampV2 = 0.0f; 00093 TimeStampV3 = 0; 00094 ByteSwap = 0x8000; 00095 IGMode = Standby; 00096 TimestampValid = false; 00097 EarthRefModel = WGS84; 00098 LastRcvdHostFrame = 0; 00099 00100 } 00101 00102 // ================================================ 00103 // ~CigiSOFV1 00104 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv 00105 CigiSOFV1::~CigiSOFV1() 00106 { 00107 00108 } 00109 00110 00111 00112 // ==================================================================== 00113 // Pack and Unpack 00114 // ==================================================================== 00115 00116 // ================================================ 00117 // Pack 00118 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv 00119 int CigiSOFV1::Pack(CigiBasePacket * Base, Cigi_uint8 * Buff, void *Spec) const 00120 { 00121 PackPointer CDta; 00122 00123 CigiBaseSOF *Data = ( CigiBaseSOF *) Base; 00124 00125 00126 CDta.c = Buff; 00127 00128 *CDta.c++ = PacketID; 00129 *CDta.c++ = PacketSize; 00130 *CDta.c++ = Version; 00131 00132 *CDta.b++ = Data->DatabaseID; 00133 *CDta.c++ = Data->IGStatus; 00134 00135 Cigi_uint8 HDta = (Cigi_uint8)((Data->IGMode << 6) & 0xc0); 00136 00137 *CDta.c++ = HDta; 00138 *CDta.c++ = 0; 00139 *CDta.c++ = 0; 00140 00141 CIGI_SCOPY4(CDta.l++, &Data->FrameCntr); 00142 00143 return(PacketSize); 00144 00145 } 00146 00147 00148 // ================================================ 00149 // Unpack 00150 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv 00151 int CigiSOFV1::Unpack(Cigi_uint8 * Buff, bool Swap, void *Spec) 00152 { 00153 00154 PackPointer CDta; 00155 00156 CDta.c = Buff; 00157 00158 CDta.c += 3; 00159 00160 DatabaseID = *CDta.b++; 00161 IGStatus = *CDta.c++; 00162 00163 Cigi_uint8 HDta = *CDta.c++; 00164 00165 IGMode = (IGModeGrp)((HDta >> 6) & 0x03); 00166 00167 CDta.s++; 00168 00169 CIGI_SCOPY4(&FrameCntr,CDta.l++); 00170 00171 LastRcvdHostFrame = FrameCntr; 00172 00173 // Timestamp & timestamp valid are not handled in this version. 00174 00175 00176 Swap = false; 00177 00178 return(CIGI_SUCCESS); 00179 00180 } 00181 00182