001 /** 002 \file NiRioStatus.h 003 \author Dave Madden <david.madden@ni.com> 004 \date 02/21/2006 005 006 � Copyright 2006-2007. National Instruments. All rights reserved. 007 */ 008 009 package com.ni.rio; 010 011 import com.sun.cldc.jna.ptr.IntByReference; 012 013 /** 014 * The NiRioStatus class encapsulates a cRIO status value. 015 * 016 * The NiRioStatus class also defines the various status constants used by the cRIO. 017 * 018 * @todo Why are we storing the status value in an IntByReference? We should be able to use a simple int field. 019 */ 020 public class NiRioStatus 021 { 022 public static final class FatalStatusException extends IllegalStateException 023 { 024 NiRioStatus m_status; 025 public FatalStatusException(NiRioStatus status, String message) 026 { 027 super(message); 028 m_status = status; 029 } 030 public NiRioStatus getStatus() 031 { 032 return m_status; 033 } 034 } 035 036 public NiRioStatus() 037 { 038 status = new IntByReference(kRioStatusSuccess); 039 } 040 041 private IntByReference status; 042 043 public int getPointer() 044 { 045 return status.getPointer().address().toUWord().toPrimitive(); 046 } 047 048 // Valid RIO ranges: [-63199, -63000], [63000,63199] 049 public static final int kRioStatusOffset = -63000; 050 051 /// The operation was successful 052 public static final int kRioStatusSuccess = 0; 053 054 // Errors 055 056 // ------------------------------------------------------------------------- 057 // FIFO Error messages... 058 // ------------------------------------------------------------------------- 059 060 /// DMA to the FPGA target is not supported by the controller associated with the FPGA (e.g. cRIO-9002/4). 061 public static final int kRioStatusDmaOutputNotSupported = kRioStatusOffset - 1; 062 063 // ------------------------------------------------------------------------- 064 // IO Manager 065 // ------------------------------------------------------------------------- 066 067 /// <internal>The parameters do not describe a valid address range</internal> 068 public static final int kRIOStatusIOInvalidAddressRange = kRioStatusOffset - 10; 069 070 /// <internal>The buffer supplied for the I/O operation in invalid</internal> 071 public static final int kRIOStatusIOInvalidBuffer = kRioStatusOffset - 11; 072 073 // ------------------------------------------------------------------------- 074 // Device Errors 075 // ------------------------------------------------------------------------- 076 077 /// The operation could not complete because another session has reconfigured the device. 078 /// 079 /// DEPRECATED in 230 080 public static final int kRIOStatusDeviceReconfigured = kRioStatusOffset - 30; 081 082 /// <internal>The operation is not allowed because another session is accessing the device. Close all other sessions and retry.</internal> 083 public static final int kRIOStatusDeviceInvariant = kRioStatusOffset - 31; 084 085 /// <internal>Download is not allowed because another session is accessing the device. Close all other sessions and retry</internal>. 086 public static final int kRIOStatusDeviceInvalidStateTransition = kRioStatusOffset - 32; 087 088 /// The operation was prohibited by the device access settings on the remote system. 089 public static final int kRIOStatusAccessDenied = kRioStatusOffset - 33; 090 091 092 // ------------------------------------------------------------------------- 093 // RPC/Network Errors 094 // ------------------------------------------------------------------------- 095 096 /// An RPC connection could not be made to the remote device. The device may be offline, disconnected, or NI-RIO software may be missing or configured incorrectly 097 public static final int kRIOStatusRPCConnectionError = kRioStatusOffset - 40; 098 099 /// The RPC server had an error. Close any open sessions and reconnect. The current operation cannot complete. 100 public static final int kRIOStatusRPCServerError = kRioStatusOffset - 41; 101 102 /// A fault on the network caused the operation to fail. 103 public static final int kRIOStatusNetworkFault = kRioStatusOffset - 42; 104 105 /// The current session is invalid. The target may have reset or been 106 /// rebooted. The current operation cannot complete. Try again. 107 public static final int kRIOStatusRioRpcSessionError = kRioStatusOffset - 43; 108 109 // ------------------------------------------------------------------------- 110 // Session Errors 111 // ------------------------------------------------------------------------- 112 /// The specified trigger line is already reserved 113 public static final int kRIOStatusTriggerReserved = kRioStatusOffset - 50; 114 115 /// The specified trigger line is not reserved by the current session. 116 public static final int kRIOStatusTriggerNotReserved = kRioStatusOffset - 51; 117 118 /// Trigger lines are not supported or enabled. For PXI chasses, identify the controller and chassis via MAX. 119 public static final int kRIOStatusTriggerNotSupported = kRioStatusOffset - 52; 120 121 122 // ------------------------------------------------------------------------- 123 // Event Errors 124 // ------------------------------------------------------------------------- 125 126 /// <internal>The specified event type is invalid.</internal> 127 public static final int kRIOStatusEventInvalid = kRioStatusOffset - 70; 128 129 /// The specified RIO event has already been enabled for this session. 130 public static final int kRIOStatusEventEnabled = kRioStatusOffset - 71; 131 132 /// The specified RIO event has not been enabled for this session. 133 public static final int kRIOStatusEventNotEnabled = kRioStatusOffset - 72; 134 135 /// The specified RIO event did not complete within the specified time limit. 136 public static final int kRIOStatusEventTimedOut = kRioStatusOffset - 73; 137 138 /// <internal>The specified operation on a the specified Rio event is invalid at this time</internal>. 139 public static final int kRIOStatusEventInvalidOperation = kRioStatusOffset - 74; 140 141 // ------------------------------------------------------------------------- 142 // API Errors 143 // ------------------------------------------------------------------------- 144 145 /// Allocated buffer is too small 146 public static final int kRIOStatusBufferInvalidSize = kRioStatusOffset - 80; 147 148 /// Caller did not allocate a buffer 149 public static final int kRIOStatusBufferNotAllocated = kRioStatusOffset - 81; 150 151 /// The fifo is reservered in another session 152 public static final int kRIOStatusFifoReserved = kRioStatusOffset - 82; 153 154 // ------------------------------------------------------------------------- 155 // PAL Replacements 156 // ------------------------------------------------------------------------- 157 158 /// A hardware failure has occurred. The operation could not be completed as specified. 159 public static final int kRIOStatusHardwareFault = kRioStatusOffset - 150; 160 161 /// <internal>The resource was already initialized and cannot be initialized again. The operation could not be completed as specified.</internal> 162 public static final int kRIOStatusResourceInitialized = kRioStatusOffset - 151; 163 164 /// <internal>The requested resource was not found </internal>. 165 public static final int kRIOStatusResourceNotFound = kRioStatusOffset - 152; 166 167 // ------------------------------------------------------------------------- 168 // Configuration 169 // ------------------------------------------------------------------------- 170 171 /// An invalid alias was specified. RIO aliases may only contain alphanumerics, '-', and '_'. 172 public static final int kRIOStatusInvalidAliasName = kRioStatusOffset - 180; 173 174 /// The supplied alias was not found. 175 public static final int kRIOStatusAliasNotFound = kRioStatusOffset - 181; 176 177 /// An invalid device access setting was specified. RIO device access patterns may only contain alphanumerics, '-', '_', '.', and '*'. 178 public static final int kRIOStatusInvalidDeviceAccess = kRioStatusOffset - 182; 179 180 /// An invalid port was specified. The RIO Server port must be between 0 and 65535, where 0 indicates a dynamically assigned port. Port 3580 is reserved and cannot be used. 181 public static final int kRIOStatusInvalidPort = kRioStatusOffset - 183; 182 183 // ------------------------------------------------------------------------- 184 // Misc. 185 // ------------------------------------------------------------------------- 186 187 /// This platform does not support connections to remote targets. 188 public static final int kRIOStatusRemoteTarget = kRioStatusOffset - 187; 189 190 /// The operation is no longer supported 191 public static final int kRIOStatusDeprecatedFunction = kRioStatusOffset - 188; 192 193 /// The supplied search pattern isn't understood 194 public static final int kRIOStatusInvalidPattern = kRioStatusOffset - 189; 195 196 /// <internal>The specified device control code is not recognized.</internal> 197 public static final int kRIOStatusBadDeviceControlCode = kRioStatusOffset - 190; 198 199 /// The supplied resource name is not valid. Use MAX to find the proper resource name. 200 public static final int kRIOStatusInvalidResourceName = kRioStatusOffset - 192; 201 202 /// The requested feature is not supported in the current version of the driver software on either the host or the target. 203 public static final int kRIOStatusFeatureNotSupported = kRioStatusOffset - 193; 204 205 /// The version of the target software is incompatible. Upgrade target software to get full functionality. (For use by host interface). 206 public static final int kRIOStatusVersionMismatch = kRioStatusOffset - 194; 207 208 /// A handle for device communication is invalid. The device connection has been lost. 209 public static final int kRIOStatusInvalidHandle = kRioStatusOffset - 195; 210 211 /// An invalid attribute has been specified. 212 public static final int kRIOStatusInvalidAttribute = kRioStatusOffset - 196; 213 214 /// An invalid attribute value has been specified. 215 public static final int kRIOStatusInvalidAttributeValue = kRioStatusOffset - 197; 216 217 /// The system has run out of resource handles. Try closing some sessions. 218 public static final int kRIOStatusOutOfHandles = kRioStatusOffset - 198; 219 220 /// <internal>The server does not recognize the command</internal> 221 public static final int kRIOStatusInvalidFunction = kRioStatusOffset - 199; 222 223 // ------------------------------------------------------------------------- 224 // APAL translation 225 // #define nNIAPALS100_tStatus_kOffset -52000 226 // ------------------------------------------------------------------------- 227 228 /// nNIAPALS100_tStatus_kMemoryFull. The specified number of bytes could not be allocated 229 public static final int kRIOStatusMemoryFull = -52000; 230 231 /// nNIAPALS100_tStatus_kPageLockFailed. The memory could not be page locked 232 public static final int kRIOStatusPageLockFailed = -52001; 233 234 /// nNIAPALS100_tStatus_kSoftwareFault. An unexpected software error occurred. 235 public static final int kRIOStatusSoftwareFault = -52003; 236 237 /// nNIAPALS100_tStatus_kDynamicCastFailed. The dynamic cast operation failed. 238 public static final int kRIOStatusDynamicCastFailed = -52004; 239 240 /// nNIAPALS100_tStatus_kInvalidParameter. The parameter recieved by the function is not valid. 241 public static final int kRIOStatusInvalidParameter = -52005; 242 243 /// nNIAPALS100_tStatus_kOperationTimedOut. The requested operation did not complete in time. 244 public static final int kRIOStatusOperationTimedOut = -52007; 245 246 /// nNIAPALS100_tStatus_kOSFault. An unexpected operationg system error occurred. 247 public static final int kRIOStatusOSFault = -52008; 248 249 /// nNIAPALS100_tStatus_kResourceMarkedForDelete. The requested resource has been marked for deletion and is rejecting new requests. 250 public static final int kRIOStatusMarkedForDelete = -52009; 251 252 /// nNIAPALS100_tStatus_kResourceNotInitialized. The requested resource must be initializaed before use. 253 public static final int kRIOStatusResourceNotInitialized = -52010; 254 255 /// nNIAPALS100_tStatus_kOperationPending. The operation has begun and will complete asynchronously. 256 public static final int kRIOStatusOperationPending = -52011; 257 258 /// nNIAPALS100_tStatus_kEndOfData. There is no more data available to read or no more space available in which to write. 259 public static final int kRIOStatusEndOfData = -52012; 260 261 /// nNIAPALS100_tStatus_kObjectNameCollision. The name or handle requested has already been reserved by another client 262 public static final int kRIOStatusObjectNameCollision = -52013; 263 264 /// nNIAPALS100_tStatus_kSyncronizationObjectAbandoned. The synchronization object was abandoned by the previous holder 265 public static final int kRIOStatusSyncObjectAbandoned = -52014; 266 267 /// nNIAPALS100_tStatus_kSyncronizationAcquireFailed. The acquisition of the synchronization object failed 268 public static final int kRIOStatusSyncAcquireFailed = -52015; 269 270 /// nNIAPALS100_tStatus_kThreadAlreadyStarted. The thread was running when you attempted to start it (redundant state change). 271 public static final int kRIOStatusThreadAlreadyStarted = -52016; 272 273 /// nNIAPALS100_tStatus_kInvalidStateTransition. The operation you requested is redundant or invalid when the object is in this state. 274 public static final int kRIOStatusInvalidStateTransition = -52017; 275 276 // ------------------------------------------------------------------------- 277 // Traditional PAL translation 278 // #define nNIAPALS100_tStatus_kOffset -50000 279 // ------------------------------------------------------------------------- 280 /// An attribute whether explicit or implicit is not relevant or is not relevant given the current system state. The operation could not be completed as specified. 281 public static final int kRIOStatusIrrelevantAttribute = -50001; 282 283 /// A selector - usually of an enumerated type - is inappropriate or out of range. The operation could not be completed as specified. 284 public static final int kRIOStatusBadSelector = -50003; 285 286 /// The specified software component is not available. The component was not loaded. 287 public static final int kRIOStatusComponentNotFound = -50251; 288 289 /// The specified device is not present or is deactivated. The operation could not be completed as specified. 290 public static final int kRIOStatusDeviceNotFound = -50300; 291 292 293 // ------------------------------------------------------------------------- 294 // LabVIEW errors 295 // ------------------------------------------------------------------------- 296 297 /// Generic file I/O error. 298 public static final int kRIOStatusFileError = -6; 299 300 // 301 // Helper functions 302 // 303 304 public boolean isFatal() 305 { 306 return status.getValue() < 0; 307 } 308 309 public boolean isNotFatal() 310 { 311 return status.getValue() >= 0; 312 } 313 314 /** 315 * Update the status code to the most serious of the existing status code or the new status code. If the 316 * resulting code is "fatal" throw NiRioStatus.FatalStatusException. 317 * 318 * @param newStatusCode 319 */ 320 public void setStatus(int newStatusCode) 321 { 322 if (status.getValue() >= 0 && (status.getValue() == 0 || newStatusCode < 0)) 323 { 324 status.setValue(newStatusCode); 325 } 326 assertNonfatal(); 327 } 328 329 public void setStatus(NiRioStatus newStatus) 330 { 331 setStatus(newStatus.getStatusCode()); 332 } 333 334 public int getStatusCode() 335 { 336 return status.getValue(); 337 } 338 339 public void assertNonfatal() throws IllegalStateException 340 { 341 if (isFatal()) 342 { 343 throw new NiRioStatus.FatalStatusException(this, "Fatal status code detected: " + Integer.toString(getStatusCode())); 344 } 345 } 346 }