001/** 002 * Copyright (c) 2014 Digi International Inc., 003 * All rights not expressly granted are reserved. 004 * 005 * This Source Code Form is subject to the terms of the Mozilla Public 006 * License, v. 2.0. If a copy of the MPL was not distributed with this file, 007 * You can obtain one at http://mozilla.org/MPL/2.0/. 008 * 009 * Digi International Inc. 11001 Bren Road East, Minnetonka, MN 55343 010 * ======================================================================= 011 */ 012package com.digi.xbee.api.io; 013 014import java.util.HashMap; 015 016/** 017 * Enumerates the different Input/Output modes that an IO line can be 018 * configured with. 019 * 020 * @see IOLine 021 */ 022public enum IOMode { 023 024 // Enumeration types. 025 DISABLED(0, "Disabled"), 026 SPECIAL_FUNCTIONALITY(1, "Firmware special functionality"), 027 PWM(2, "PWM output"), 028 ADC(2, "Analog to Digital Converter"), 029 DIGITAL_IN(3, "Digital input"), 030 DIGITAL_OUT_LOW(4, "Digital output, Low"), 031 DIGITAL_OUT_HIGH(5, "Digital output, High"); 032 033 // Variables 034 private final static HashMap <Integer, IOMode> lookupTable = new HashMap<Integer, IOMode>(); 035 036 private final int id; 037 038 private final String name; 039 040 static { 041 for (IOMode ioMode:values()) 042 lookupTable.put(ioMode.getID(), ioMode); 043 } 044 045 /** 046 * Class constructor. Instantiates a new {@code IOMode} enumeration entry 047 * with the given parameters. 048 * 049 * @param id IO mode ID. 050 * @param name IO mode name. 051 */ 052 private IOMode(int id, String name) { 053 this.id = id; 054 this.name = name; 055 } 056 057 /** 058 * Returns the IO mode ID. 059 * 060 * @return IO mode ID. 061 */ 062 public int getID() { 063 return id; 064 } 065 066 /** 067 * Returns the IO mode name. 068 * 069 * @return IO mode name. 070 */ 071 public String getName() { 072 return name; 073 } 074 075 /** 076 * Returns the {@code IOMode} associated to the provided mode ID. 077 * 078 * @param modeID The ID of the {@code IOMode} to retrieve. 079 * 080 * @return The {@code IOMode} associated to the provided mode ID. 081 */ 082 public static IOMode getIOMode(int modeID) { 083 return getIOMode(modeID, null); 084 } 085 086 /** 087 * Returns the {@code IOMode} corresponding to the provided mode ID and 088 * IO line. 089 * 090 * @param modeID The ID of the {@code IOMode} to retrieve. 091 * @param ioLine The IO line to retrieve its {@code IOMode}. 092 * 093 * @return The {@code IOMode} corresponding to the provided mode ID and 094 * IO line. 095 * 096 * @see IOLine 097 */ 098 public static IOMode getIOMode(int modeID, IOLine ioLine) { 099 // If IO line is provided and IO value is 2, check PWM capability. 100 if (modeID == ADC.getID()) { 101 if (ioLine != null && ioLine.hasPWMCapability()) 102 return PWM; 103 return ADC; 104 } 105 // Look for the value in the table. 106 if (lookupTable.containsKey(modeID)) 107 return lookupTable.get(modeID); 108 return null; 109 } 110 111 /* 112 * (non-Javadoc) 113 * @see java.lang.Enum#toString() 114 */ 115 @Override 116 public String toString() { 117 return name; 118 } 119}