001/**
002 * Copyright 2017-2019, Digi International Inc.
003 *
004 * This Source Code Form is subject to the terms of the Mozilla Public
005 * License, v. 2.0. If a copy of the MPL was not distributed with this
006 * file, you can obtain one at http://mozilla.org/MPL/2.0/.
007 *
008 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 
009 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 
010 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 
011 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 
012 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 
013 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 
014 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
015 */
016package com.digi.xbee.api.models;
017
018import java.util.HashMap;
019
020/**
021 * Enumerates the different hardware versions of the XBee devices.
022 */
023public enum HardwareVersionEnum {
024
025        // Enumeration entries
026        X09_009(0x01, "X09-009"),
027        X09_019(0x02, "X09-019"),
028        XH9_009(0x03, "XH9-009"),
029        XH9_019(0x04, "XH9-019"),
030        X24_009(0x05, "X24-009"),
031        X24_019(0x06, "X24-019"),
032        X09_001(0x07, "X09-001"),
033        XH9_001(0x08, "XH9-001"),
034        X08_004(0x09, "X08-004"),
035        XC09_009(0x0A, "XC09-009"),
036        XC09_038(0x0B, "XC09-038"),
037        X24_038(0x0C, "X24-038"),
038        X09_009_TX(0x0D, "X09-009-TX"),
039        X09_019_TX(0x0E, "X09-019-TX"),
040        XH9_009_TX(0x0F, "XH9-009-TX"),
041        XH9_019_TX(0x10, "XH9-019-TX"),
042        X09_001_TX(0x11, "X09-001-TX"),
043        XH9_001_TX(0x12, "XH9-001-TX"),
044        XT09B_XXX(0x13, "XT09B-xxx (Attenuator version)"),
045        XT09_XXX(0x14, "XT09-xxx"),
046        XC08_009(0x15, "XC08-009"),
047        XC08_038(0x16, "XC08-038"),
048        XB24_AXX_XX(0x17, "XB24-Axx-xx"),
049        XBP24_AXX_XX(0x18, "XBP24-Axx-xx"),
050        XB24_BXIX_XXX(0x19, "XB24-BxIx-xxx and XB24-Z7xx-xxx"),
051        XBP24_BXIX_XXX(0x1A, "XBP24-BxIx-xxx and XBP24-Z7xx-xxx"),
052        XBP09_DXIX_XXX(0x1B, "XBP09-DxIx-xxx Digi Mesh"),
053        XBP09_XCXX_XXX(0x1C, "XBP09-XCxx-xxx: S3 XSC Compatibility"),
054        XBP08_DXXX_XXX(0x1D, "XBP08-Dxx-xxx 868MHz"),
055        XBP24B(0x1E, "XBP24B: Low cost ZB PRO and PLUS S2B"),
056        XB24_WF(0x1F, "XB24-WF: XBee 802.11 (Redpine module)"),
057        AMBER_MBUS(0x20, "??????: M-Bus module made by Amber"),
058        XBP24C(0x21, "XBP24C: XBee PRO SMT Ember 357 S2C PRO"),
059        XB24C(0x22, "XB24C: XBee SMT Ember 357 S2C"),
060        XSC_GEN3(0x23, "XSC_GEN3: XBP9 XSC 24 dBm"),
061        SRD_868_GEN3(0x24, "SDR_868_GEN3: XB8 12 dBm"),
062        ABANDONATED(0x25, "Abandonated"),
063        SMT_900LP(0x26, "900LP (SMT): 900LP on 'S8 HW'"),
064        WIFI_ATHEROS(0x27, "WiFi Atheros (TH-DIP) XB2S-WF"),
065        SMT_WIFI_ATHEROS(0x28, "WiFi Atheros (SMT) XB2B-WF"),
066        SMT_475LP(0x29, "475LP (SMT): Beta 475MHz"),
067        XBEE_CELL_TH(0x2A, "XBee-Cell (TH): XBee Cellular"),
068        XLR_MODULE(0x2B, "XLR Module"),
069        XB900HP_NZ(0x2C, "XB900HP (New Zealand): XB9 NZ HW/SW"),
070        XBP24C_TH_DIP(0x2D, "XBP24C (TH-DIP): XBee PRO DIP"),
071        XB24C_TH_DIP(0x2E, "XB24C (TH-DIP): XBee DIP"),
072        XLR_BASEBOARD(0x2F, "XLR Baseboard"),
073        XBP24C_S2C_SMT(0x30, "XBee PRO SMT"),
074        SX_PRO(0x31, "SX Pro"),
075        S2D_SMT_PRO(0x32, "XBP24D: S2D SMT PRO"),
076        S2D_SMT_REG(0x33, "XB24D: S2D SMT Reg"),
077        S2D_TH_PRO(0x34, "XBP24D: S2D TH PRO"),
078        S2D_TH_REG(0x35, "XB24D: S2D TH Reg"),
079        SX(0x3E, "SX"),
080        XTR(0x3F, "XTR"),
081        /** 
082         * @deprecated Use {@link #CELLULAR_CAT1_LTE_VERIZON} instead.
083         * @since 1.2.0 */
084        CELLULAR(0x40, "CELLULAR"),
085        /** @since 1.2.1 */
086        CELLULAR_CAT1_LTE_VERIZON(0x40, "XBee Cellular Cat 1 LTE Verizon"),
087        // TODO: Add the since annotation in the next version of the library.
088        XBEE3(0x41, "XBee3"),
089        // TODO: Add the since annotation in the next version of the library.
090        XBEE3_SMT(0x42, "XBee3 SMT"),
091        // TODO: Add the since annotation in the next version of the library.
092        XBEE3_TH(0x43, "XBee3 TH"),
093        /** @since 1.2.1 */
094        CELLULAR_3G(0x44, "XBee Cellular 3G"),
095        // TODO: Add the since annotation in the next version of the library.
096        XB8X(0x45, "XB8X"),
097        /** @since 1.2.1 */
098        CELLULAR_LTE_VERIZON(0x46, "XBee Cellular LTE-M Verizon"),  // Abandoned
099        /** @since 1.2.1 */
100        CELLULAR_LTE_ATT(0x47, "XBee Cellular LTE-M AT&T"),
101        /** @since 1.2.1 */
102        CELLULAR_NBIOT_EUROPE(0x48, "XBee Cellular NBIoT Europe"),  // Never released
103        /** @since 1.3.0 */
104        CELLULAR_3_CAT1_LTE_ATT(0x49, "XBee3 Cellular Cat 1 LTE AT&T"),
105        /** @since 1.3.0 */
106        CELLULAR_3_LTE_M_VERIZON(0x4A, "XBee3 Cellular LTE-M Verizon"),  // Abandoned
107        /** @since 1.3.0 */
108        CELLULAR_3_LTE_M_ATT(0x4B, "XBee3 Cellular LTE-M AT&T (u-blox)"),
109        /** @since 1.3.0 */
110        CELLULAR_3_LTE_M_ATT_TELIT(0x4C, "XBee3 Cellular LTE-M AT&T (Telit)"),  // Never released
111        /** @since 1.3.0 */
112        CELLULAR_3_CAT1_LTE_VERIZON(0x4D, "XBee3 Cellular Cat 1 LTE Verizon");
113        
114        // Variables
115        private final int value;
116        
117        private final String description;
118        
119        private final static HashMap<Integer, HardwareVersionEnum> lookupTable = new HashMap<Integer, HardwareVersionEnum>();
120        
121        static {
122                for (HardwareVersionEnum hv:values())
123                        lookupTable.put(hv.getValue(), hv);
124        }
125        
126        /**
127         * Class constructor. Instantiates a new {@code HardwareVersion} 
128         * enumeration entry with the given parameters.
129         * 
130         * @param value Hardware version numeric value 
131         * @param description Hardware version description.
132         */
133        private HardwareVersionEnum(int value, String description) {
134                this.value = value;
135                this.description = description;
136        }
137        
138        /**
139         * Returns the Hardware version numeric value.
140         * 
141         * @return The hardware version numeric value.
142         */
143        public int getValue() {
144                return value;
145        }
146        
147        /**
148         * Returns the hardware version description.
149         * 
150         * @return The hardware version description.
151         */
152        public String getDescription() {
153                return description;
154        }
155        
156        /**
157         * Returns the {@code HardwareVersionEnum} associated to the given 
158         * numeric value.
159         * 
160         * @param value Numeric value of the {@code HardwareVersionEnum} to 
161         *              retrieve.
162         * 
163         * @return The {@code HardwareVersionEnum} associated to the given numeric 
164         *         value, {@code null} if there is not any 
165         *         {@code HardwareVersionEnum} associated to that value.
166         */
167        public static HardwareVersionEnum get(int value) {
168                return lookupTable.get(value);
169        }
170        
171        /*
172         * (non-Javadoc)
173         * @see java.lang.Enum#toString()
174         */
175        @Override
176        public String toString() {
177                return String.format("0x%02X: %s", value, description);
178        }
179}