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.models;
013
014import java.util.HashMap;
015
016import com.digi.xbee.api.utils.HexUtils;
017
018/**
019 * Enumerates the different power levels. The power level indicates the output 
020 * power value of a radio when transmitting data.
021 */
022public enum PowerLevel {
023
024        // Enumeration entries
025        LEVEL_LOWEST(0x00, "Lowest"),
026        LEVEL_LOW(0x01, "Low"),
027        LEVEL_MEDIUM(0x02, "Medium"),
028        LEVEL_HIGH(0x03, "High"),
029        LEVEL_HIGHEST(0x04, "Highest"),
030        LEVEL_UNKNOWN(0xFF, "Unknown");
031        
032        // Variables
033        private final int value;
034        
035        private final String description;
036        
037        private final static HashMap<Integer, PowerLevel> lookupTable = new HashMap<Integer, PowerLevel>();
038        
039        static {
040                for (PowerLevel powerLevel:values())
041                        lookupTable.put(powerLevel.getValue(), powerLevel);
042        }
043        
044        /**
045         * Class constructor. Instantiates a new {@code PowerLevel} enumeration
046         * entry with the given parameters.
047         * 
048         * @param value Power level value 
049         * @param description Power level description.
050         */
051        private PowerLevel(int value, String description) {
052                this.value = value;
053                this.description = description;
054        }
055        
056        /**
057         * Returns the power level value.
058         * 
059         * @return The power level value.
060         */
061        public int getValue() {
062                return value;
063        }
064        
065        /**
066         * Returns the power level description.
067         * 
068         * @return The power level description.
069         */
070        public String getDescription() {
071                return description;
072        }
073        
074        /**
075         * Returns the {@code PowerLevel} entry associated to the given value.
076         * 
077         * @param value Value of the {@code PowerLevel} to retrieve.
078         * 
079         * @return The {@code PowerLevel} entry associated to the given value, 
080         *         {@code #LEVEL_UNKNOWN} if the value could not be found in the 
081         *         list.
082         */
083        public static PowerLevel get(int value) {
084                PowerLevel powerLevel = lookupTable.get(value);
085                if (powerLevel != null)
086                        return powerLevel;
087                return LEVEL_UNKNOWN;
088        }
089        
090        /*
091         * (non-Javadoc)
092         * @see java.lang.Enum#toString()
093         */
094        @Override
095        public String toString() {
096                return HexUtils.byteToHexString((byte)value) + ": " + description;
097        }
098}