From 2cbe251e1b726c2fc5347dffd25cd4f9102012ed Mon Sep 17 00:00:00 2001 From: Tat-Chee Wan (USM) Date: Tue, 1 Mar 2011 12:12:49 +0800 Subject: added fantom module for python --- FantomModule/fantom/tStatus.h | 458 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 458 insertions(+) create mode 100644 FantomModule/fantom/tStatus.h (limited to 'FantomModule/fantom/tStatus.h') diff --git a/FantomModule/fantom/tStatus.h b/FantomModule/fantom/tStatus.h new file mode 100644 index 0000000..7622c63 --- /dev/null +++ b/FantomModule/fantom/tStatus.h @@ -0,0 +1,458 @@ +/*! + \file tStatus.h + \brief Status code class +*/ +/* + © Copyright 2005-2006, + National Instruments Corporation. + All rights reserved. + + File: tStatus.h + Originated: 10 March 2005 +*/ + +#ifndef ___fantom_tStatus_h___ +#define ___fantom_tStatus_h___ + +// includes ... + +#ifndef ___fantom_platform_h___ + #include "platform.h" +#endif + +#include + + +// defines... + +#define nFANTOM_mLocation __FILE__, __LINE__ + +#define nFANTOM_ForceToWarning(s) (((s) >= 0 ) ? (s) : -(s)) +#define nFANTOM_ForceToFatal(s) (((s) <= 0 ) ? (s) : -(s)) + +/*! + \brief The namespace for Fantom 1.0. +*/ +namespace nFANTOM100 +{ + // forward declarations... + + // typedefs... + + // classes... + const ViInt32 kStatusOffset = -142000; // 0xFFFDD550 + const ViStatus kStatusSuccess = VI_SUCCESS; + + /*! + \brief Enumeration of Fantom-specific status codes. NI-VISA status codes may also be + returned. These are documented in the NI-VISA Programmer Reference Manual which is + available from . + */ + enum tFANTOMStatus + { + kStatusFirst = (kStatusOffset + 0), + + //! Error: Bluetooth pairing operation failed. + //! Warning: You have already paired with that Bluetooth device. + kStatusPairingFailed = (kStatusOffset + -5), // 0x54B + + //! Error: Bluetooth search failed. + kStatusBluetoothSearchFailed = (kStatusOffset + -6), // 0x54A + + //! Error: System library not found. + kStatusSystemLibraryNotFound = (kStatusOffset + -7), // 0x549 + + //! Error: Bluetooth unpairing operation failed. + kStatusUnpairingFailed = (kStatusOffset + -8), // 0x548 + + //! Error: Invalid filename specified. + kStatusInvalidFilename = (kStatusOffset + -9), // 0x547 + + //! Error: Invalid iterator dereference. (No object to get.) + kStatusInvalidIteratorDereference = (kStatusOffset + -10), // 0x546 + + //! Error: Resource locking operation failed. + kStatusLockOperationFailed = (kStatusOffset + -11), // 0x545 + + //! Error: Could not determine the requested size. + kStatusSizeUnknown = (kStatusOffset + -12), // 0x544 + + //! Error: Cannot open two objects at once. + kStatusDuplicateOpen = (kStatusOffset + -13), // 0x543 + + //! Error: File is empty. + //! Warning: The requested file is empty. + kStatusEmptyFile = (kStatusOffset + -14), // 0x542 + + //! Error: Firmware download failed. + kStatusFirmwareDownloadFailed = (kStatusOffset + -15), // 0x541 + + //! Error: Could not locate virtual serial port. + kStatusPortNotFound = (kStatusOffset + -16), // 0x540 + + //! Error: No more items found. + kStatusNoMoreItemsFound = (kStatusOffset + -17), // 0x53F + + //! Error: Too many unconfigured devices. + kStatusTooManyUnconfiguredDevices = (kStatusOffset + -18), // 0x53E + + //! Error: Command mismatch in firmware response. + kStatusCommandMismatch = (kStatusOffset + -19), // 0x53D + + //! Error: Illegal operation. + kStatusIllegalOperation = (kStatusOffset + -20), // 0x53C + + //! Error: Could not update local Bluetooth cache with new name. + //! Warning: Could not update local Bluetooth cache with new name. + kStatusBluetoothCacheUpdateFailed = (kStatusOffset + -21), // 0x53B + + //! Error: Selected device is not an NXT. + kStatusNonNXTDeviceSelected = (kStatusOffset + -22), // 0x53A + + //! Error: Communication error. Retry the operation. + kStatusRetryConnection = (kStatusOffset + -23), // 0x539 + + //! Error: Could not connect to NXT. Turn the NXT off and then back on before continuing. + kStatusPowerCycleNXT = (kStatusOffset + -24), // 0x538 + + //! Error: This feature is not yet implemented. + kStatusFeatureNotImplemented = (kStatusOffset + -99), // 0x4ED + + //! Error: Firmware reported an illegal handle. + kStatusFWIllegalHandle = (kStatusOffset + -189), // 0x493 + + //! Error: Firmware reported an illegal file name. + kStatusFWIllegalFileName = (kStatusOffset + -190), // 0x492 + + //! Error: Firmware reported an out of bounds reference. + kStatusFWOutOfBounds = (kStatusOffset + -191), // 0x491 + + //! Error: Firmware could not find module. + kStatusFWModuleNotFound = (kStatusOffset + -192), // 0x490 + + //! Error: Firmware reported that the file already exists. + kStatusFWFileExists = (kStatusOffset + -193), // 0x48F + + //! Error: Firmware reported that the file is full. + kStatusFWFileIsFull = (kStatusOffset + -194), // 0x48E + + //! Error: Firmware reported the append operation is not possible. + kStatusFWAppendNotPossible = (kStatusOffset + -195), // 0x48D + + //! Error: Firmware has no write buffers available. + kStatusFWNoWriteBuffers = (kStatusOffset + -196), // 0x48C + + //! Error: Firmware reported that file is busy. + kStatusFWFileIsBusy = (kStatusOffset + -197), // 0x48B + + //! Error: Firmware reported the undefined error. + kStatusFWUndefinedError = (kStatusOffset + -198), // 0x48A + + //! Error: Firmware reported that no linear space is available. + kStatusFWNoLinearSpace = (kStatusOffset + -199), // 0x489 + + //! Error: Firmware reported that handle has already been closed. + kStatusFWHandleAlreadyClosed = (kStatusOffset + -200), // 0x488 + + //! Error: Firmware could not find file. + kStatusFWFileNotFound = (kStatusOffset + -201), // 0x487 + + //! Error: Firmware reported that the requested file is not linear. + kStatusFWNotLinearFile = (kStatusOffset + -202), // 0x486 + + //! Error: Firmware reached the end of the file. + kStatusFWEndOfFile = (kStatusOffset + -203), // 0x485 + + //! Error: Firmware expected an end of file. + kStatusFWEndOfFileExpected = (kStatusOffset + -204), // 0x484 + + //! Error: Firmware cannot handle more files. + kStatusFWNoMoreFiles = (kStatusOffset + -205), // 0x483 + + //! Error: Firmware reported the NXT is out of space. + kStatusFWNoSpace = (kStatusOffset + -206), // 0x482 + + //! Error: Firmware could not create a handle. + kStatusFWNoMoreHandles = (kStatusOffset + -207), // 0x481 + + //! Error: Firmware reported an unknown error code. + kStatusFWUnknownErrorCode = (kStatusOffset + -208), // 0x480 + + kStatusLast = (kStatusOffset + -999) + }; + + /*! + \brief Class that contains a status code and the file name and line number where that + status code was generated. + */ + class tStatus + { + public: + + // methods + + //! constructor + /*! + Creates a tStatus object intialized to success. + + \post The status code is set to VI_SUCCESS. + */ + inline tStatus( void ) : + _code( VI_SUCCESS ), + _lineNumber( 0 ) + { + _fileName[0] = '\0'; + } + + + //! copy constructor + /*! + Copies the code, line number, and file name from the specified tStatus object. + + \param status The status object to copy. + */ + inline tStatus( const tStatus& status ) : + _code( status._code ), + _lineNumber( status._lineNumber ) + { + ::strcpy( _fileName, "" ); + ::strncat( _fileName, status._fileName, kMaxFileNameLength - 1 ); + } + + + //! constructor with code, filename, and line number + /*! + Creates a tStatus object initialized to the specified code, file name, and line number. + Note that the nFANTOM_mLocation macro can be used to pass the fileName and lineNumber + parameters. + + \param code A status code. + \param fileName The name of the file in which the status code was generated. + \param lineNumber The line number in the file at which the status code was generated. + */ + inline tStatus( ViStatus code, const char* fileName, ViUInt32 lineNumber ) : + _code( code ), + _lineNumber( lineNumber ) + { + ::strcpy( _fileName, "" ); + ::strncat( _fileName, reinterpret_cast( fileName ), kMaxFileNameLength - 1 ); + } + + + //! destructor + inline ~tStatus() + { + } + + + //! Returns the status code for this status object. + /*! + \return The status code for this status object. + */ + inline ViStatus getCode( void ) const + { + return _code; + } + + + //! Returns the file name in which the status code, for this status object, was generated. + /*! + \return The file name in which the status code, for this status object, was generated. + */ + inline const char* getFileName( void ) const + { + return _fileName; + } + + + //! Returns the line number at which the status code, for this status object, was + // generated. + /*! + \return The line number at which the status code, for this status object, was + generated. + */ + inline ViUInt32 getLineNumber( void ) const + { + return _lineNumber; + } + + + //! Sets the status code, file name, and line number for this status object, if + // appropriate. + /*! + Stores the specified status code, file name, and line number in this status object if + this status object contains a successful status code or if this status object + contains a warning status code and the specified status code is fatal. A fatal + status code is denoted by a negative value. A successful status code is denoted + by VI_SUCCESS. + + \param code A status code. + \param fileName The name of the file in which the status code was generated. + \param lineNumber The line number in the file at which the status code was generated. + */ + inline void setCode( ViStatus code, const char* fileName, ViUInt32 lineNumber ) + { + if(( isSuccess() && code != VI_SUCCESS ) || ( isNotFatal() && code < VI_SUCCESS )) + { + _code = code; + _lineNumber = lineNumber; + ::strcpy( _fileName, "" ); + ::strncat( _fileName, fileName, kMaxFileNameLength - 1 ); + } + } + + + //! Assigns the specified status object to this status object, if appropriate. + /*! + Stores the status code, file name, and line number of the specified status object in + this status object if this status object contains a successful status code or if + this status object contains a warning status code and the status code of the + speciied status object is fatal. A fatal status code is denoted by a negative + value. A successful status code is denoted by VI_SUCCESS. + + \param status The status object to assign. + */ + inline void assign( const tStatus& status ) + { + setCode( status.getCode(), status.getFileName(), status.getLineNumber()); + } + + + //! Clears the status code for this status object. + /*! + \post status The code is set to VI_SUCCESS. + */ + inline void clear( void ) + { + _code = VI_SUCCESS; + _lineNumber = 0; + _fileName[0] = '\0'; + } + + + //! Returns true if this status object contains a status code that is fatal. + /*! + A status code with a negative value is considered fatal. + + \return true if this status object contains a status code that is + fatal; false otherwise. + */ + inline bool isFatal( void ) const + { + return ( _code < VI_SUCCESS ); + } + + //! Returns true if this status object contains a status code that is not fatal. + /*! + Any status code with a non-negative (including zero) value is considered non-fatal. + + \return true if this status object contains a non-fatal status code; + false otherwise. + */ + inline bool isNotFatal( void ) const + { + return !isFatal(); + } + + + //! Returns true if this status object contains a status code that is a warning. + /*! + A status code with a non-zero, positive value is considered a warning. + + \return true if this status object contains a status code that is a warning; false + otherwise. + */ + inline bool isWarning( void ) const + { + return ( _code > VI_SUCCESS ); + } + + + //! Returns true if this status object contains the status code for success. + /*! + A value of VI_SUCCESS represents success. + + \return true if this status object contains the status code for success; false + otherwise. + */ + inline bool isSuccess( void ) const + { + return ( _code == VI_SUCCESS ); + } + + private: + + // declared private to prevent assignment + tStatus& operator=(const tStatus& rhs); + + enum + { + kMaxFileNameLength = 101 + }; + + ViStatus _code; + ViChar _fileName[ kMaxFileNameLength ]; + ViUInt32 _lineNumber; + }; + + + // declarations for globally-scoped globals... + inline ViStatus convertStatus( ViUInt8 firmwareStatus ) + { + ViStatus status; + switch (firmwareStatus) + { + // each of these cases corresponds to a unique status code returned by the firmware + case 0x00 : status = kStatusSuccess; + break; + case 0x81 : status = kStatusFWNoMoreHandles; // No more available handles + break; + case 0x82 : status = kStatusFWNoSpace; // No space + break; + case 0x83 : status = kStatusFWNoMoreFiles; // No more files + break; + case 0x84 : status = kStatusFWEndOfFileExpected; // End of file expected + break; + case 0x85 : status = kStatusFWEndOfFile; // End of file reached + break; + case 0x86 : status = kStatusFWNotLinearFile; // Not a linear file + break; + case 0x87 : status = kStatusFWFileNotFound; // File not found + break; + case 0x88 : status = kStatusFWHandleAlreadyClosed; // Handle is already closed + break; + case 0x89 : status = kStatusFWNoLinearSpace; // No linear space available + break; + case 0x8A : status = kStatusFWUndefinedError; // Undefined error + break; + case 0x8B : status = kStatusFWFileIsBusy; // File is busy + break; + case 0x8C : status = kStatusFWNoWriteBuffers; // No write buffers available + break; + case 0x8D : status = kStatusFWAppendNotPossible; // Append not possible + break; + case 0x8E : status = kStatusFWFileIsFull; // File is full + break; + case 0x8F : status = kStatusFWFileExists; // File already exists + break; + case 0x90 : status = kStatusFWModuleNotFound; // Module not found + break; + case 0x91 : status = kStatusFWOutOfBounds; // Out of module I/O map boundary + break; + case 0x92 : status = kStatusFWIllegalFileName; // Illegal file name + break; + case 0x93 : status = kStatusFWIllegalHandle; // Illegal handle + break; + default : + status = kStatusFWUnknownErrorCode; + } + return status; + } + + // prototypes... + +} // namespace nFANTOM100 + +// inline functions and function macros... + +#endif // ___fantom_tStatus_h___ -- cgit v1.2.3