00001 00043 #define _EXPORT_CCL_ 00044 00045 00046 #include "CigiShortSymbolCtrlV3_3.h" 00047 #include "CigiSwapping.h" 00048 #include "CigiExceptions.h" 00049 00050 00051 00052 // ==================================================================== 00053 // Construction/Destruction 00054 // ==================================================================== 00055 00056 // ================================================ 00057 // CigiBaseEntityCtrl 00058 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv 00059 CigiShortSymbolCtrlV3_3::CigiShortSymbolCtrlV3_3(void) 00060 { 00061 PacketID = CIGI_SHORT_SYMBOL_CONTROL_PACKET_ID_V3_3; 00062 PacketSize = CIGI_SHORT_SYMBOL_CONTROL_PACKET_SIZE_V3_3; 00063 Version = 3; 00064 MinorVersion = 3; 00065 00066 SymbolID = 0; 00067 SymbolState = CigiBaseSymbolCtrl::Hidden; 00068 AttachState = CigiBaseSymbolCtrl::Detach; 00069 FlashCtrl = CigiBaseSymbolCtrl::Continue; 00070 InheritColor = CigiBaseSymbolCtrl::NotInherit; 00071 DatumType[0] = None; 00072 DatumType[1] = None; 00073 Datum[0].UIntValue = 0; 00074 Datum[1].UIntValue = 0; 00075 00076 } 00077 00078 // ================================================ 00079 // ~CigiBaseEntityCtrl 00080 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv 00081 CigiShortSymbolCtrlV3_3::~CigiShortSymbolCtrlV3_3(void) 00082 { 00083 } 00084 00085 00086 00087 // ==================================================================== 00088 // Pack and Unpack 00089 // ==================================================================== 00090 00091 // ================================================ 00092 // Pack 00093 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv 00094 int CigiShortSymbolCtrlV3_3::Pack(CigiBasePacket * Base, Cigi_uint8 * Buff, void *Spec) const 00095 { 00096 PackPointer CDta; 00097 00098 CigiShortSymbolCtrlV3_3 * Data = 00099 ( CigiShortSymbolCtrlV3_3 *)Base; 00100 00101 CDta.c = Buff; 00102 00103 *CDta.c++ = PacketID; 00104 *CDta.c++ = PacketSize; 00105 00106 *CDta.s++ = Data->SymbolID; 00107 00108 unsigned char HDta = 0; 00109 HDta |= (Data->SymbolState & 0x03); 00110 HDta |= ((Data->AttachState << 2) & 0x04); 00111 HDta |= ((Data->FlashCtrl << 3) & 0x08); 00112 HDta |= ((Data->InheritColor << 4) & 0x10); 00113 *CDta.c++ = HDta; 00114 00115 *CDta.c++ = 0; 00116 00117 *CDta.c++ = Data->DatumType[0]; 00118 *CDta.c++ = Data->DatumType[1]; 00119 *CDta.l++ = Data->Datum[0].UIntValue; 00120 *CDta.l++ = Data->Datum[1].UIntValue; 00121 00122 00123 return(PacketSize); 00124 00125 } 00126 00127 // ================================================ 00128 // Unpack 00129 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv 00130 int CigiShortSymbolCtrlV3_3::Unpack(Cigi_uint8 * Buff, bool Swap, void *Spec) 00131 { 00132 PackPointer CDta; 00133 unsigned char HDta = 0; 00134 00135 CDta.c = Buff; 00136 00137 CDta.c += 2; // Step over packet id and size 00138 00139 if(!Swap) 00140 { 00141 00142 SymbolID = *CDta.s++; 00143 00144 HDta = *CDta.c++; 00145 00146 CDta.c++; 00147 00148 DatumType[0] = (DatumTypeGrp)*CDta.c++; 00149 DatumType[1] = (DatumTypeGrp)*CDta.c++; 00150 Datum[0].UIntValue = *CDta.l++; 00151 Datum[1].UIntValue = *CDta.l++; 00152 00153 } 00154 else 00155 { 00156 00157 CigiSwap2(&SymbolID, CDta.s++); 00158 00159 HDta = *CDta.c++; 00160 00161 CDta.c++; 00162 00163 DatumType[0] = (DatumTypeGrp)*CDta.c++; 00164 DatumType[1] = (DatumTypeGrp)*CDta.c++; 00165 CigiSwap4(&Datum[0].UIntValue, CDta.l++); 00166 CigiSwap4(&Datum[1].UIntValue, CDta.l++); 00167 00168 } 00169 00170 SymbolState = (CigiBaseSymbolCtrl::SymbolStateGrp)(HDta & 0x03); 00171 AttachState = (CigiBaseSymbolCtrl::AttachStateGrp)((HDta >> 2) & 0x01); 00172 FlashCtrl = (CigiBaseSymbolCtrl::FlashCtrlGrp)((HDta >> 3) & 0x01); 00173 InheritColor = (CigiBaseSymbolCtrl::InheritColorGrp)((HDta >> 4) & 0x01); 00174 00175 return(PacketSize); 00176 00177 } 00178 00179 00180 00181