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; 013 014import com.digi.xbee.api.connection.IConnectionInterface; 015import com.digi.xbee.api.connection.serial.SerialPortParameters; 016import com.digi.xbee.api.exceptions.InterfaceNotOpenException; 017import com.digi.xbee.api.exceptions.TimeoutException; 018import com.digi.xbee.api.exceptions.XBeeDeviceException; 019import com.digi.xbee.api.exceptions.XBeeException; 020import com.digi.xbee.api.models.AssociationIndicationStatus; 021import com.digi.xbee.api.models.XBee16BitAddress; 022import com.digi.xbee.api.models.XBee64BitAddress; 023import com.digi.xbee.api.models.XBeeProtocol; 024 025/** 026 * This class represents a local ZigBee device. 027 * 028 * @see XBeeDevice 029 * @see DigiMeshDevice 030 * @see DigiPointDevice 031 * @see Raw802Device 032 */ 033public class ZigBeeDevice extends XBeeDevice { 034 035 /** 036 * Class constructor. Instantiates a new {@code ZigBeeDevice} object in the 037 * given port name and baud rate. 038 * 039 * @param port Serial port name where ZigBee device is attached to. 040 * @param baudRate Serial port baud rate to communicate with the device. 041 * Other connection parameters will be set as default (8 042 * data bits, 1 stop bit, no parity, no flow control). 043 * 044 * @throws IllegalArgumentException if {@code baudRate < 0}. 045 * @throws NullPointerException if {@code port == null}. 046 */ 047 public ZigBeeDevice(String port, int baudRate) { 048 this(XBee.createConnectiontionInterface(port, baudRate)); 049 } 050 051 /** 052 * Class constructor. Instantiates a new {@code ZigBeeDevice} object in the 053 * given serial port name and settings. 054 * 055 * @param port Serial port name where ZigBee device is attached to. 056 * @param baudRate Serial port baud rate to communicate with the device. 057 * @param dataBits Serial port data bits. 058 * @param stopBits Serial port data bits. 059 * @param parity Serial port data bits. 060 * @param flowControl Serial port data bits. 061 * 062 * @throws IllegalArgumentException if {@code baudRate < 0} or 063 * if {@code dataBits < 0} or 064 * if {@code stopBits < 0} or 065 * if {@code parity < 0} or 066 * if {@code flowControl < 0}. 067 * @throws NullPointerException if {@code port == null}. 068 */ 069 public ZigBeeDevice(String port, int baudRate, int dataBits, int stopBits, int parity, int flowControl) { 070 this(port, new SerialPortParameters(baudRate, dataBits, stopBits, parity, flowControl)); 071 } 072 073 /** 074 * Class constructor. Instantiates a new {@code ZigBeeDevice} object in the 075 * given serial port name and parameters. 076 * 077 * @param port Serial port name where ZigBee device is attached to. 078 * @param serialPortParameters Object containing the serial port parameters. 079 * 080 * @throws NullPointerException if {@code port == null} or 081 * if {@code serialPortParameters == null}. 082 * 083 * @see com.digi.xbee.api.connection.serial.SerialPortParameters 084 */ 085 public ZigBeeDevice(String port, SerialPortParameters serialPortParameters) { 086 this(XBee.createConnectiontionInterface(port, serialPortParameters)); 087 } 088 089 /** 090 * Class constructor. Instantiates a new {@code ZigBeeDevice} object with the 091 * given connection interface. 092 * 093 * @param connectionInterface The connection interface with the physical 094 * ZigBee device. 095 * 096 * @throws NullPointerException if {@code connectionInterface == null} 097 * 098 * @see com.digi.xbee.api.connection.IConnectionInterface 099 */ 100 public ZigBeeDevice(IConnectionInterface connectionInterface) { 101 super(connectionInterface); 102 } 103 104 /* 105 * (non-Javadoc) 106 * @see com.digi.xbee.api.XBeeDevice#open() 107 */ 108 @Override 109 public void open() throws XBeeException { 110 super.open(); 111 if (xbeeProtocol != XBeeProtocol.ZIGBEE) 112 throw new XBeeDeviceException("XBee device is not a " + getXBeeProtocol().getDescription() + " device, it is a " + xbeeProtocol.getDescription() + " device."); 113 } 114 115 /* 116 * (non-Javadoc) 117 * @see com.digi.xbee.api.XBeeDevice#getNetwork() 118 */ 119 @Override 120 public XBeeNetwork getNetwork() { 121 if (!isOpen()) 122 throw new InterfaceNotOpenException(); 123 if (network == null) 124 network = new ZigBeeNetwork(this); 125 return network; 126 } 127 128 /* 129 * (non-Javadoc) 130 * @see com.digi.xbee.api.XBeeDevice#getXBeeProtocol() 131 */ 132 @Override 133 public XBeeProtocol getXBeeProtocol() { 134 return XBeeProtocol.ZIGBEE; 135 } 136 137 /* 138 * (non-Javadoc) 139 * @see com.digi.xbee.api.XBeeDevice#sendDataAsync(com.digi.xbee.api.models.XBee64BitAddress, com.digi.xbee.api.models.XBee16BitAddress, byte[]) 140 */ 141 @Override 142 public void sendDataAsync(XBee64BitAddress address64Bit, XBee16BitAddress address16bit, byte[] data) throws XBeeException { 143 super.sendDataAsync(address64Bit, address16bit, data); 144 } 145 146 /* 147 * (non-Javadoc) 148 * @see com.digi.xbee.api.XBeeDevice#sendData(com.digi.xbee.api.models.XBee64BitAddress, com.digi.xbee.api.models.XBee16BitAddress, byte[]) 149 */ 150 @Override 151 public void sendData(XBee64BitAddress address64Bit, XBee16BitAddress address16bit, byte[] data) throws TimeoutException, XBeeException { 152 super.sendData(address64Bit, address16bit, data); 153 } 154 155 /* 156 * (non-Javadoc) 157 * @see com.digi.xbee.api.AbstractXBeeDevice#getAssociationIndicationStatus() 158 */ 159 @Override 160 public AssociationIndicationStatus getAssociationIndicationStatus() throws TimeoutException, XBeeException { 161 return super.getAssociationIndicationStatus(); 162 } 163 164 /* 165 * (non-Javadoc) 166 * @see com.digi.xbee.api.AbstractXBeeDevice#forceDisassociate() 167 */ 168 @Override 169 public void forceDisassociate() throws TimeoutException, XBeeException { 170 super.forceDisassociate(); 171 } 172}