IGSTK
|
00001 /*========================================================================= 00002 00003 Program: Image Guided Surgery Software Toolkit 00004 Module: $RCSfile: igstkNDICommandInterpreter.h,v $ 00005 Language: C++ 00006 Date: $Date: 2008-02-11 01:41:51 $ 00007 Version: $Revision: 1.16 $ 00008 00009 Copyright (c) ISC Insight Software Consortium. All rights reserved. 00010 See IGSTKCopyright.txt or http://www.igstk.org/copyright.htm for details. 00011 00012 This software is distributed WITHOUT ANY WARRANTY; without even 00013 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 00014 PURPOSE. See the above copyright notices for more information. 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 /* error codes generated by the host, rather than by the device */ 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, /* 8 data bits, no parity, 1 stop bit */ 00152 NDI_8N2 = 1, /* etc. */ 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; /* reply without CRC and <CR> */ 01343 char *m_SerialCommand; /* raw text to send to device */ 01344 char *m_SerialReply; /* raw reply from device */ 01345 01347 bool m_Tracking; /* 'is tracking' flag */ 01348 01350 int m_ErrorCode; /* error code (zero if no error) */ 01351 01353 char m_SSTATControl[2]; /* control processor status */ 01354 char m_SSTATSensor[2]; /* sensor processors status */ 01355 char m_SSTATTIU[2]; /* tiu processor status */ 01356 01358 int m_IRCHKDetected; /* irchk detected infrared */ 01359 char m_IRCHKSources[128]; /* coordinates of sources */ 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&); //purposely not implemented 01541 void operator=(const Self&); //purposely not implemented 01542 }; 01543 01544 } 01545 #endif