aboutsummaryrefslogtreecommitdiff
path: root/AT91SAM7S256/armdebug/FantomModule/fantom/tStatus.h
diff options
context:
space:
mode:
Diffstat (limited to 'AT91SAM7S256/armdebug/FantomModule/fantom/tStatus.h')
-rw-r--r--AT91SAM7S256/armdebug/FantomModule/fantom/tStatus.h458
1 files changed, 458 insertions, 0 deletions
diff --git a/AT91SAM7S256/armdebug/FantomModule/fantom/tStatus.h b/AT91SAM7S256/armdebug/FantomModule/fantom/tStatus.h
new file mode 100644
index 0000000..7622c63
--- /dev/null
+++ b/AT91SAM7S256/armdebug/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 <string.h>
+
+
+// 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 <http://ni.com/>.
+ */
+ 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<const char*>( 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___