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