    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.connection.serial;
    013
    014/**
    015 * Helper class used to store serial connection parameters information.
    016 *
    017 * <p>Parameters are stored as public variables so that they can be accessed
    018 * and read from any class.</p>
    019 */
    020public final class SerialPortParameters {
    021
    022        // Constants.
    023        private static final int HASH_SEED = 23;
    024
    025        // Variables.
    026        public final int baudrate;
    027        public final int dataBits;
    028        public final int stopBits;
    029        public final int parity;
    030        public final int flowControl;
    031
    032        /**
    033         * Class constructor. Instances a new {@code SerialPortParameters} object
    034         * with the given parameters.
    035         *
    036         * @param baudrate Serial connection baud rate,
    037         * @param dataBits Serial connection data bits.
    038         * @param stopBits Serial connection stop bits.
    039         * @param parity Serial connection parity.
    040         * @param flowControl Serial connection flow control.
    041         *
    042         * @throws IllegalArgumentException if {@code baudrate < 0} or
    043         *                                  if {@code dataBits < 0} or
    044         *                                  if {@code stopBits < 0} or
    045         *                                  if {@code parity < 0} or
    046         *                                  if {@code flowControl < 0}.
    047         */
    048        public SerialPortParameters(int baudrate, int dataBits, int stopBits, int parity, int flowControl) {
    049                if (baudrate < 0)
    050                        throw new IllegalArgumentException("Baudrate cannot be less than 0.");
    051                if (dataBits < 0)
    052                        throw new IllegalArgumentException("Number of data bits cannot be less than 0.");
    053                if (stopBits < 0)
    054                        throw new IllegalArgumentException("Number of stop bits cannot be less than 0.");
    055                if (parity < 0)
    056                        throw new IllegalArgumentException("Illegal parity value.");
    057                if (flowControl < 0)
    058                        throw new IllegalArgumentException("Illegal flow control value.");
    059
    060                this.baudrate = baudrate;
    061                this.dataBits = dataBits;
    062                this.stopBits = stopBits;
    063                this.parity = parity;
    064                this.flowControl = flowControl;
    065        }
    066
    067        /*
    068         * (non-Javadoc)
    069         * @see java.lang.Object#equals(java.lang.Object)
    070         */
    071        @Override
    072        public boolean equals(Object obj) {
    073                if (obj instanceof SerialPortParameters)
    074                        return ((SerialPortParameters)obj).baudrate == baudrate
    075                                && ((SerialPortParameters)obj).dataBits == dataBits
    076                                && ((SerialPortParameters)obj).stopBits == stopBits
    077                                && ((SerialPortParameters)obj).parity == parity
    078                                && ((SerialPortParameters)obj).flowControl == flowControl;
    079                else
    080                        return false;
    081        }
    082
    083        /*
    084         * (non-Javadoc)
    085         * @see java.lang.Object#hashCode()
    086         */
    087        @Override
    088        public int hashCode() {
    089                int hash = HASH_SEED;
    090                hash = hash * (hash + baudrate);
    091                hash = hash * (hash + dataBits);
    092                hash = hash * (hash + stopBits);
    093                hash = hash * (hash + parity);
    094                hash = hash * (hash + flowControl);
    095                return hash;
    096        }
    097
    098        /*
    099         * (non-Javadoc)
    100         * @see java.lang.Object#toString()
    101         */
    102        @Override
    103        public String toString() {
    104                return "Baud Rate: "+ baudrate + ", Data Bits: " + dataBits
    105                                + ", Stop Bits: " + stopBits + ", Parity: " + parity
    106                                + ", Flow Control: " + flowControl;
    107        }
    108}