    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 IO lines that can be found in the XBee devices.
    018 *
    019 * <p>Depending on the hardware and firmware of the device, the number of lines
    020 * that can be used as well as their functionality may vary. Refer to the
    021 * product manual to learn more about the IO lines of your XBee device.</p>
    022 */
    023public enum IOLine {
    024
    025        // Enumeration types.
    026        DIO0_AD0("DIO0/AD0", 0, "D0", null),
    027        DIO1_AD1("DIO1/AD1", 1, "D1", null),
    028        DIO2_AD2("DIO2/AD2", 2, "D2", null),
    029        DIO3_AD3("DIO3/AD3", 3, "D3", null),
    030        DIO4_AD4("DIO4/AD4", 4, "D4", null),
    031        DIO5_AD5("DIO5/AD5", 5, "D5", null),
    032        DIO6("DIO6", 6, "D6", null),
    033        DIO7("DIO7", 7, "D7", null),
    034        DIO8("DIO8", 8, "D8", null),
    035        DIO9("DIO9", 9, "D9", null),
    036        DIO10_PWM0("DIO10/PWM0", 10, "P0", "M0"),
    037        DIO11_PWM1("DIO11/PWM1", 11, "P1", "M1"),
    038        DIO12("DIO12", 12, "P2", null),
    039        DIO13("DIO13", 13, "P3", null),
    040        DIO14("DIO14", 14, "P4", null),
    041        DIO15("DIO15", 15, "P5", null),
    042        DIO16("DIO16", 16, "P6", null),
    043        DIO17("DIO17", 17, "P7", null),
    044        DIO18("DIO18", 18, "P8", null),
    045        DIO19("DIO19", 19, "P9", null);
    046
    047        // Variables.
    048        private final static HashMap <Integer, IOLine> lookupTableIndex = new HashMap<Integer, IOLine>();
    049
    050        private final String name;
    051        private final String atCommand;
    052        private final String atPWMCommand;
    053
    054        private final int index;
    055
    056        static {
    057                for (IOLine dio:values())
    058                        lookupTableIndex.put(dio.getIndex(), dio);
    059        }
    060
    061        /**
    062         * Class constructor. Instantiates a new {@code IOLine} enumeration entry
    063         * with the given parameters.
    064         *
    065         * @param name The name of the IO line.
    066         * @param index The index associated to the IO line.
    067         * @param atCommand The AT command corresponding to the IO line.
    068         * @param atPWMCommand The PWM AT command corresponding to the IO line
    069         *                     (if any).
    070         */
    071        private IOLine(String name, int index, String atCommand, String atPWMCommand) {
    072                this.name = name;
    073                this.index = index;
    074                this.atCommand = atCommand;
    075                this.atPWMCommand = atPWMCommand;
    076        }
    077
    078        /**
    079         * Returns the name of the IO line.
    080         *
    081         * @return The name of the IO line.
    082         */
    083        public String getName() {
    084                return name;
    085        }
    086
    087        /**
    088         * Returns the index of the IO line.
    089         *
    090         * @return The index of the IO line.
    091         */
    092        public int getIndex() {
    093                return index;
    094        }
    095
    096        /**
    097         * Returns the configuration AT command associated to the IO line.
    098         *
    099         * @return The configuration AT command associated to the IO line.
    100         */
    101        public String getConfigurationATCommand() {
    102                return atCommand;
    103        }
    104
    105        /**
    106         * Returns whether or not the IO line has PWM capability.
    107         *
    108         * @return {@code true} if the provided IO line has PWM, {@code false}
    109         *         otherwise.
    110         */
    111        public boolean hasPWMCapability() {
    112                return atPWMCommand != null;
    113        }
    114
    115        /**
    116         * Returns the PWM AT command associated to the IO line.
    117         *
    118         * @return The PWM AT command associated to the IO line.
    119         */
    120        public String getPWMDutyCycleATCommand() {
    121                return atPWMCommand;
    122        }
    123
    124        /**
    125         * Returns the {@code IOLine} associated to the given index.
    126         *
    127         * @param index The index corresponding to the {@code IOLine} to retrieve.
    128         *
    129         * @return The {@code IOLine} associated to the given index.
    130         */
    131        public static IOLine getDIO(int index) {
    132                if (lookupTableIndex.containsKey(index))
    133                        return lookupTableIndex.get(index);
    134                return null;
    135        }
    136
    137        /*
    138         * (non-Javadoc)
    139         * @see java.lang.Enum#toString()
    140         */
    141        @Override
    142        public String toString() {
    143                return name;
    144        }
    145}