00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef __igstkNDICommandInterpreter_h
00019 #define __igstkNDICommandInterpreter_h
00020
00021 #include "igstkObject.h"
00022 #include "igstkSerialCommunication.h"
00023 #include "igstkNDIErrorEvent.h"
00024
00025 namespace igstk
00026 {
00027
00043 class NDICommandInterpreter : public Object
00044 {
00045 public:
00046
00048 igstkStandardClassTraitsMacro( NDICommandInterpreter, Object )
00049
00050 public:
00051
00064 typedef enum
00065 {
00066 NDI_OKAY = 0x00,
00067 NDI_INVALID = 0x01,
00068 NDI_TOO_LONG = 0x02,
00069 NDI_TOO_SHORT = 0x03,
00070 NDI_BAD_COMMAND_CRC = 0x04,
00071 NDI_INTERN_TIMEOUT = 0x05,
00072 NDI_COMM_FAIL = 0x06,
00073 NDI_PARAMETERS = 0x07,
00074 NDI_INVALID_PORT = 0x08,
00075 NDI_INVALID_MODE = 0x09,
00076 NDI_INVALID_LED = 0x0a,
00077 NDI_LED_STATE = 0x0b,
00078 NDI_BAD_MODE = 0x0c,
00079 NDI_NO_TOOL = 0x0d,
00080 NDI_PORT_NOT_INIT = 0x0e,
00081 NDI_PORT_DISABLED = 0x0f,
00082 NDI_INITIALIZATION = 0x10,
00083 NDI_TSTOP_FAIL = 0x11,
00084 NDI_TSTART_FAIL = 0x12,
00085 NDI_PINIT_FAIL = 0x13,
00086 NDI_CAMERA = 0x14,
00087 NDI_INIT_FAIL = 0x15,
00088 NDI_DSTART_FAIL = 0x16,
00089 NDI_DSTOP_FAIL = 0x17,
00090 NDI_IRCHK_FAIL = 0x18,
00091 NDI_FIRMWARE = 0x19,
00092 NDI_INTERNAL = 0x1a,
00093 NDI_IRINIT_FAIL = 0x1b,
00094 NDI_IRED_FAIL = 0x1c,
00095 NDI_SROM_FAIL = 0x1d,
00096 NDI_SROM_READ = 0x1e,
00097 NDI_SROM_WRITE = 0x1f,
00098 NDI_SROM_SELECT = 0x20,
00099 NDI_PORT_CURRENT = 0x21,
00100 NDI_WAVELENGTH = 0x22,
00101 NDI_PARAMETER_RANGE = 0x23,
00102 NDI_VOLUME = 0x24,
00103 NDI_FEATURES = 0x25,
00104 NDI_ERROR_0X26 = 0x26,
00105 NDI_ERROR_0X27 = 0x27,
00106 NDI_SCU_STATE = 0x28,
00107 NDI_CORRUPT = 0x29,
00108 NDI_MEMORY = 0x2A,
00109 NDI_NOT_ALLOCATED = 0x2B,
00110 NDI_NOT_OCCUPIED = 0x2C,
00111 NDI_NO_HANDLES = 0x2D,
00112 NDI_INCOMPATIBLE = 0x2E,
00113 NDI_DESCRIPTION = 0x2F,
00114 NDI_ASSIGNED = 0x30,
00115 NDI_INVALID_STATE = 0x31,
00116 NDI_OPERATION = 0x32,
00117 NDI_FEATURE = 0x33,
00119 NDI_ENVIRONMENT = 0xf1,
00121 NDI_EPROM_ERASE = 0xf4,
00122 NDI_EPROM_WRITE = 0xf5,
00123 NDI_EPROM_READ = 0xf6,
00125
00126
00127 NDI_BAD_CRC = 0x0100,
00128 NDI_OPEN_ERROR = 0x0200,
00129 NDI_BAD_COMM = 0x0300,
00130 NDI_TIMEOUT = 0x0400,
00131 NDI_WRITE_ERROR = 0x0500,
00132 NDI_READ_ERROR = 0x0600,
00133 NDI_RESET_FAIL = 0x0700,
00134 NDI_PROBE_FAIL = 0x0800,
00135 } ErrorCodeType;
00136
00138 typedef enum
00139 {
00140 NDI_9600 = 0,
00141 NDI_14400 = 1,
00142 NDI_19200 = 2,
00143 NDI_38400 = 3,
00144 NDI_57600 = 4,
00145 NDI_115200 = 5,
00146 } COMMBaudType;
00147
00149 typedef enum
00150 {
00151 NDI_8N1 = 0,
00152 NDI_8N2 = 1,
00153 NDI_8O1 = 10,
00154 NDI_8O2 = 11,
00155 NDI_8E1 = 20,
00156 NDI_8E2 = 21,
00157 NDI_7N1 = 100,
00158 NDI_7N2 = 101,
00159 NDI_7O1 = 110,
00160 NDI_7O2 = 111,
00161 NDI_7E1 = 120,
00162 NDI_7E2 = 121 ,
00163 } COMMDataType;
00164
00166 typedef enum
00167 {
00168 NDI_NOHANDSHAKE = 0,
00169 NDI_HANDSHAKE = 1,
00170 } COMMHandshakeType;
00171
00173 typedef enum
00174 {
00175 NDI_CONTROL_FIRMWARE = 0,
00176 NDI_LEFT_SENSOR_FIRMWARE = 1,
00177 NDI_RIGHT_SENSOR_FIRMWARE = 2,
00178 NDI_TIU_FIRMWARE = 3,
00179 NDI_CONTROL_FIRMWARE_ENHANCED = 4,
00181 } VERModeType;
00182
00184 typedef enum
00185 {
00186 NDI_ALL_HANDLES = 0x00,
00187 NDI_STALE_HANDLES = 0x01,
00188 NDI_UNINITIALIZED_HANDLES = 0x02,
00189 NDI_UNENABLED_HANDLES = 0x03,
00190 NDI_ENABLED_HANDLES = 0x04,
00191 } PHSRModeType;
00192
00194 typedef enum
00195 {
00196 NDI_STATIC = 'S',
00197 NDI_DYNAMIC = 'D',
00198 NDI_BUTTON_BOX = 'B',
00199 } PENATrackingModeType;
00200
00202 typedef enum
00203 {
00204 NDI_XFORMS_AND_STATUS = 0x0001,
00205 NDI_ADDITIONAL_INFO = 0x0002,
00206 NDI_SINGLE_STRAY = 0x0004,
00207 NDI_INCLUDE_OUT_OF_VOLUME = 0x0800,
00208 NDI_PASSIVE_STRAY = 0x1000,
00209 } TXModeType;
00210
00212 typedef enum
00213 {
00214 NDI_UNOCCUPIED = 0x00,
00215 NDI_VALID = 0x01,
00216 NDI_MISSING = 0x02,
00217 NDI_DISABLED = 0x04,
00218 } TXTransformType;
00219
00221 typedef enum
00222 {
00223 NDI_TOOL_IN_PORT = 0x0001,
00224 NDI_SWITCH_1_ON = 0x0002,
00225 NDI_SWITCH_2_ON = 0x0004,
00226 NDI_SWITCH_3_ON = 0x0008,
00227 NDI_INITIALIZED = 0x0010,
00228 NDI_ENABLED = 0x0020,
00229 NDI_OUT_OF_VOLUME = 0x0040,
00230 NDI_PARTIALLY_IN_VOLUME = 0x0080,
00231 NDI_DISTURBANCE_DETECTED = 0x0200,
00232 NDI_SIGNAL_TOO_SMALL = 0x0400,
00233 NDI_SIGNAL_TOO_BIG = 0x0800,
00234 NDI_PROCESSING_EXCEPTION = 0x1000,
00235 NDI_PORT_HARDWARE_FAILURE = 0x2000,
00236 } TXPortStatusType;
00237
00239 typedef enum
00240 {
00241 NDI_COMM_SYNC_ERROR = 0x0001,
00242 NDI_TOO_MUCH_EXTERNAL_INFRARED = 0x0002,
00243 NDI_COMM_CRC_ERROR = 0x0004,
00244 NDI_COMM_RECOVERABLE = 0x0008,
00245 NDI_HARDWARE_FAILURE = 0x0010,
00246 NDI_HARDWARE_CHANGE = 0x0020,
00247 NDI_PORT_OCCUPIED = 0x0040,
00248 NDI_PORT_UNOCCUPIED = 0x0080,
00249 } TXSystemStatusType;
00250
00252 typedef enum
00253 {
00254 NDI_BAD_TRANSFORM_FIT = 0x01,
00255 NDI_NOT_ENOUGH_MARKERS = 0x02,
00256 NDI_TOOL_FACE_USED = 0x70,
00257 } TXToolInfoType;
00258
00260 typedef enum
00261 {
00262 NDI_MARKER_MISSING = 0,
00263 NDI_MARKER_EXCEEDED_MAX_ANGLE = 1,
00264 NDI_MARKER_EXCEEDED_MAX_ERROR = 2,
00265 NDI_MARKER_USED = 3,
00266 } TXMarkerInfoType;
00267
00269 typedef enum
00270 {
00271 NDI_BLANK = 'B',
00272 NDI_FLASH = 'F',
00273 NDI_SOLID = 'S',
00274 } LEDStateType;
00275
00277 typedef enum
00278 {
00279 NDI_GPIO_OFF = 'O',
00280 NDI_GPIO_SOLID = 'S',
00281 NDI_GPIO_PULSE = 'P',
00282 NDI_GPIO_NO_CHANGE = 'N',
00283 } PSOUTStateType;
00284
00286 typedef enum
00287 {
00288 NDI_BASIC = 0x0001,
00289 NDI_TESTING = 0x0002,
00290 NDI_PART_NUMBER = 0x0004,
00291 NDI_ACCESSORIES = 0x0008,
00292 NDI_MARKER_TYPE = 0x0010,
00293 NDI_PORT_LOCATION = 0x0020,
00294 NDI_GPIO_STATUS = 0x0040,
00295 } PHINFModeType;
00296
00298 typedef enum
00299 {
00300 NDI_TOOL_IN_PORT_SWITCH = 0x01,
00301 NDI_SWITCH_1 = 0x02,
00302 NDI_SWITCH_2 = 0x04,
00303 NDI_SWITCH_3 = 0x08,
00304 NDI_TOOL_TRACKING_LED = 0x10,
00305 NDI_LED_1 = 0x20,
00306 NDI_LED_2 = 0x40,
00307 NDI_LED_3 = 0x80,
00308 } PHINFAccessoriesType;
00309
00311 typedef enum
00312 {
00313 NDI_950NM = 0x00,
00314 NDI_850NM = 0x01,
00315 NDI_NDI_ACTIVE = 0x08,
00316 NDI_NDI_CERAMIC = 0x10,
00317 NDI_PASSIVE_ANY = 0x20,
00318 NDI_PASSIVE_SPHERE = 0x28,
00319 NDI_PASSIVE_DISC = 0x30,
00320 } PHINFMarkerType;
00321
00323 typedef enum
00324 {
00325 NDI_TYPE_REFERENCE = 0x01,
00326 NDI_TYPE_POINTER = 0x02,
00327 NDI_TYPE_BUTTON = 0x03,
00328 NDI_TYPE_SOFTWARE = 0x04,
00329 NDI_TYPE_MICROSCOPE = 0x05,
00330 NDI_TYPE_CALIBRATION = 0x07,
00331 NDI_TYPE_DOCK = 0x08,
00332 NDI_TYPE_ISOLATION = 0x09,
00333 NDI_TYPE_CARM = 0x0A,
00334 NDI_TYPE_CATHETER = 0x0B,
00335 } PHINFToolInfoType;
00336
00338 typedef enum
00339 {
00340 NDI_CONTROL = 0x0001,
00341 NDI_SENSORS = 0x0002,
00342 NDI_TIU = 0x0004,
00343 } SSTATModeType;
00344
00346 typedef enum
00347 {
00348 NDI_EPROM_CODE_CHECKSUM = 0x01,
00349 NDI_EPROM_SYSTEM_CHECKSUM = 0x02,
00350 } SSTATControlType;
00351
00353 typedef enum
00354 {
00355 NDI_LEFT_ROM_CHECKSUM = 0x01,
00356 NDI_LEFT_SYNC_TYPE_1 = 0x02,
00357 NDI_LEFT_SYNC_TYPE_2 = 0x04,
00358 NDI_RIGHT_ROM_CHECKSUM = 0x10,
00359 NDI_RIGHT_SYNC_TYPE_1 = 0x20,
00360 NDI_RIGHT_SYNC_TYPE_2 = 0x40,
00361 } STATSensorType;
00362
00364 typedef enum
00365 {
00366 NDI_ROM_CHECKSUM = 0x01,
00367 NDI_OPERATING_VOLTAGES = 0x02,
00368 NDI_MARKER_SEQUENCING = 0x04,
00369 NDI_SYNC = 0x08,
00370 NDI_COOLING_FAN = 0x10,
00371 NDI_INTERNAL_ERROR = 0x20,
00372 } STATTIUType;
00373
00375 typedef enum
00376 {
00377 NDI_DETECTED = 0x0001,
00378 NDI_SOURCES = 0x0002,
00379 } IRCHKModeType;
00380
00382 typedef enum
00383 {
00384 NDI_LEFT = 0,
00385 NDI_RIGHT = 1,
00386 } IRCHKSensorType;
00387
00389 typedef enum
00390 {
00391 NDI_FEATURE_SUMMARY = 0x00,
00392 NDI_ACTIVE_PORTS = 0x01,
00393 NDI_PASSIVE_PORTS = 0x02,
00394 NDI_VOLUMES = 0x03,
00395 NDI_TIP_PORTS = 0x04,
00396 } SFLISTModeType;
00397
00399 typedef enum
00400 {
00401 NDI_SUPPORTS_ACTIVE = 0x0001,
00402 NDI_SUPPORTS_PASSIVE = 0x0002,
00403 NDI_SUPPORTS_VOLUMES = 0x0004,
00404 NDI_SUPPORTS_SENSING = 0x0008,
00405 } SFLISTSummaryType;
00406
00408 typedef SerialCommunication CommunicationType;
00409
00411 void SetCommunication(CommunicationType* communication);
00412
00414 CommunicationType* GetCommunication();
00415
00444 const char *Command(const char *command);
00445
00450 void BEEP(int n) {this->Command("BEEP:%i", n % 10); }
00451
00463 void COMM(COMMBaudType baud, COMMDataType dps, COMMHandshakeType handshake) {
00464 this->Command("COMM:%d%03d%d", baud, dps, handshake); }
00465
00469 void DSTART() {
00470 this->Command("DSTART:"); }
00471
00473 void DSTOP() {
00474 this->Command("DSTOP:"); }
00475
00478 void INIT() {
00479 this->Command("INIT:"); }
00480
00490 void IRCHK(int mode) {
00491 this->Command("IRCHK:%04X", mode); }
00492
00495 void IRINIT() {
00496 this->Command("IRINIT:"); }
00497
00505 void LED(int ph, int led, LEDStateType state) {
00506 this->Command("LED:%02X%d%c", ph, led, state); }
00507
00510 void PDIS(int ph) {
00511 this->Command("PDIS:%02X", ph); }
00512
00517 void PENA(int ph, int mode) {
00518 this->Command("PENA:%02X%c", ph, mode); }
00519
00522 void PHF(int ph) {
00523 this->Command("PHF:%02X", ph); }
00524
00547 void PHINF(int ph, int mode) {
00548 this->Command("PHINF:%02X%04X", ph, mode); }
00549
00561 void PHRQ(const char* num, const char* sys, const char* tool,
00562 const char* port, const char* chan)
00563 {
00564 this->Command("PHRQ:%-8.8s%1.1s%1.1s%2.2s%2.2s", num, sys, tool,
00565 port, chan);
00566 }
00567
00583 void PHSR(PHSRModeType mode) {
00584 this->Command("PHSR:%02X", mode); }
00585
00589 void PINIT(int ph) {
00590 this->Command("PINIT:%02X", ph); }
00591
00600 void PSOUT(int ph, int a, int b, int c) {
00601 this->Command("PSOUT:%02X%c%c%c", ph, a, b, c); };
00602
00607 void PVCLR(int port) {
00608 this->Command("PVCLR:%c", port); }
00609
00616 void PVWR(int ph, int a, const char* x) {
00617 this->Command("PVWR:%02X%04X%.128s", ph, a, x); }
00618
00621 void RESET() {
00622 this->Command(0); }
00623
00640 void SFLIST(SFLISTModeType mode) {
00641 this->Command("SFLIST:%02X", mode); }
00642
00657 void SSTAT(int mode) {
00658 this->Command("SSTAT:%04X", mode); }
00659
00661 void TSTART() {
00662 this->Command("TSTART:"); }
00663
00665 void TSTOP() {
00666 this->Command("TSTOP:"); }
00667
00689 void TX(int mode) {
00690 this->Command("TX:%04X", mode); }
00691
00715 void BX(int mode) {
00716 this->Command("BX:%04X", mode); }
00717
00727 void VER(VERModeType n) {
00728 this->Command("VER:%d", n); }
00729
00733 int GetError() const;
00734
00738 int GetPHRQHandle() const;
00739
00742 int GetPHSRNumberOfHandles() const;
00743
00752 int GetPHSRHandle(int i) const;
00753
00770 int GetPHSRInformation(int i) const;
00771
00785 int GetPHINFPortStatus() const;
00786
00805 int GetPHINFToolInfo(char information[32]) const;
00806
00824 int GetPHINFToolType() const;
00825
00833 unsigned int GetPHINFCurrentTest() const;
00834
00849 int GetPHINFPartNumber(char part[21]) const;
00850
00868 int GetPHINFAccessories() const;
00869
00887 int GetPHINFMarkerType() const;
00888
00902 int GetPHINFPortLocation(char location[15]) const;
00903
00910 int GetPHINFGPIOStatus() const;
00911
00931 int GetTXTransform(int ph, double transform[8]) const;
00932
00949 int GetTXPortStatus(int ph) const;
00950
00959 unsigned int GetTXFrame(int ph) const;
00960
00972 int GetTXToolInfo(int ph) const;
00973
00987 int GetTXMarkerInfo(int ph, int marker) const;
00988
01004 int GetTXSingleStray(int ph, double coord[3]) const;
01005
01012 int GetTXNumberOfPassiveStrays() const;
01013
01029 int GetTXPassiveStray(int i, double coord[3]) const;
01030
01045 int GetTXPassiveStrayOutOfVolume(int i) const;
01046
01062 int GetTXSystemStatus() const;
01063
01084 int GetBXTransform(int ph, double transform[8]) const;
01085
01107 int GetBXPortStatus(int ph) const;
01108
01117 unsigned int GetBXFrame(int ph) const;
01118
01130 int GetBXToolInfo(int ph) const;
01131
01145 int GetBXMarkerInfo(int ph, int marker) const;
01146
01162 int GetBXSingleStray(int ph, double coord[3]) const;
01163
01169 int GetBXNumberOfPassiveStrays() const;
01170
01185 int GetBXPassiveStray(int i, double coord[3]) const;
01186
01201 int GetBXPassiveStrayOutOfVolume(int i) const;
01202
01218 int GetBXSystemStatus() const;
01219
01228 int GetSSTATControl() const;
01229
01242 int GetSSTATSensors() const;
01243
01256 int GetSSTATTIU() const;
01257
01259 const char *GetVERText() const;
01260
01267 int GetIRCHKDetected() const;
01268
01278 int GetIRCHKNumberOfSources(int side) const;
01279
01295 int GetIRCHKSourceXY(int side, int i, double xy[2]) const;
01296
01300 static const char* ErrorString(int errnum);
01301
01312 static char* HexEncode(char* cp, const void* data, int n);
01313
01321 static void* HexDecode(void* data, const char* cp, int n);
01322
01323 protected:
01325 NDICommandInterpreter();
01326
01328 virtual ~NDICommandInterpreter();
01329
01331 virtual void PrintSelf( std::ostream& os, itk::Indent indent ) const;
01332
01333 private:
01334
01336 itkStaticConstMacro( NDI_MAX_HANDLES, int, 24 );
01337
01339 CommunicationType::Pointer m_Communication;
01340
01342 char *m_CommandReply;
01343 char *m_SerialCommand;
01344 char *m_SerialReply;
01345
01347 bool m_Tracking;
01348
01350 int m_ErrorCode;
01351
01353 char m_SSTATControl[2];
01354 char m_SSTATSensor[2];
01355 char m_SSTATTIU[2];
01356
01358 int m_IRCHKDetected;
01359 char m_IRCHKSources[128];
01360
01362 char m_PHRQReply[2];
01363
01365 char m_PHSRReply[1284];
01366
01368 int m_PHINFOccupied;
01369 char m_PHINFBasic[34];
01370 char m_PHINFTesting[8];
01371 char m_PHINFPartNumber[20];
01372 char m_PHINFAccessories[2];
01373 char m_PHINFMarkerType[2];
01374 char m_PHINFPortLocation[14];
01375 char m_PHINFGPIOStatus[2];
01376
01378 int m_TXNumberOfHandles;
01379 unsigned char m_TXHandles[NDI_MAX_HANDLES];
01380 unsigned char m_TXHandleStatus[NDI_MAX_HANDLES];
01381 char m_TXSystemStatus[4];
01382
01384 char m_TXTransforms[NDI_MAX_HANDLES][52];
01385 char m_TXPortStatus[NDI_MAX_HANDLES][8];
01386 char m_TXFrame[NDI_MAX_HANDLES][8];
01387
01389 char m_TXInformation[NDI_MAX_HANDLES][12];
01390
01392 char m_TXSingleStray[NDI_MAX_HANDLES][24];
01393
01395 int m_TXNumberOfPassiveStrays;
01396 char m_TXPassiveStrayOutOfVolume[14];
01397 char m_TXPassiveStray[1052];
01398
01400 int m_BXNumberOfHandles;
01401 unsigned char m_BXHandles[NDI_MAX_HANDLES];
01402 unsigned char m_BXHandleStatus[NDI_MAX_HANDLES];
01403 unsigned short m_BXSystemStatus;
01404
01406 float m_BXTransforms[NDI_MAX_HANDLES][8];
01407 unsigned int m_BXPortStatus[NDI_MAX_HANDLES];
01408 unsigned int m_BXFrame[NDI_MAX_HANDLES];
01409
01411 unsigned char m_BXToolInformation[NDI_MAX_HANDLES];
01412 unsigned char m_BXMarkerInformation[NDI_MAX_HANDLES][20];
01413
01415 unsigned char m_BXSingleStrayStatus[NDI_MAX_HANDLES];
01416 float m_BXSingleStrayPosition[NDI_MAX_HANDLES][3];
01417
01419 int m_BXNumberOfPassiveStrays;
01420 unsigned char m_BXPassiveStrayOutOfVolume[7];
01421 float m_BXPassiveStrayPosition[50][3];
01422
01424 char m_VERText[1028];
01425
01427 const char* Command(const char* format, int a);
01429 const char* Command(const char* format, int a, int b);
01431 const char* Command(const char* format, int a, int b, int c);
01433 const char* Command(const char* format, int a, int b, int c, int d);
01435 const char* Command(const char* format, int a, int b, const char* c);
01437 const char* Command(const char* format, const char* a, const char* b,
01438 const char* c, const char* d, const char* e);
01439
01441 int WriteSerialBreak();
01442
01446 int WriteCommand(unsigned int *nc);
01447
01453 int ReadBinaryReply(unsigned int offset);
01454
01460 int ReadAsciiReply(unsigned int offset);
01461
01463 int SetErrorCode(int errnum);
01464
01468 void HelperForCOMM(const char* cp, const char* crp);
01469 void HelperForPHINF(const char* cp, const char* crp);
01470 void HelperForPHRQ(const char* cp, const char* crp);
01471 void HelperForPHSR(const char* cp, const char* crp);
01472 void HelperForTX(const char* cp, const char* crp);
01473 void HelperForBX(const char* cp, const char* crp);
01474 void HelperForIRCHK(const char* cp, const char* crp);
01475 void HelperForSSTAT(const char* cp, const char* crp);
01476 void HelperForVER(const char* cp, const char* crp);
01477
01480 int TXIndexFromPortHandle(int ph, int *ip) const;
01481
01487 static unsigned int HexadecimalStringToUnsignedInt(const char* cp, int n);
01488
01494 static int HexadecimalStringToInt(const char* cp, int n);
01495
01501 static int StringToInt(const char* cp, int n);
01502
01509 static int SignedStringToInt(const char* cp, int n);
01510
01513 int BXIndexFromPortHandle(int ph, int *ip) const;
01514
01517 static unsigned char BinaryToUnsignedChar(const char *cp) {
01518 const unsigned char *ucp = (const unsigned char *)cp;
01519 return ucp[0]; }
01520
01523 static unsigned short BinaryToUnsignedShort(const char *cp) {
01524 const unsigned char *ucp = (const unsigned char *)cp;
01525 return ((ucp[1] << 8) | ucp[0]); }
01526
01528 static unsigned int BinaryToUnsignedInt(const char *cp) {
01529 const unsigned char *ucp = (const unsigned char *)cp;
01530 return (((ucp[3] << 8) | ucp[2]) << 16) | ((ucp[1] << 8) | ucp[0]); }
01531
01533 static float BinaryToFloat(const char *cp) {
01534 const unsigned char *ucp = (const unsigned char *)cp;
01535 union { float f; unsigned int i; } u;
01536 u.i = (((ucp[3] << 8) | ucp[2]) << 16) | ((ucp[1] << 8) | ucp[0]);
01537 return u.f; }
01538
01539
01540 NDICommandInterpreter(const Self&);
01541 void operator=(const Self&);
01542 };
01543
01544 }
01545 #endif