/*----------------------------------------------------------------------------*/
/* Copyright (c) FIRST 2008-2012. All Rights Reserved. */
/* Open Source Software - may be modified and shared by FRC teams. The code */
/* must be accompanied by the FIRST BSD license file in the root directory of */
/* the project. */
/*----------------------------------------------------------------------------*/
package edu.wpi.first.wpilibj.can;
@SuppressWarnings("javadoc")
public class CANExceptionFactory {
// From NIRioStatus
public static final int kRioStatusOffset = -63000;
public static final int kRioStatusSuccess = 0;
public static final int kRIOStatusBufferInvalidSize = kRioStatusOffset - 80;
public static final int kRIOStatusOperationTimedOut = -52007;
public static final int kRIOStatusFeatureNotSupported = kRioStatusOffset - 193;
public static final int kRIOStatusResourceNotInitialized = -52010;
// FRC Error codes
static final int ERR_CANSessionMux_InvalidBuffer = -44086;
static final int ERR_CANSessionMux_MessageNotFound = -44087;
static final int ERR_CANSessionMux_NotAllowed = -44088;
static final int ERR_CANSessionMux_NotInitialized = -44089;
public static void checkStatus(int status, int messageID) {
switch (status) {
case kRioStatusSuccess:
// Everything is ok... don't throw.
break;
case ERR_CANSessionMux_InvalidBuffer:
case kRIOStatusBufferInvalidSize:
throw new RuntimeException("Invalid CAN buffer! Typically, this is due to a buffer being too small to include the needed safety token.");
case ERR_CANSessionMux_MessageNotFound:
case kRIOStatusOperationTimedOut:
throw new CANMessageNotFoundException();
case ERR_CANSessionMux_NotAllowed:
case kRIOStatusFeatureNotSupported:
throw new RuntimeException("CAN Message not allowed: MessageID = " + messageID);
case ERR_CANSessionMux_NotInitialized:
case kRIOStatusResourceNotInitialized:
throw new RuntimeException("CAN not initialized! This is equivalent to a CANNotInitializedException.");
default:
throw new RuntimeException("Fatal CAN status code detected: " + status);
}
}
}