/* jSSC (Java Simple Serial Connector) - serial port communication library.
 * © Alexey Sokolov (scream3r), 2010-2014.
 *
 * This file is part of jSSC.
 *
 * jSSC is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * jSSC is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with jSSC.  If not, see <http://www.gnu.org/licenses/>.
 *
 * If you use jSSC in public project you can inform me about this by e-mail,
 * of course if you want it.
 *
 * e-mail: scream3r.org@gmail.com
 * web-site: http://scream3r.org | http://code.google.com/p/java-simple-serial-connector/
 */
package jssc;

/**
 *
 * @author scream3r
 */
public class SerialPortEvent {

    private String portName;
    private int eventType;
    private int eventValue;

    public static final int RXCHAR = 1;
    public static final int RXFLAG = 2;
    public static final int TXEMPTY = 4;
    public static final int CTS = 8;
    public static final int DSR = 16;
    public static final int RLSD = 32;
    public static final int BREAK = 64;
    public static final int ERR = 128;
    public static final int RING = 256;

    public SerialPortEvent(String portName, int eventType, int eventValue){
        SerialPort.log("SerialPortEvent " + portName + " " + eventType + " " + eventValue);
        this.portName = portName;
        this.eventType = eventType;
        this.eventValue = eventValue;
    }

    /**
     * Getting port name which sent the event
     */
    public String getPortName() {
        return portName;
    }

    /**
     * Getting event type
     */
    public int getEventType() {
        return eventType;
    }

    /**
     * Getting event value
     * <br></br>
     * <br><u><b>Event values depending on their types:</b></u></br>
     * <br><b>RXCHAR</b> - bytes count in input buffer</br>
     * <br><b>RXFLAG</b> - bytes count in input buffer (Not supported in Linux)</br>
     * <br><b>TXEMPTY</b> - bytes count in output buffer</br>
     * <br><b>CTS</b> - state of CTS line (0 - OFF, 1 - ON)</br>
     * <br><b>DSR</b> - state of DSR line (0 - OFF, 1 - ON)</br>
     * <br><b>RLSD</b> - state of RLSD line (0 - OFF, 1 - ON)</br>
     * <br><b>BREAK</b> - 0</br>
     * <br><b>RING</b> - state of RING line (0 - OFF, 1 - ON)</br>
     * <br><b>ERR</b> - mask of errors</br>
     */
    public int getEventValue() {
        return eventValue;
    }

    /**
     * Method returns true if event of type <b>"RXCHAR"</b> is received and otherwise false
     */
    public boolean isRXCHAR() {
        if(eventType == RXCHAR){
            return true;
        }
        else {
            return false;
        }
    }

    /**
     * Method returns true if event of type <b>"RXFLAG"</b> is received and otherwise false
     */
    public boolean isRXFLAG() {
        if(eventType == RXFLAG){
            return true;
        }
        else {
            return false;
        }
    }

    /**
     * Method returns true if event of type <b>"TXEMPTY"</b> is received and otherwise false
     */
    public boolean isTXEMPTY() {
        if(eventType == TXEMPTY){
            return true;
        }
        else {
            return false;
        }
    }

    /**
     * Method returns true if event of type <b>"CTS"</b> is received and otherwise false
     */
    public boolean isCTS() {
        if(eventType == CTS){
            return true;
        }
        else {
            return false;
        }
    }

    /**
     * Method returns true if event of type <b>"DSR"</b> is received and otherwise false
     */
    public boolean isDSR() {
        if(eventType == DSR){
            return true;
        }
        else {
            return false;
        }
    }

    /**
     * Method returns true if event of type <b>"RLSD"</b> is received and otherwise false
     */
    public boolean isRLSD() {
        if(eventType == RLSD){
            return true;
        }
        else {
            return false;
        }
    }

    /**
     * Method returns true if event of type <b>"BREAK"</b> is received and otherwise false
     */
    public boolean isBREAK() {
        if(eventType == BREAK){
            return true;
        }
        else {
            return false;
        }
    }

    /**
     * Method returns true if event of type <b>"ERR"</b> is received and otherwise false
     */
    public boolean isERR() {
        if(eventType == ERR){
            return true;
        }
        else {
            return false;
        }
    }

    /**
     * Method returns true if event of type <b>"RING"</b> is received and otherwise false
     */
    public boolean isRING() {
        if(eventType == RING){
            return true;
        }
        else {
            return false;
        }
    }
}
