001package com.pi4j.io.serial;
002
003/*
004 * #%L
005 * **********************************************************************
006 * ORGANIZATION  :  Pi4J
007 * PROJECT       :  Pi4J :: Java Library (Core)
008 * FILENAME      :  SerialConfig.java
009 *
010 * This file is part of the Pi4J project. More information about
011 * this project can be found here:  https://www.pi4j.com/
012 * **********************************************************************
013 * %%
014 * Copyright (C) 2012 - 2021 Pi4J
015 * %%
016 * This program is free software: you can redistribute it and/or modify
017 * it under the terms of the GNU Lesser General Public License as
018 * published by the Free Software Foundation, either version 3 of the
019 * License, or (at your option) any later version.
020 *
021 * This program is distributed in the hope that it will be useful,
022 * but WITHOUT ANY WARRANTY; without even the implied warranty of
023 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
024 * GNU General Lesser Public License for more details.
025 *
026 * You should have received a copy of the GNU General Lesser Public
027 * License along with this program.  If not, see
028 * <http://www.gnu.org/licenses/lgpl-3.0.html>.
029 * #L%
030 */
031
032public class SerialConfig {
033
034    private String device = Serial.DEFAULT_COM_PORT;
035    private Baud baud = Baud._9600;
036    private DataBits dataBits = DataBits._8;
037    private Parity parity = Parity.NONE;
038    private StopBits stopBits = StopBits._1;
039    private FlowControl flowControl = FlowControl.NONE;
040
041    public SerialConfig(){}
042
043    /*
044     *  The device address of the serial port to access. You can use constant 'Serial.DEFAULT_COM_PORT'
045     *   if you wish to access the default serial port provided via the GPIO header.
046     */
047    public String device() { return device; }
048
049    /*
050     *  The device address of the serial port to access. You can use constant 'Serial.DEFAULT_COM_PORT'
051     *   if you wish to access the default serial port provided via the GPIO header.
052     */
053    public SerialConfig device(String device) { this.device = device; return this; }
054
055    /*
056     * The baud rate to use with the serial port.
057     */
058    public Baud baud() { return baud; }
059
060    /*
061     * The baud rate to use with the serial port.
062     */
063    public SerialConfig baud(Baud baud) { this.baud = baud; return this; }
064
065    /*
066     * The data bits to use for serial communication. (5,6,7,8)
067     */
068    public DataBits dataBits() { return dataBits; }
069
070    /*
071     * The data bits to use for serial communication. (5,6,7,8)
072     */
073    public SerialConfig dataBits(DataBits dataBits) { this.dataBits = dataBits; return this; }
074
075    /*
076     * The parity setting to use for serial communication. (None, Event, Odd, Mark, Space)
077     */
078    public Parity parity() { return parity; }
079
080    /*
081     * The parity setting to use for serial communication. (None, Event, Odd, Mark, Space)
082     */
083    public SerialConfig parity(Parity parity) { this.parity = parity; return this; }
084
085    /*
086     * The stop bits to use for serial communication. (1,2)
087     */
088    public StopBits stopBits() { return stopBits; }
089
090    /*
091     * The stop bits to use for serial communication. (1,2)
092     */
093    public SerialConfig stopBits(StopBits stopBits) { this.stopBits = stopBits; return this; }
094
095    /*
096     * The flow control option to use for serial communication. (none, hardware, software)
097     */
098    public FlowControl flowControl() { return flowControl; }
099
100    /*
101     * The flow control option to use for serial communication. (none, hardware, software)
102     */
103    public SerialConfig flowControl(FlowControl flowControl) { this.flowControl = flowControl; return this; }
104
105    @Override
106    public String toString(){
107        // /dev/ttyAMA0 (38400, 8N1) [FC=NONE]
108        return device() + " (" +
109                baud().getValue() + "," +
110                dataBits().getValue() +
111                parity().toString().substring(0, 1) +
112                stopBits().getValue() + ") {" +
113                "FC:" + flowControl().toString() + "}";
114    }
115
116}