using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO.Ports; using System.ComponentModel; namespace CPF_Console { public class BluetoothSP { private SerialPort btSerialPort = new SerialPort(); private readonly Form1 form1; public BluetoothSP(Form1 form1) { this.form1 = form1; btSerialPort.DataReceived += btSerialPort_DataReceived; backgroundWorker.DoWork += backgroundWorker_DoWork; } Queue portQ = new Queue(); private BackgroundWorker backgroundWorker = new BackgroundWorker(); void btSerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e) { int bytesToRead = btSerialPort.BytesToRead; char[] inBuffer = new char[bytesToRead]; btSerialPort.Read(inBuffer, 0, bytesToRead); for(int i = 0; i < bytesToRead; i++) portQ.Enqueue(inBuffer[i]); if (inBuffer.Contains('\n')) backgroundWorker.RunWorkerAsync(); //The DoWork event handler is defined in the serial port constructor } void backgroundWorker_DoWork(object sender, DoWorkEventArgs e) { //Dequeue the characters and process the message(s) here; } public void init() { updatePorts(); form1.BaudRateCmb.Text = "115200"; form1.DataBitsCmb.Text = "8"; form1.ParityCmb.Text = "None"; form1.StopBitsCmb.Text = "1"; } private void updatePorts() { string[] ports = SerialPort.GetPortNames(); Array.Sort(ports); foreach (string port in ports) { form1.PortNameCmb.Items.Add(port); form1.PortNameCmb.Text = ports[0]; } } public void openPort() { if (!btSerialPort.IsOpen) { try { form1.OpenSP = "Close SP"; btSerialPort.PortName = Convert.ToString(form1.PortNameCmb.Text); btSerialPort.BaudRate = Convert.ToInt32(form1.BaudRateCmb.Text); btSerialPort.DataBits = Convert.ToInt16(form1.DataBitsCmb.Text); btSerialPort.StopBits = (StopBits)Enum.Parse(typeof(StopBits), form1.StopBitsCmb.Text); btSerialPort.Parity = (Parity)Enum.Parse(typeof(Parity), form1.ParityCmb.Text); btSerialPort.Open(); } catch { form1.showMessage("Error Opening BT Serial Port"); } } else { form1.OpenSP = "Open SP"; btSerialPort.Close(); } } public void closePort() { btSerialPort.Close(); } public void sendGo() { btSerialPort.Write("$go\r\n"); } public void sendRecoveryTrue() { btSerialPort.Write("$recoveryTrue\r\n"); } public void sendRecoveryFalse() { btSerialPort.Write("$recoveryFalse\r\n"); } public void sendExit() { btSerialPort.Write("$exit\r\n"); } } }