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 modem status events. This enumeration list is 
020 * intended to be used within the 
021 * {@link com.digi.xbee.api.packet.common.ModemStatusPacket} packet.
022 */
023public enum ModemStatusEvent {
024
025        // Enumeration elements
026        STATUS_HARDWARE_RESET (0, "Device was reset"),
027        STATUS_WATCHDOG_TIMER_RESET (1, "Watchdog timer was reset"),
028        STATUS_JOINED_NETWORK (2, "Device joined to network"),
029        STATUS_DISASSOCIATED (3, "Device disassociated"),
030        STATUS_ERROR_SYNCHRONIZATION_LOST (4, "Configuration error/synchronization lost"),
031        STATUS_COORDINATOR_REALIGNMENT (5, "Coordinator realignment"),
032        STATUS_COORDINATOR_STARTED (6, "The coordinator started"),
033        STATUS_NETWORK_SECURITY_KEY_UPDATED (7, "Network security key was updated"),
034        STATUS_NETWORK_WOKE_UP (0x0B, "Network Woke Up"),
035        STATUS_NETWORK_WENT_TO_SLEEP (0x0C, "Network Went To Sleep"),
036        STATUS_VOLTAGE_SUPPLY_LIMIT_EXCEEDED (0x0D, "Voltage supply limit exceeded"),
037        STATUS_MODEM_CONFIG_CHANGED_WHILE_JOINING (0x11, " Modem configuration changed while joining"),
038        STATUS_ERROR_STACK (0x80, "Stack error"),
039        STATUS_ERROR_AP_NOT_CONNECTED (0x82, "Send/join command issued without connecting from AP"),
040        STATUS_ERROR_AP_NOT_FOUND (0x83, "Access point not found"),
041        STATUS_ERROR_PSK_NOT_CONFIGURED (0x84, "PSK not configured"),
042        STATUS_ERROR_SSID_NOT_FOUND (0x87, "SSID not found"),
043        STATUS_ERROR_FAILED_JOIN_SECURITY (0x88, "Failed to join with security enabled"),
044        STATUS_ERROR_INVALID_CHANNEL (0x8A, "Invalid channel"),
045        STATUS_ERROR_FAILED_JOIN_AP (0x8E, "Failed to join access point"),
046        STATUS_UNKNOWN (0xFF, "UNKNOWN");
047        
048        // Variables
049        private final int id;
050        
051        private final String description;
052        
053        private final static HashMap<Integer, ModemStatusEvent> lookupTable = new HashMap<Integer, ModemStatusEvent>();
054        
055        static {
056                for (ModemStatusEvent at:values())
057                        lookupTable.put(at.getId(), at);
058        }
059        
060        /**
061         * Class constructor. Instantiates a new {@code ModemStatusEvent} 
062         * enumeration entry  with the given parameters.
063         * 
064         * @param id Modem status ID.
065         * @param description Modem status description.
066         */
067        ModemStatusEvent(int id, String description) {
068                this.id = id;
069                this.description = description;
070        }
071        
072        /**
073         * Returns the modem status ID.
074         * 
075         * @return The modem status ID.
076         */
077        public int getId() {
078                return id;
079        }
080        
081        /**
082         * Returns the modem status description.
083         * 
084         * @return Modem status description.
085         */
086        public String getDescription() {
087                return description;
088        }
089        
090        /**
091         * Returns the {@code ModemStatusEvent} associated to the given ID.
092         * 
093         * @param id ID of the {@code ModemStatusEvent} to retrieve.
094         * @return The {@code ModemStatusEvent} associated with the given ID.
095         */
096        public static ModemStatusEvent get(int id) {
097                ModemStatusEvent status = lookupTable.get(id);
098                if (status != null)
099                        return status;
100                return STATUS_UNKNOWN;
101        }
102        
103        /*
104         * (non-Javadoc)
105         * @see java.lang.Enum#toString()
106         */
107        @Override
108        public String toString() {
109                return HexUtils.byteToHexString((byte)id) + ": " + description;
110        }
111}