using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO.Ports; // No olvidar.
namespace Config_Puerto_Serie
{
public partial class Form1 : Form
{
// Variables.
bool Conectado;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
// Añado los puertos disponible en el PC con SerialPort.GetPortNames() al combo
comboBox_Puerto.DataSource = SerialPort.GetPortNames();
// Añade los bits de datos.
comboBox_Bits_de_datos.Items.Add("5");
comboBox_Bits_de_datos.Items.Add("6");
comboBox_Bits_de_datos.Items.Add("7");
comboBox_Bits_de_datos.Items.Add("8");
comboBox_Bits_de_datos.SelectedIndex = 3;
// Añade los bits de parada.
foreach (string Bit_Parada
in Enum.GetNames(typeof(StopBits
))) {
comboBox_Bits_de_parada.Text = "Two";
comboBox_Bits_de_parada.Items.Add(Bit_Parada);
}
// Añade la Paridad al comboBox.
foreach (string Paridad
in Enum.GetNames(typeof(Parity
))) {
comboBox_Paridad.Text = "None";
comboBox_Paridad.Items.Add(Paridad);
}
// Añade el control de flujo.
foreach (string Flujo
in Enum.GetNames(typeof(Handshake
))) {
comboBox_Control_de_flujo.Text = "None";
comboBox_Control_de_flujo.Items.Add(Flujo);
}
textBox_Read_time_out.Text = "-1";
textBox_Write_time_out.Text = "-1";
comboBox_DiscardNull.Items.Add("False");
comboBox_DiscardNull.Items.Add("True");
comboBox_DiscardNull.SelectedIndex = 0;
comboBox_DtrEnable.Items.Add("False");
comboBox_DtrEnable.Items.Add("True");
comboBox_DtrEnable.SelectedIndex = 0;
comboBox_RtsEnable.Items.Add("False");
comboBox_RtsEnable.Items.Add("True");
comboBox_RtsEnable.SelectedIndex = 0;
textBox_ParityReplace.Text = "63";
textBox_ReceivedBytesTrheshold.Text = "1";
textBox_ReadBufferSize.Text = "4096";
textBox_WriteBufferSize.Text = "2048";
// Añade puertos disponibles físicos y virtuales.
serialPort1.BaudRate = (int)Int16.Parse(comboBox_Bit_por_segundo.Text.ToString());
serialPort1.PortName = comboBox_Puerto.Text.ToString();
serialPort1.DataBits = (int)Int16.Parse(comboBox_Bits_de_datos.Text.ToString());
serialPort1
.Parity = (Parity
)Enum.Parse(typeof(Parity
), comboBox_Paridad
.Text.ToString()); serialPort1
.StopBits = (StopBits
)Enum.Parse(typeof(StopBits
), comboBox_Bits_de_parada
.Text.ToString()); serialPort1
.Handshake = (Handshake
)Enum.Parse(typeof(Handshake
), comboBox_Control_de_flujo
.Text.ToString());
// Más configuraciones.
serialPort1.ReadTimeout = (int)Int16.Parse(textBox_Read_time_out.Text.ToString());
serialPort1.WriteTimeout = (int)Int16.Parse(textBox_Write_time_out.Text.ToString());
serialPort1.DiscardNull = Convert.ToBoolean(comboBox_DiscardNull.Text.ToString());
serialPort1.DtrEnable = Convert.ToBoolean(comboBox_DtrEnable.Text.ToString());
serialPort1.ParityReplace = Convert.ToByte(textBox_ParityReplace.Text.ToString());
serialPort1.RtsEnable = Convert.ToBoolean(comboBox_RtsEnable.Text.ToString());
serialPort1.ReadBufferSize = (int)Int16.Parse(textBox_ReadBufferSize.Text.ToString());
serialPort1.WriteBufferSize = (int)Int16.Parse(textBox_WriteBufferSize.Text.ToString());
}
private void button_Conectar_Puerto_Click(object sender, EventArgs e)
{
if(!serialPort1.IsOpen)
{
serialPort1.Open();
Conectado = true; // Cariable de clase boleana para controlar si el puero lo abro yo o no.
button_Conectar_Puerto.Text = "DESCONECTAR";
button_Conectar_Puerto.BackColor = Color.Green;
}
else
{
if (Conectado)
{
serialPort1.Close();
Conectado = false;
button_Conectar_Puerto.Text = "CONECTAR";
button_Conectar_Puerto.BackColor = Color.Red;
}
else
{
// Esta ocupado por otro programa muestra mensaje y no hacer nada
label_Mensajes_de_error.Text = "Puerto ocupado o no lo encuentra.";
}
}
}
// Detecta USB o puerto serie virtual cuando lo conecta y desconecta del cable.
protected override void WndProc(ref Message USB)
{
if (USB.Msg == 0x219)
{
comboBox_Puerto.DataSource = SerialPort.GetPortNames();
}
base.WndProc(ref USB); // Detecta si hay cambios en el usb y si los hay los refleja.
}
}
}