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.packet;
013
014import java.util.HashMap;
015
016import com.digi.xbee.api.utils.ByteUtils;
017import com.digi.xbee.api.utils.HexUtils;
018
019/**
020 * This enumeration lists all the available frame types used in any XBee 
021 * protocol.
022 */
023public enum APIFrameType {
024
025        // Enumeration elements.
026        TX_64 (0x00, "TX (Transmit) Request 64-bit address"),
027        TX_16 (0x01, "TX (Transmit) Request 16-bit address"),
028        AT_COMMAND (0x08, "AT Command"),
029        AT_COMMAND_QUEUE (0x09, "AT Command Queue"),
030        TRANSMIT_REQUEST (0x10, "Transmit Request"),
031        REMOTE_AT_COMMAND_REQUEST (0x17, "Remote AT Command Request"),
032        RX_64 (0x80, "RX (Receive) Packet 64-bit Address"),
033        RX_16 (0x81, "RX (Receive) Packet 16-bit Address"),
034        RX_IO_64 (0x82, "IO Data Sample RX 64-bit Address Indicator"),
035        RX_IO_16 (0x83, "IO Data Sample RX 16-bit Address Indicator"),
036        AT_COMMAND_RESPONSE (0x88, "AT Command Response"),
037        TX_STATUS (0x89, "TX (Transmit) Status"),
038        MODEM_STATUS (0x8A, "Modem Status"),
039        TRANSMIT_STATUS (0x8B, "Transmit Status"),
040        RECEIVE_PACKET (0x90, "Receive Packet"),
041        IO_DATA_SAMPLE_RX_INDICATOR (0x92, "IO Data Sample RX Indicator"),
042        REMOTE_AT_COMMAND_RESPONSE (0x97, "Remote Command Response"),
043        GENERIC (0xFF, "Generic");
044        
045        // Variables.
046        private final int idValue;
047        
048        private final String name;
049        
050        private static final HashMap<Integer, APIFrameType> lookupTable = new HashMap<Integer, APIFrameType>();
051        
052        static {
053                for (APIFrameType type:values())
054                        lookupTable.put(type.getValue(), type);
055        }
056        
057        /**
058         * Class constructor. Instantiates a new {@code APIFrameType} object with
059         * the given value and name.
060         * 
061         * @param idValue Frame type value.
062         * @param name Frame type name.
063         */
064        APIFrameType(int idValue, String name) {
065                this.idValue = idValue;
066                this.name = name;
067        }
068        
069        /**
070         * Returns the {@code APIFrameType} associated with the given ID value.
071         * 
072         * @param value ID value to retrieve {@code APIFrameType}.
073         * 
074         * @return The {@code APIFrameType} for the given ID value, {@code null} if 
075         *         it does not exist.
076         */
077        public static APIFrameType get(int value) {
078                APIFrameType type = lookupTable.get(value);
079                return type; 
080        }
081        
082        /**
083         * Returns the API frame type value.
084         * 
085         * @return The API frame type value.
086         */
087        public int getValue() {
088                return idValue;
089        }
090        
091        /**
092         * Returns the API frame type name.
093         * 
094         * @return API frame type name.
095         */
096        public String getName() {
097                return name;
098        }
099        
100        /*
101         * (non-Javadoc)
102         * @see java.lang.Enum#toString()
103         */
104        @Override
105        public String toString() {
106                return "(" + HexUtils.byteArrayToHexString(ByteUtils.intToByteArray(idValue)) + ") " + name;
107        }
108}