/** * Copyright (c) 2013, Will Szumski * * This file is part of formicidae. * * formicidae is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * formicidae is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with formicidae. If not, see <http://www.gnu.org/licenses/>. */ package org.cowboycoders.ant.messages.responses; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * Ant node capabilities * @author will * */ public enum Capability { ////////////////////////////////////////////// // Standard capabilities defines ////////////////////////////////////////////// NO_RX_CHANNELS (0x01,CapabilityCategory.STANDARD), NO_TX_CHANNELS (0x02,CapabilityCategory.STANDARD), NO_RX_MESSAGES (0x04,CapabilityCategory.STANDARD), NO_TX_MESSAGES (0x08,CapabilityCategory.STANDARD), NO_ACKD_MESSAGES (0x10,CapabilityCategory.STANDARD), NO_BURST_TRANSFER (0x20,CapabilityCategory.STANDARD), ////////////////////////////////////////////// // Advanced capabilities defines ////////////////////////////////////////////// /** * Support for this functionality has been dropped * @deprecated */ OVERUN_UNDERRUN (0x01,CapabilityCategory.ADVANCED), NETWORK_ENABLED (0x02,CapabilityCategory.ADVANCED), /** This Version of the AP1 does not support transmit and only had a limited release */ AP1_VERSION_2 (0x04,CapabilityCategory.ADVANCED), SERIAL_NUMBER_ENABLED (0x08,CapabilityCategory.ADVANCED), PER_CHANNEL_TX_POWER_ENABLED (0x10,CapabilityCategory.ADVANCED), LOW_PRIORITY_SEARCH_ENABLED (0x20,CapabilityCategory.ADVANCED), SCRIPT_ENABLED (0x40,CapabilityCategory.ADVANCED), SEARCH_LIST_ENABLED (0x80,CapabilityCategory.ADVANCED), ////////////////////////////////////////////// // Advanced capabilities 2 defines ////////////////////////////////////////////// LED_ENABLED (0x01,CapabilityCategory.ADVANCED2), EXT_MESSAGE_ENABLED (0x02,CapabilityCategory.ADVANCED2), SCAN_MODE_ENABLED (0x04,CapabilityCategory.ADVANCED2), RESERVED (0x08,CapabilityCategory.ADVANCED2), PROX_SEARCH_ENABLED (0x10,CapabilityCategory.ADVANCED2), EXT_ASSIGN_ENABLED (0x20,CapabilityCategory.ADVANCED2), FREE_1 (0x40,CapabilityCategory.ADVANCED2), FIT1_ENABLED (0x80,CapabilityCategory.ADVANCED2), ////////////////////////////////////////////// // Advanced capabilities 3 defines ////////////////////////////////////////////// SENSRCORE_ENABLED (0x01,CapabilityCategory.ADVANCED3), RESERVED_1 (0x02,CapabilityCategory.ADVANCED3), RESERVED_2 (0x04,CapabilityCategory.ADVANCED3), RESERVED_3 (0x08,CapabilityCategory.ADVANCED3), ; /** * code as defined in ant spec */ private byte code; /** * elements category */ private CapabilityCategory category; /** * maps code to {@code} Capability */ private static Map<Byte,Capability> codeMap = new HashMap<Byte,Capability>(); private static Map<CapabilityCategory, List<Capability>> categoryMap = new HashMap<CapabilityCategory, List<Capability>>(); static { for (CapabilityCategory c : CapabilityCategory.values()) { categoryMap.put(c, new ArrayList<Capability>()); } } static { for( Capability c : Capability.values() ) { codeMap.put(c.getCode(), c); categoryMap.get(c.getCategory()).add(c); } } Capability(int code, CapabilityCategory category) { setCode((byte) code); setCategory(category); } /** * * @param code {@code int} representation * @return Capability, code maps to */ public static Capability lookUp(int code) { return codeMap.get((byte) code); } /** * @return the code */ public byte getCode() { return code; } /** * @param code the code to set */ private void setCode(byte code) { this.code = code; } /** * @return the category */ public CapabilityCategory getCategory() { return category; } /** * @param category the category to set */ private void setCategory(CapabilityCategory category) { this.category = category; } public static List<Capability> getCapabilitiesInCategory(CapabilityCategory category) { List<Capability> rtn = new ArrayList<Capability>(); List<Capability> local = categoryMap.get(category); for (int i = 0 ; i< local.size() ; i++) { rtn.add(local.get(i)); } return rtn; } }