1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137
|
using System;
using System.Text;
using System.Drawing;
using System.IO.Ports;
using System.Windows.Forms;
using System.IO;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
private SerialPort sp = new SerialPort();
public enum LogMsgType { Incoming, Outgoing, Normal, Warning, Error };
private Color[] LogMsgTypeColor = { Color.Blue, Color.Green, Color.Black, Color.Orange, Color.Red };
public Form1()
{
InitializeComponent();
sp.BaudRate = 9600;
sp.Parity = Parity.None;
sp.StopBits = StopBits.One;
sp.DataBits = 8;
sp.RtsEnable = true;
sp.Handshake = Handshake.None;
sp.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
}
private void button1_Click(object sender, EventArgs e)
{
bool erreur = false;
// Si le port est ouvert, il faut le fermer
if (sp.IsOpen) sp.Close();
else
{
// Réglage paramètre du port
sp.PortName = cmbPortName.Text;
try
{
// Ouvrir le port
sp.Open();
}
catch (UnauthorizedAccessException) { erreur = true; }
catch (IOException) { erreur = true; }
catch (ArgumentException) { erreur = true; }
if (erreur)
MessageBox.Show("Impossible d'ouvrir le port COM. Très probablement, il est déjà en cours d'utilisation, a été supprimé, ou n'est pas disponible.", "COM Port indisponible", MessageBoxButtons.OK, MessageBoxIcon.Stop);
else
MessageBox.Show("Connexion réussi", "Port disponible");
}
}
// Connexion à la fenêtre du terminal
private void Log(LogMsgType msgtype, string msg)
{
rtfTerminal.Invoke(new EventHandler(delegate
{
rtfTerminal.SelectedText = string.Empty;
rtfTerminal.SelectionFont = new Font(rtfTerminal.SelectionFont, FontStyle.Bold);
rtfTerminal.SelectionColor = LogMsgTypeColor[(int)msgtype];
rtfTerminal.AppendText(msg);
rtfTerminal.ScrollToCaret();
}));
}
//Convertit un tableau d'octets en une chaîne formatée de chiffres hexadécimaux.
private string ByteArrayToHexString(byte[] data)
{
StringBuilder sb = new StringBuilder();
foreach (byte b in data)
sb.Append(Convert.ToString(b, 16).PadLeft(2, '0').PadRight(3, ' '));
return sb.ToString().ToUpper();
}
static public string ReverseString(string str)
{
char[] charArray = str.ToCharArray();
Array.Reverse(charArray);
return new string(charArray);
}
public static string Reverse(string text)
{
string retour = "";
string[] str = text.Split(' ');
for (int i = 0; i < str.Length; i++)
{
retour += ReverseString(str[i]);
retour += " ";
}
return retour;
}
public void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
switch (e.EventType)
{
case SerialData.Chars:
{
// Si le port est ouvert, le fermer
if (!sp.IsOpen) return;
// Obtenir le nombre d'octets en attente dans le tampon du port
int bytes = sp.BytesToRead;
// Créez une zone tampon (tableau d'octets) pour stocker les données entrantes
byte[] buffer = new byte[bytes];
// Lire les données du port et de le stocker dans la mémoire tampon
sp.Read(buffer, 0, bytes);
// Montrer à l'utilisateur les données entrantes dans un format hexadécimal
Log(LogMsgType.Incoming, ByteArrayToHexString(buffer));
string s = Reverse(ByteArrayToHexString(buffer)).Substring(0, 1);
MessageBox.Show(s);
break;
}
case SerialData.Eof:
{
sp.Close();
break;
}
}
}
}
} |
Partager