001 /*----------------------------------------------------------------------------*/ 002 /* Copyright (c) FIRST 2008-2012. All Rights Reserved. */ 003 /* Open Source Software - may be modified and shared by FRC teams. The code */ 004 /* must be accompanied by the FIRST BSD license file in the root directory of */ 005 /* the project. */ 006 /*----------------------------------------------------------------------------*/ 007 008 package edu.wpi.first.wpilibj.can; 009 010 import com.ni.rio.NiRioStatus; 011 import edu.wpi.first.wpilibj.util.UncleanStatusException; 012 013 /** 014 * Exception indicating that the Jaguar CAN Driver layer refused to send a 015 * restricted message ID to the CAN bus. 016 */ 017 public class CANExceptionFactory { 018 // FRC Error codes 019 static final int ERR_JaguarCANDriver_InvalidBuffer = -44086; 020 static final int ERR_JaguarCANDriver_TimedOut = -44087; 021 static final int ERR_JaguarCANDriver_NotAllowed = -44088; 022 static final int ERR_JaguarCANDriver_NotInitialized = -44089; 023 024 public static void checkStatus(int status, int messageID) throws 025 CANInvalidBufferException, CANTimeoutException, 026 CANMessageNotAllowedException, CANNotInitializedException, 027 UncleanStatusException 028 { 029 switch (status) { 030 case NiRioStatus.kRioStatusSuccess: 031 // Everything is ok... don't throw. 032 return; 033 case ERR_JaguarCANDriver_InvalidBuffer: 034 case NiRioStatus.kRIOStatusBufferInvalidSize: 035 throw new CANInvalidBufferException(); 036 case ERR_JaguarCANDriver_TimedOut: 037 case NiRioStatus.kRIOStatusOperationTimedOut: 038 throw new CANTimeoutException(); 039 case ERR_JaguarCANDriver_NotAllowed: 040 case NiRioStatus.kRIOStatusFeatureNotSupported: 041 throw new CANMessageNotAllowedException("MessageID = " + Integer.toString(messageID)); 042 case ERR_JaguarCANDriver_NotInitialized: 043 case NiRioStatus.kRIOStatusResourceNotInitialized: 044 throw new CANNotInitializedException(); 045 default: 046 throw new UncleanStatusException("Fatal status code detected: " + Integer.toString(status)); 047 } 048 } 049 }