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.communication; 009 010 /** 011 * 012 * @author dtjones 013 */ 014 public class SemaphoreException extends Exception { 015 public static final int M_semLib = 22 << 16; 016 public static final int M_objLib = 61 << 16; 017 018 public final static int S_objLib_OBJ_ID_ERROR = (M_objLib | 1); 019 public final static int S_objLib_OBJ_UNAVAILABLE = (M_objLib | 2); 020 public final static int S_objLib_OBJ_DELETED = (M_objLib | 3); 021 public final static int S_objLib_OBJ_TIMEOUT = (M_objLib | 4); 022 023 public final static int S_semLib_INVALID_STATE = (M_semLib | 101); 024 public final static int S_semLib_INVALID_OPTION = (M_semLib | 102); 025 public final static int S_semLib_INVALID_QUEUE_TYPE = (M_semLib | 103); 026 public final static int S_semLib_INVALID_OPERATION = (M_semLib | 104); 027 public final static int S_semLib_INVALID_INITIAL_COUNT = (M_semLib | 105); 028 public final static int S_semLib_COUNT_OVERFLOW = (M_semLib | 106); 029 030 /** 031 * Generate a new SemaphoreException from the given status code. 032 * @param status The status code describing the error. 033 */ 034 public SemaphoreException (int status) { 035 super(lookUpCode(status)); 036 } 037 038 private static String lookUpCode(int status) { 039 switch (status) { 040 case S_objLib_OBJ_ID_ERROR: 041 return "OBJ_ID_ERROR"; 042 043 case S_objLib_OBJ_UNAVAILABLE: 044 return "OBJ_UNAVAILABLE"; 045 046 case S_objLib_OBJ_DELETED: 047 return "OBJ_DELETED"; 048 049 case S_objLib_OBJ_TIMEOUT: 050 return "OBJ_TIMEOUT"; 051 052 case S_semLib_INVALID_STATE: 053 return "Invalid semaphore state"; 054 case S_semLib_INVALID_OPTION: 055 return "Invalid semaphore option"; 056 case S_semLib_INVALID_QUEUE_TYPE: 057 return "Invalid semaphore queue type"; 058 case S_semLib_INVALID_OPERATION: 059 return "Invalid semaphore operation"; 060 case S_semLib_INVALID_INITIAL_COUNT: 061 return "Invalid semaphore initial count"; 062 case S_semLib_COUNT_OVERFLOW: 063 return "Semaphore count overflow"; 064 default: 065 return "Unrecognized status code"; 066 } 067 } 068 }