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.exceptions.TimeoutException;
015import com.digi.xbee.api.exceptions.XBeeException;
016import com.digi.xbee.api.models.AssociationIndicationStatus;
017import com.digi.xbee.api.models.XBee16BitAddress;
018import com.digi.xbee.api.models.XBee64BitAddress;
019import com.digi.xbee.api.models.XBeeProtocol;
020
021/**
022 * This class represents a remote 802.15.4 device.
023 * 
024 * @see RemoteXBeeDevice
025 * @see RemoteDigiMeshDevice
026 * @see RemoteDigiPointDevice
027 * @see RemoteZigBeeDevice
028 */
029public class RemoteRaw802Device extends RemoteXBeeDevice {
030
031        /**
032         * Class constructor. Instantiates a new {@code RemoteRaw802Device} object 
033         * with the given local {@code Raw802Device} which contains the connection 
034         * interface to be used.
035         * 
036         * @param localXBeeDevice The local 802.15.4 device that will behave as 
037         *                        connection interface to communicate with this 
038         *                        remote 802.15.4 device.
039         * @param addr64 The 64-bit address to identify this remote 802.15.4 device.
040         * 
041         * @throws IllegalArgumentException if {@code localXBeeDevice.isRemote() == true}.
042         * @throws NullPointerException if {@code localXBeeDevice == null} or
043         *                              if {@code addr64 == null}.
044         * 
045         * @see com.digi.xbee.api.models.XBee64BitAddress
046         */
047        public RemoteRaw802Device(Raw802Device localXBeeDevice, XBee64BitAddress addr64) {
048                super(localXBeeDevice, addr64);
049        }
050        
051        /**
052         * Class constructor. Instantiates a new {@code RemoteRaw802Device} object 
053         * with the given local {@code XBeeDevice} which contains the connection 
054         * interface to be used.
055         * 
056         * @param localXBeeDevice The local XBee device that will behave as 
057         *                        connection interface to communicate with this 
058         *                        remote 802.15.4 device.
059         * @param addr64 The 64-bit address to identify this remote 802.15.4 device.
060         * @param addr16 The 16-bit address to identify this remote 802.15.4 device. 
061         *               It might be {@code null}.
062         * @param id The node identifier of this remote 802.15.4 device. It might be 
063         *           {@code null}.
064         * 
065         * @throws IllegalArgumentException if {@code localXBeeDevice.isRemote() == true} or  
066         *                                  if {@code localXBeeDevice.getXBeeProtocol() != XBeeProtocol.RAW_802_15_4}
067         * @throws NullPointerException if {@code localXBeeDevice == null} or
068         *                              if {@code addr64 == null}.
069         * 
070         * @see com.digi.xbee.api.models.XBee16BitAddress
071         * @see com.digi.xbee.api.models.XBee64BitAddress
072         */
073        public RemoteRaw802Device(XBeeDevice localXBeeDevice, XBee64BitAddress addr64, 
074                        XBee16BitAddress addr16, String id) {
075                super(localXBeeDevice, addr64, addr16, id);
076                
077                // Verify the local device has 802.15.4 protocol.
078                if (localXBeeDevice.getXBeeProtocol() != XBeeProtocol.RAW_802_15_4)
079                        throw new IllegalArgumentException("The protocol of the local XBee device is not " + XBeeProtocol.RAW_802_15_4.getDescription() + ".");
080        }
081        
082        /**
083         * Class constructor. Instantiates a new {@code RemoteRaw802Device} object 
084         * with the given local {@code Raw802Device} which contains the connection 
085         * interface to be used.
086         * 
087         * @param localXBeeDevice The local 802.15.4 device that will behave as 
088         *                        connection interface to communicate with this 
089         *                        remote 802.15.4 device.
090         * @param addr16 The 16-bit address to identify this remote 802.15.4 
091         *               device.
092         * 
093         * @throws NullPointerException if {@code localXBeeDevice == null} or
094         *                              if {@code addr16 == null}.
095         * 
096         * @see com.digi.xbee.api.models.XBee16BitAddress
097         */
098        public RemoteRaw802Device(Raw802Device localXBeeDevice, XBee16BitAddress addr16) {
099                super(localXBeeDevice, XBee64BitAddress.UNKNOWN_ADDRESS);
100                
101                this.xbee16BitAddress = addr16;
102        }
103        
104        /**
105         * Class constructor. Instantiates a new {@code RemoteRaw802Device} object 
106         * interface to be used.
107         * 
108         * @param localXBeeDevice The local 802.15.4 device that will behave as 
109         *                        connection interface to communicate with this 
110         *                        remote 802.15.4 device.
111         * @param addr16 The 16-bit address to identify this remote 802.15.4 
112         *               device.
113         * 
114         * @throws IllegalArgumentException if {@code localXBeeDevice.getXBeeProtocol() != XBeeProtocol.RAW_802_15_4}.
115         * @throws NullPointerException if {@code localXBeeDevice == null} or
116         *                              if {@code addr16 == null}.
117         * 
118         * @see com.digi.xbee.api.models.XBee16BitAddress
119         */
120        public RemoteRaw802Device(XBeeDevice localXBeeDevice, XBee16BitAddress addr16) {
121                super(localXBeeDevice, XBee64BitAddress.UNKNOWN_ADDRESS);
122                
123                // Verify the local device has 802.15.4 protocol.
124                if (localXBeeDevice.getXBeeProtocol() != XBeeProtocol.RAW_802_15_4)
125                        throw new IllegalArgumentException("The protocol of the local XBee device is not " + XBeeProtocol.RAW_802_15_4.getDescription() + ".");
126                
127                this.xbee16BitAddress = addr16;
128        }
129        
130        /**
131         * Sets the XBee64BitAddress of this remote 802.15.4 device.
132         * 
133         * @param addr64 The 64-bit address to be set to the device.
134         * 
135         * @see com.digi.xbee.api.models.XBee64BitAddress
136         */
137        public void set64BitAddress(XBee64BitAddress addr64) {
138                this.xbee64BitAddress = addr64;
139        }
140        
141        /*
142         * (non-Javadoc)
143         * @see com.digi.xbee.api.AbstractXBeeDevice#getXBeeProtocol()
144         */
145        @Override
146        public XBeeProtocol getXBeeProtocol() {
147                return XBeeProtocol.RAW_802_15_4;
148        }
149        
150        /*
151         * (non-Javadoc)
152         * @see com.digi.xbee.api.AbstractXBeeDevice#set16BitAddress(com.digi.xbee.api.models.XBee16BitAddress)
153         */
154        @Override
155        public void set16BitAddress(XBee16BitAddress xbee16BitAddress) throws TimeoutException, XBeeException {
156                super.set16BitAddress(xbee16BitAddress);
157        }
158        
159        /*
160         * (non-Javadoc)
161         * @see com.digi.xbee.api.AbstractXBeeDevice#getAssociationIndicationStatus()
162         */
163        @Override
164        public AssociationIndicationStatus getAssociationIndicationStatus() throws TimeoutException, XBeeException {
165                return super.getAssociationIndicationStatus();
166        }
167}