    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 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}