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