001/**
002 * Copyright (c) 2014-2015 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 hardware versions of the XBee devices.
020 */
021public enum HardwareVersionEnum {
022
023        // Enumeration entries
024        X09_009(0x01, "X09-009"),
025        X09_019(0x02, "X09-019"),
026        XH9_009(0x03, "XH9-009"),
027        XH9_019(0x04, "XH9-019"),
028        X24_009(0x05, "X24-009"),
029        X24_019(0x06, "X24-019"),
030        X09_001(0x07, "X09-001"),
031        XH9_001(0x08, "XH9-001"),
032        X08_004(0x09, "X08-004"),
033        XC09_009(0x0A, "XC09-009"),
034        XC09_038(0x0B, "XC09-038"),
035        X24_038(0x0C, "X24-038"),
036        X09_009_TX(0x0D, "X09-009-TX"),
037        X09_019_TX(0x0E, "X09-019-TX"),
038        XH9_009_TX(0x0F, "XH9-009-TX"),
039        XH9_019_TX(0x10, "XH9-019-TX"),
040        X09_001_TX(0x11, "X09-001-TX"),
041        XH9_001_TX(0x12, "XH9-001-TX"),
042        XT09B_XXX(0x13, "XT09B-xxx (Attenuator version)"),
043        XT09_XXX(0x14, "XT09-xxx"),
044        XC08_009(0x15, "XC08-009"),
045        XC08_038(0x16, "XC08-038"),
046        XB24_AXX_XX(0x17, "XB24-Axx-xx"),
047        XBP24_AXX_XX(0x18, "XBP24-Axx-xx"),
048        XB24_BXIX_XXX(0x19, "XB24-BxIx-xxx and XB24-Z7xx-xxx"),
049        XBP24_BXIX_XXX(0x1A, "XBP24-BxIx-xxx and XBP24-Z7xx-xxx"),
050        XBP09_DXIX_XXX(0x1B, "XBP09-DxIx-xxx Digi Mesh"),
051        XBP09_XCXX_XXX(0x1C, "XBP09-XCxx-xxx: S3 XSC Compatibility"),
052        XBP08_DXXX_XXX(0x1D, "XBP08-Dxx-xxx 868MHz"),
053        XBP24B(0x1E, "XBP24B: Low cost ZB PRO and PLUS S2B"),
054        XB24_WF(0x1F, "XB24-WF: XBee 802.11 (Redpine module)"),
055        AMBER_MBUS(0x20, "??????: M-Bus module made by Amber"),
056        XBP24C(0x21, "XBP24C: XBee PRO SMT Ember 357 S2C PRO"),
057        XB24C(0x22, "XB24C: XBee SMT Ember 357 S2C"),
058        XSC_GEN3(0x23, "XSC_GEN3: XBP9 XSC 24 dBm"),
059        SRD_868_GEN3(0x24, "SDR_868_GEN3: XB8 12 dBm"),
060        ABANDONATED(0x25, "Abandonated"),
061        SMT_900LP(0x26, "900LP (SMT): 900LP on 'S8 HW'"),
062        WIFI_ATHEROS(0x27, "WiFi Atheros (TH-DIP) XB2S-WF"),
063        SMT_WIFI_ATHEROS(0x28, "WiFi Atheros (SMT) XB2B-WF"),
064        SMT_475LP(0x29, "475LP (SMT): Beta 475MHz"),
065        XBEE_CELL_TH(0x2A, "XBee-Cell (TH): XBee Cellular"),
066        XLR_MODULE(0x2B, "XLR Module"),
067        XB900HP_NZ(0x2C, "XB900HP (New Zealand): XB9 NZ HW/SW"),
068        XBP24C_TH_DIP(0x2D, "XBP24C (TH-DIP): XBee PRO DIP"),
069        XB24C_TH_DIP(0x2E, "XB24C (TH-DIP): XBee DIP"),
070        XLR_BASEBOARD(0x2F, "XLR Baseboard");
071        
072        // Variables
073        private final int value;
074        
075        private final String description;
076        
077        private final static HashMap<Integer, HardwareVersionEnum> lookupTable = new HashMap<Integer, HardwareVersionEnum>();
078        
079        static {
080                for (HardwareVersionEnum hv:values())
081                        lookupTable.put(hv.getValue(), hv);
082        }
083        
084        /**
085         * Class constructor. Instantiates a new {@code HardwareVersion} 
086         * enumeration entry with the given parameters.
087         * 
088         * @param value Hardware version numeric value 
089         * @param description Hardware version description.
090         */
091        private HardwareVersionEnum(int value, String description) {
092                this.value = value;
093                this.description = description;
094        }
095        
096        /**
097         * Returns the Hardware version numeric value.
098         * 
099         * @return The hardware version numeric value.
100         */
101        public int getValue() {
102                return value;
103        }
104        
105        /**
106         * Returns the hardware version description.
107         * 
108         * @return The hardware version description.
109         */
110        public String getDescription() {
111                return description;
112        }
113        
114        /**
115         * Returns the {@code HardwareVersionEnum} associated to the given 
116         * numeric value.
117         * 
118         * @param value Numeric value of the {@code HardwareVersionEnum} to 
119         *              retrieve.
120         * 
121         * @return The {@code HardwareVersionEnum} associated to the given numeric 
122         *         value, {@code null} if there is not any 
123         *         {@code HardwareVersionEnum} associated to that value.
124         */
125        public static HardwareVersionEnum get(int value) {
126                return lookupTable.get(value);
127        }
128        
129        /*
130         * (non-Javadoc)
131         * @see java.lang.Enum#toString()
132         */
133        @Override
134        public String toString() {
135                return HexUtils.byteToHexString((byte)value) + ": " + description;
136        }
137}