00001 00005 /* 00006 © Copyright 2005-2006, 00007 National Instruments Corporation. 00008 All rights reserved. 00009 00010 File: tStatus.h 00011 Originated: 10 March 2005 00012 */ 00013 00014 #ifndef ___fantom_tStatus_h___ 00015 #define ___fantom_tStatus_h___ 00016 00017 // includes ... 00018 00019 #ifndef ___fantom_platform_h___ 00020 #include "platform.h" 00021 #endif 00022 00023 #include <string.h> 00024 00025 00026 // defines... 00027 00028 #define nFANTOM_mLocation __FILE__, __LINE__ 00029 00030 #define nFANTOM_ForceToWarning(s) (((s) >= 0 ) ? (s) : -(s)) 00031 #define nFANTOM_ForceToFatal(s) (((s) <= 0 ) ? (s) : -(s)) 00032 00036 namespace nFANTOM100 00037 { 00038 // forward declarations... 00039 00040 // typedefs... 00041 00042 // classes... 00043 const ViInt32 kStatusOffset = -142000; // 0xFFFDD550 00044 const ViStatus kStatusSuccess = VI_SUCCESS; 00045 00051 enum tFANTOMStatus 00052 { 00053 kStatusFirst = (kStatusOffset + 0), 00054 00057 kStatusPairingFailed = (kStatusOffset + -5), // 0x54B 00058 00060 kStatusBluetoothSearchFailed = (kStatusOffset + -6), // 0x54A 00061 00063 kStatusSystemLibraryNotFound = (kStatusOffset + -7), // 0x549 00064 00066 kStatusUnpairingFailed = (kStatusOffset + -8), // 0x548 00067 00069 kStatusInvalidFilename = (kStatusOffset + -9), // 0x547 00070 00072 kStatusInvalidIteratorDereference = (kStatusOffset + -10), // 0x546 00073 00075 kStatusLockOperationFailed = (kStatusOffset + -11), // 0x545 00076 00078 kStatusSizeUnknown = (kStatusOffset + -12), // 0x544 00079 00081 kStatusDuplicateOpen = (kStatusOffset + -13), // 0x543 00082 00085 kStatusEmptyFile = (kStatusOffset + -14), // 0x542 00086 00088 kStatusFirmwareDownloadFailed = (kStatusOffset + -15), // 0x541 00089 00091 kStatusPortNotFound = (kStatusOffset + -16), // 0x540 00092 00094 kStatusNoMoreItemsFound = (kStatusOffset + -17), // 0x53F 00095 00097 kStatusTooManyUnconfiguredDevices = (kStatusOffset + -18), // 0x53E 00098 00100 kStatusCommandMismatch = (kStatusOffset + -19), // 0x53D 00101 00103 kStatusIllegalOperation = (kStatusOffset + -20), // 0x53C 00104 00107 kStatusBluetoothCacheUpdateFailed = (kStatusOffset + -21), // 0x53B 00108 00110 kStatusNonNXTDeviceSelected = (kStatusOffset + -22), // 0x53A 00111 00113 kStatusRetryConnection = (kStatusOffset + -23), // 0x539 00114 00116 kStatusPowerCycleNXT = (kStatusOffset + -24), // 0x538 00117 00119 kStatusFeatureNotImplemented = (kStatusOffset + -99), // 0x4ED 00120 00122 kStatusFWIllegalHandle = (kStatusOffset + -189), // 0x493 00123 00125 kStatusFWIllegalFileName = (kStatusOffset + -190), // 0x492 00126 00128 kStatusFWOutOfBounds = (kStatusOffset + -191), // 0x491 00129 00131 kStatusFWModuleNotFound = (kStatusOffset + -192), // 0x490 00132 00134 kStatusFWFileExists = (kStatusOffset + -193), // 0x48F 00135 00137 kStatusFWFileIsFull = (kStatusOffset + -194), // 0x48E 00138 00140 kStatusFWAppendNotPossible = (kStatusOffset + -195), // 0x48D 00141 00143 kStatusFWNoWriteBuffers = (kStatusOffset + -196), // 0x48C 00144 00146 kStatusFWFileIsBusy = (kStatusOffset + -197), // 0x48B 00147 00149 kStatusFWUndefinedError = (kStatusOffset + -198), // 0x48A 00150 00152 kStatusFWNoLinearSpace = (kStatusOffset + -199), // 0x489 00153 00155 kStatusFWHandleAlreadyClosed = (kStatusOffset + -200), // 0x488 00156 00158 kStatusFWFileNotFound = (kStatusOffset + -201), // 0x487 00159 00161 kStatusFWNotLinearFile = (kStatusOffset + -202), // 0x486 00162 00164 kStatusFWEndOfFile = (kStatusOffset + -203), // 0x485 00165 00167 kStatusFWEndOfFileExpected = (kStatusOffset + -204), // 0x484 00168 00170 kStatusFWNoMoreFiles = (kStatusOffset + -205), // 0x483 00171 00173 kStatusFWNoSpace = (kStatusOffset + -206), // 0x482 00174 00176 kStatusFWNoMoreHandles = (kStatusOffset + -207), // 0x481 00177 00179 kStatusFWUnknownErrorCode = (kStatusOffset + -208), // 0x480 00180 00181 kStatusLast = (kStatusOffset + -999) 00182 }; 00183 00188 class tStatus 00189 { 00190 public: 00191 00192 // methods 00193 00195 00200 inline tStatus( void ) : 00201 _code( VI_SUCCESS ), 00202 _lineNumber( 0 ) 00203 { 00204 _fileName[0] = '\0'; 00205 } 00206 00207 00209 00214 inline tStatus( const tStatus& status ) : 00215 _code( status._code ), 00216 _lineNumber( status._lineNumber ) 00217 { 00218 ::strcpy( _fileName, "" ); 00219 ::strncat( _fileName, status._fileName, kMaxFileNameLength - 1 ); 00220 } 00221 00222 00224 00233 inline tStatus( ViStatus code, const char* fileName, ViUInt32 lineNumber ) : 00234 _code( code ), 00235 _lineNumber( lineNumber ) 00236 { 00237 ::strcpy( _fileName, "" ); 00238 ::strncat( _fileName, reinterpret_cast<const char*>( fileName ), kMaxFileNameLength - 1 ); 00239 } 00240 00241 00243 inline ~tStatus() 00244 { 00245 } 00246 00247 00249 00252 inline ViStatus getCode( void ) const 00253 { 00254 return _code; 00255 } 00256 00257 00259 00262 inline const char* getFileName( void ) const 00263 { 00264 return _fileName; 00265 } 00266 00267 00269 // generated. 00274 inline ViUInt32 getLineNumber( void ) const 00275 { 00276 return _lineNumber; 00277 } 00278 00279 00281 // appropriate. 00293 inline void setCode( ViStatus code, const char* fileName, ViUInt32 lineNumber ) 00294 { 00295 if(( isSuccess() && code != VI_SUCCESS ) || ( isNotFatal() && code < VI_SUCCESS )) 00296 { 00297 _code = code; 00298 _lineNumber = lineNumber; 00299 ::strcpy( _fileName, "" ); 00300 ::strncat( _fileName, fileName, kMaxFileNameLength - 1 ); 00301 } 00302 } 00303 00304 00306 00315 inline void assign( const tStatus& status ) 00316 { 00317 setCode( status.getCode(), status.getFileName(), status.getLineNumber()); 00318 } 00319 00320 00322 00325 inline void clear( void ) 00326 { 00327 _code = VI_SUCCESS; 00328 _lineNumber = 0; 00329 _fileName[0] = '\0'; 00330 } 00331 00332 00334 00340 inline bool isFatal( void ) const 00341 { 00342 return ( _code < VI_SUCCESS ); 00343 } 00344 00346 00352 inline bool isNotFatal( void ) const 00353 { 00354 return !isFatal(); 00355 } 00356 00357 00359 00365 inline bool isWarning( void ) const 00366 { 00367 return ( _code > VI_SUCCESS ); 00368 } 00369 00370 00372 00378 inline bool isSuccess( void ) const 00379 { 00380 return ( _code == VI_SUCCESS ); 00381 } 00382 00383 private: 00384 00385 // declared private to prevent assignment 00386 tStatus& operator=(const tStatus& rhs); 00387 00388 enum 00389 { 00390 kMaxFileNameLength = 101 00391 }; 00392 00393 ViStatus _code; 00394 ViChar _fileName[ kMaxFileNameLength ]; 00395 ViUInt32 _lineNumber; 00396 }; 00397 00398 00399 // declarations for globally-scoped globals... 00400 inline ViStatus convertStatus( ViUInt8 firmwareStatus ) 00401 { 00402 ViStatus status; 00403 switch (firmwareStatus) 00404 { 00405 // each of these cases corresponds to a unique status code returned by the firmware 00406 case 0x00 : status = kStatusSuccess; 00407 break; 00408 case 0x81 : status = kStatusFWNoMoreHandles; // No more available handles 00409 break; 00410 case 0x82 : status = kStatusFWNoSpace; // No space 00411 break; 00412 case 0x83 : status = kStatusFWNoMoreFiles; // No more files 00413 break; 00414 case 0x84 : status = kStatusFWEndOfFileExpected; // End of file expected 00415 break; 00416 case 0x85 : status = kStatusFWEndOfFile; // End of file reached 00417 break; 00418 case 0x86 : status = kStatusFWNotLinearFile; // Not a linear file 00419 break; 00420 case 0x87 : status = kStatusFWFileNotFound; // File not found 00421 break; 00422 case 0x88 : status = kStatusFWHandleAlreadyClosed; // Handle is already closed 00423 break; 00424 case 0x89 : status = kStatusFWNoLinearSpace; // No linear space available 00425 break; 00426 case 0x8A : status = kStatusFWUndefinedError; // Undefined error 00427 break; 00428 case 0x8B : status = kStatusFWFileIsBusy; // File is busy 00429 break; 00430 case 0x8C : status = kStatusFWNoWriteBuffers; // No write buffers available 00431 break; 00432 case 0x8D : status = kStatusFWAppendNotPossible; // Append not possible 00433 break; 00434 case 0x8E : status = kStatusFWFileIsFull; // File is full 00435 break; 00436 case 0x8F : status = kStatusFWFileExists; // File already exists 00437 break; 00438 case 0x90 : status = kStatusFWModuleNotFound; // Module not found 00439 break; 00440 case 0x91 : status = kStatusFWOutOfBounds; // Out of module I/O map boundary 00441 break; 00442 case 0x92 : status = kStatusFWIllegalFileName; // Illegal file name 00443 break; 00444 case 0x93 : status = kStatusFWIllegalHandle; // Illegal handle 00445 break; 00446 default : 00447 status = kStatusFWUnknownErrorCode; 00448 } 00449 return status; 00450 } 00451 00452 // prototypes... 00453 00454 } // namespace nFANTOM100 00455 00456 // inline functions and function macros... 00457 00458 #endif // ___fantom_tStatus_h___
© Copyright 2005-2006, National Instruments Corporation. All rights reserved.