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 016/** 017 * Enumerates all the special bytes of the XBee protocol that must be escaped 018 * when working on API 2 mode. 019 * 020 * @see OperatingMode 021 */ 022public enum SpecialByte { 023 024 // Enumeration elements 025 ESCAPE_BYTE(0x7D), 026 HEADER_BYTE (0x7E), 027 XON_BYTE(0x11), 028 XOFF_BYTE(0x13); 029 030 // Variables 031 private static final HashMap<Integer, SpecialByte> lookupTable = new HashMap<Integer, SpecialByte>(); 032 033 static { 034 for (SpecialByte sb:values()) 035 lookupTable.put(sb.getValue(), sb); 036 } 037 038 private final int value; 039 040 /** 041 * Class constructor. Instantiates a new {@code SpecialByte} enumeration 042 * entry with the given value. 043 * 044 * @param value Value of the special byte. 045 */ 046 private SpecialByte(int value) { 047 this.value = value; 048 } 049 050 /** 051 * Returns the special byte value. 052 * 053 * @return The special byte value. 054 */ 055 public int getValue() { 056 return value; 057 } 058 059 /** 060 * Returns the {@code SpecialByte} entry associated with the given value. 061 * 062 * @param value Value of the {@code SpecialByte} to retrieve. 063 * 064 * @return {@code SpecialByte} associated to the given value, {@code null} 065 * if it does not exist in the list. 066 */ 067 public static SpecialByte get(int value) { 068 return lookupTable.get(value); 069 } 070 071 /** 072 * Escapes the byte by performing a XOR operation with {@code 0x20} value. 073 * 074 * @return Escaped byte value. 075 */ 076 public int escapeByte() { 077 return value ^ 0x20; 078 } 079 080 /** 081 * Checks whether the given byte is special or not. 082 * 083 * @param byteToCheck Byte to check. 084 * 085 * @return {@code true} if given byte is special, {@code false} otherwise. 086 */ 087 public static boolean isSpecialByte(int byteToCheck) { 088 return get(byteToCheck) != null; 089 } 090}