All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.rapplogic.xbee.api.zigbee.ZNetTxStatusResponse Maven / Gradle / Ivy

/**
 * Copyright (c) 2008 Andrew Rapp. All rights reserved.
 *  
 * This file is part of XBee-API.
 *  
 * XBee-API 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.
 *  
 * XBee-API 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 XBee-API.  If not, see .
 */

package com.rapplogic.xbee.api.zigbee;

import java.io.IOException;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.Map;

import org.apache.log4j.Logger;

import com.rapplogic.xbee.api.IPacketParser;
import com.rapplogic.xbee.api.XBeeAddress16;
import com.rapplogic.xbee.api.XBeeFrameIdResponse;

/**
 * Series 2 XBee.  This is sent out the UART of the transmitting XBee immediately following
 * a Transmit packet.  Indicates if the Transmit packet (ZNetTxRequest)
 * was successful.
 * 

* API ID: 0x8b *

* @author andrew */ public class ZNetTxStatusResponse extends XBeeFrameIdResponse { private final static Logger log = Logger.getLogger(ZNetTxStatusResponse.class); public enum DeliveryStatus { // 0x00 = Success // 0x01 = MAC ACK Failure // 0x02 = CCA Failure // 0x15 = Invalid destination // endpoint // 0x21 = Network ACK Failure // 0x22 = Not Joined to Network // 0x23 = Self-addressed // 0x24 = Address Not Found // 0x25 = Route Not Found // 0x26 = Broadcast source failed to hear a neighbor relay // the message // 0x2B = Invalid binding table index // 0x2C = Resource error lack of free buffers, timers, etc. // 0x2D = Attempted broadcast with APS transmission // 0x2E = Attempted unicast with APS transmission, but // EE=0 // 0x32 = Resource error lack of free // 0x74 = Data payload too large SUCCESS (0), MAC_FAILURE (1), CCA_FAILURE (0x02), INVALID_DESTINATION_ENDPOINT (0x15), NETWORK_ACK_FAILURE (0x21), NOT_JOINED_TO_NETWORK (0x22), SELF_ADDRESSED (0x23), ADDRESS_NOT_FOUND (0x24), ROUTE_NOT_FOUND (0x25), BROADCAST_SOURCE_NEIGHBOR_FAILURE (0x26), INVALID_BINDING_TABLE_INDEX (0x2B), RESOURCE_ERROR_LACK_FREE_BUFFERS (0x2C), ATTEMPTED_BROADCAST_WITH_APS_TX (0x2D), ATTEMPTED_UNICAST_WITH_APS_TX_EE_ZERO (0x2E), RESOURCE_ERROR_LACK_FREE_BUFFERS_0x32 (0x32), // WUT, SAME AS 2C PAYLOAD_TOO_LARGE(0x74), // ZB Pro firmware only UNKNOWN(-1); private static final Map lookup = new HashMap(); static { for(DeliveryStatus s : EnumSet.allOf(DeliveryStatus.class)) { lookup.put(s.getValue(), s); } } private final int value; DeliveryStatus(int value) { this.value = value; } public static DeliveryStatus get(int value) { return lookup.get(value); } public int getValue() { return value; } } public enum DiscoveryStatus { // 0x00 = No Discovery Overhead // 0x01 = Address Discovery // 0x02 = Route Discovery // 0x03 = Address and Route // 0x40 = Extended Timeout Discovery // NOTE 0x40 IS A bit field so going to be painful with enums NO_DISCOVERY (0), ADDRESS_DISCOVERY (1), ROUTE_DISCOVERY (2), ADDRESS_AND_ROUTE_DISCOVERY (3), EXTENDED_TIMEOUT_DISCOVERY (0x40), EXTENDED_TIMEOUT_DISCOVERY_0x41 (0x41), EXTENDED_TIMEOUT_DISCOVERY_0x42 (0x42), EXTENDED_TIMEOUT_DISCOVERY_0x43 (0x43), UNKNOWN(-1); private static final Map lookup = new HashMap(); static { for(DiscoveryStatus s : EnumSet.allOf(DiscoveryStatus.class)) { lookup.put(s.getValue(), s); } } private final int value; DiscoveryStatus(int value) { this.value = value; } public static DiscoveryStatus get(int value) { return lookup.get(value); } public int getValue() { return value; } } private XBeeAddress16 remoteAddress16; private int retryCount; private DeliveryStatus deliveryStatus; private DiscoveryStatus discoveryStatus; public ZNetTxStatusResponse() { } public XBeeAddress16 getRemoteAddress16() { return remoteAddress16; } public void setRemoteAddress16(XBeeAddress16 remoteAddress) { this.remoteAddress16 = remoteAddress; } public int getRetryCount() { return retryCount; } public void setRetryCount(int retryCount) { this.retryCount = retryCount; } public DeliveryStatus getDeliveryStatus() { return deliveryStatus; } public void setDeliveryStatus(DeliveryStatus deliveryStatus) { this.deliveryStatus = deliveryStatus; } public DiscoveryStatus getDiscoveryStatus() { return discoveryStatus; } public void setDiscoveryStatus(DiscoveryStatus discoveryStatus) { this.discoveryStatus = discoveryStatus; } /** * Returns true if the delivery status is SUCCESS * * @return */ public boolean isSuccess() { return this.getDeliveryStatus() == DeliveryStatus.SUCCESS; } public void parse(IPacketParser parser) throws IOException { this.setFrameId(parser.read("ZNet Tx Status Frame Id")); this.setRemoteAddress16(parser.parseAddress16()); this.setRetryCount(parser.read("ZNet Tx Status Tx Count")); int deliveryStatus = parser.read("ZNet Tx Status Delivery Status"); if (DeliveryStatus.get(deliveryStatus) != null) { this.setDeliveryStatus(DeliveryStatus.get(deliveryStatus)); } else { log.warn("Unknown delivery status " + deliveryStatus); this.setDeliveryStatus(DeliveryStatus.UNKNOWN); } int discoveryStatus = parser.read("ZNet Tx Status Discovery Status"); if (DiscoveryStatus.get(discoveryStatus) != null) { this.setDiscoveryStatus(DiscoveryStatus.get(discoveryStatus)); } else { log.warn("Unknown discovery status " + discoveryStatus); this.setDiscoveryStatus(DiscoveryStatus.UNKNOWN); } } public String toString() { return super.toString() + ",remoteAddress16=" + this.remoteAddress16 + ",retryCount=" + this.retryCount + ",deliveryStatus=" + this.deliveryStatus + ",discoveryStatus=" + this.discoveryStatus; } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy