using System;
using System.Collections.Generic;
using System.Text;
using System.IO.Ports;

namespace Rs232Koppler {
    /// <summary>
    /// Eine Klasse die den Zugriff auf den Rs232-I2C der Firma Horter & Kalb
    /// (www.horter.de) ermöglicht. Sie entspricht dem Excel VB Funktionstest.
    /// Für Serial Kommunikation wurde die die System.IO.Ports.SerialPort Klasse
    /// verwendet.
    /// 
    /// Author: Jens Zech (jzech@gmx.de)
    /// </summary>
    class SerialI2CAdapter {
        private SerialPort port;

        //-- Attributes -------------------------------------------------------------
        #region Attributes
        /// <summary>
        /// I2C Datenleitung an DTR Leitung der RS-232 schalten / auslesen
        /// </summary>
        public bool SDA {
            get {
                if (port == null) return false;
                return port.DsrHolding; 
            }
            set {
                if (port != null) port.DtrEnable = value; 
            }
        }
        /// <summary>
        /// I2C Taktleitung an RTS Leitung der RS-232 schalten
        /// </summary>
        public bool SCL {
            set {
                if (port != null) port.RtsEnable = value;
            }
        }
        /// <summary>
        /// Auslesen des INT am CTS der RS-232
        /// </summary>
        public bool INT {
            get {
                if (port == null) return false;
                return port.CtsHolding; 
            }
        }
        /// <summary>
        /// Prüfen ob der SerialPort geöffnet ist
        /// </summary>
        public bool IsPortOpen {
            get {
                if (port == null) return false;
                return port.IsOpen;
            }
        }
        #endregion

        //---------------------------------------------------------------------------
        
        /// <summary>
        /// Öffnet den angegebenen SerialPort
        /// </summary>
        /// <param name="PortString">Der zu öffnende SerialPort (z.B.: COM1)</param>
        /// <param name="bautRate">die zu verwendene Baudrate (z.B.: 9600)</param>
        /// <returns>true, wenn der Port erfolgreich geöffnet werden konnte</returns>
        public bool OpenPort(String PortString, int bautRate) {
            try {
                port = new SerialPort(PortString, bautRate, Parity.None, 8, StopBits.One);
                port.Open();

                return port.IsOpen;
            } catch {
                return false;
            }
        }
        
        /// <summary>
        /// Schliesst den Serialport wieder.
        /// </summary>
        public void ClosePort() {
            if (port.IsOpen)
                port.Close();
        }
    }
}