001/**
002 * Copyright 2017-2024, 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         */
085        CELLULAR(0x40, "CELLULAR"),
086        /** @since 1.2.1 */
087        CELLULAR_CAT1_LTE_VERIZON(0x40, "XBee Cellular Cat 1 LTE Verizon"),
088        /** @since 1.2.1 */
089        XBEE3(0x41, "XBee3"),
090        /** @since 1.2.1 */
091        XBEE3_SMT(0x42, "XBee3 SMT"),
092        /** @since 1.2.1 */
093        XBEE3_TH(0x43, "XBee3 TH"),
094        /** @since 1.2.1 */
095        CELLULAR_3G(0x44, "XBee Cellular 3G"),
096        /** @since 1.2.1 */
097        XB8X(0x45, "XB8X"),
098        /**
099         * @deprecated Abandoned.
100         * @since 1.2.1
101         */
102        CELLULAR_LTE_VERIZON(0x46, "XBee Cellular LTE-M Verizon"),
103        /** @since 1.2.1 */
104        CELLULAR_LTE_ATT(0x47, "XBee Cellular LTE-M AT&T"),
105        /**
106         * @deprecated Never released.
107         * @since 1.2.1
108         */
109        CELLULAR_NBIOT_EUROPE(0x48, "XBee Cellular NBIoT Europe"),
110        /** @since 1.3.0 */
111        CELLULAR_3_CAT1_LTE_ATT(0x49, "XBee3 Cellular Cat 1 LTE AT&T"),
112        /**
113         * @deprecated Abandoned.
114         * @since 1.3.0
115         */
116        CELLULAR_3_LTE_M_VERIZON(0x4A, "XBee3 Cellular LTE-M Verizon"),
117        /** @since 1.3.0 */
118        CELLULAR_3_LTE_M_ATT(0x4B, "XBee3 Cellular LTE-M AT&T (u-blox)"),
119        /**
120         * @deprecated Never released.
121         * @since 1.3.0
122         */
123        CELLULAR_3_LTE_M_ATT_TELIT(0x4C, "XBee3 Cellular LTE-M AT&T (Telit)"),
124        /** @since 1.3.0 */
125        CELLULAR_3_CAT1_LTE_VERIZON(0x4D, "XBee3 Cellular Cat 1 LTE Verizon"),
126        /** @since 1.3.1 */
127        CELLULAR_3_LTE_M_TELIT(0x4E, "XBee 3 Cellular LTE-M/NB-IoT (Telit)"),
128        /** @since 1.3.1 */
129        XBEE3_DM_LR(0x50, "XBee XR 900"),
130        /** @since 1.3.1 */
131        XBEE3_DM_LR_868(0x51, "XBee XR 868"),
132        /** @since 1.3.1 */
133        XBEE3_RR(0x52, "XBee RR SMT/MMT, Pro/Non-Pro"),
134        /** @since 1.3.1 */
135        S2C_P5(0x53, "S2C P5"),
136        /** @since 1.3.1 */
137        CELLULAR_3_GLOBAL_LTE_CAT1(0x54, "XBee 3 Cellular Global LTE Cat 1"),
138        /** @since 1.3.1 */
139        CELLULAR_3_NA_LTE_CAT1(0x55, "XBee 3 Cellular North America LTE Cat 1"),
140        /** @since 1.3.2 */
141        CELLULAR_3_LTE_M_LOW_POWER(0x56, "XBee 3 Cellular LTE-M/NB-IoT Low Power"),
142        /** @since 1.3.2 */
143        XBEE3_RR_TH(0x57, "XBee RR TH Pro/Non-Pro"),
144        /** @since 1.3.2 */
145        CELLULAR_3_GLOBAL_CAT4(0x58, "XBee 3 Cellular Global Cat 4"),
146        /** @since 1.3.2 */
147        CELLULAR_3_NA_CAT4(0x59, "XBee 3 Cellular North America Cat 4"),
148        /** @since 1.3.2 */
149        XBEE_XR_900_TH(0x5A, "XBee XR 900 TH"),
150        /** @since 1.3.2 */
151        XBEE_XR_868_TH(0x5B, "XBee XR 868 TH"),
152        /** @since 1.3.2 */
153        XBEE_BLU_MICRO_SMT(0x5C, "XBee BLU Micro and SMT"),
154        /** @since 1.3.2 */
155        XBEE_BLU_TH(0x5D, "XBee BLU TH");
156        
157        // Variables
158        private final int value;
159        
160        private final String description;
161        
162        private final static HashMap<Integer, HardwareVersionEnum> lookupTable = new HashMap<Integer, HardwareVersionEnum>();
163        
164        static {
165                for (HardwareVersionEnum hv:values())
166                        lookupTable.put(hv.getValue(), hv);
167        }
168        
169        /**
170         * Class constructor. Instantiates a new {@code HardwareVersion} 
171         * enumeration entry with the given parameters.
172         * 
173         * @param value Hardware version numeric value 
174         * @param description Hardware version description.
175         */
176        private HardwareVersionEnum(int value, String description) {
177                this.value = value;
178                this.description = description;
179        }
180        
181        /**
182         * Returns the Hardware version numeric value.
183         * 
184         * @return The hardware version numeric value.
185         */
186        public int getValue() {
187                return value;
188        }
189        
190        /**
191         * Returns the hardware version description.
192         * 
193         * @return The hardware version description.
194         */
195        public String getDescription() {
196                return description;
197        }
198        
199        /**
200         * Returns the {@code HardwareVersionEnum} associated to the given 
201         * numeric value.
202         * 
203         * @param value Numeric value of the {@code HardwareVersionEnum} to 
204         *              retrieve.
205         * 
206         * @return The {@code HardwareVersionEnum} associated to the given numeric 
207         *         value, {@code null} if there is not any 
208         *         {@code HardwareVersionEnum} associated to that value.
209         */
210        public static HardwareVersionEnum get(int value) {
211                return lookupTable.get(value);
212        }
213        
214        /*
215         * (non-Javadoc)
216         * @see java.lang.Enum#toString()
217         */
218        @Override
219        public String toString() {
220                return String.format("0x%02X: %s", value, description);
221        }
222}