Symbol.WPAN.Bluetooth传输数据的示例

我正在尝试使用符号设备的EMDK附带的Symbol.WPAN.Bluetooth。

有没有人碰巧有一个传输数据的工作示例?

Symbol的示例只是将设备配对。 (他们显然认为在个人区域网络示例中并不真正需要传输数据。)

无论如何,我知道这是一个很长的镜头,但如果有人让这个工作,我很乐意看到一些代码。

这就是我的尝试。 我有一个设备按下按钮1和另一个设备按下按钮2。 读取值始终为零长度字节数组。

using System.Text; using System.Windows.Forms; using Symbol.WPAN; using Symbol.WPAN.Bluetooth; namespace SmartDeviceProject1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Bluetooth bluetooth = new Bluetooth(); if (bluetooth.IsEnabled != true) { bluetooth.Enable(); bluetooth.RadioMode = BTH_RADIO_MODE.BTH_DISCOVERABLE_AND_CONNECTABLE; } RemoteDevice connectedDevice = null; foreach (RemoteDevice remoteDevice in MakeEnumerable(bluetooth.RemoteDevices)) { if ((remoteDevice.Name == "WM_Dan") && (remoteDevice.IsPaired == false)) { remoteDevice.Pair(); connectedDevice = remoteDevice; } } string test; test = "Testing this out"; ASCIIEncoding encoding = new ASCIIEncoding(); byte[] encTest = encoding.GetBytes(test); if (connectedDevice != null) { connectedDevice.WriteTimeout = 20000; connectedDevice.Write(encTest); } } public static IEnumerable MakeEnumerable(RemoteDevices devices) { for (var i = 0; i < devices.Length; i++) { yield return devices[i]; } } private void button2_Click(object sender, EventArgs e) { Bluetooth bluetooth = new Bluetooth(); if (bluetooth.IsEnabled != true) { bluetooth.Enable(); bluetooth.RadioMode = BTH_RADIO_MODE.BTH_DISCOVERABLE_AND_CONNECTABLE; } RemoteDevice connectedDevice = null; foreach (RemoteDevice remoteDevice in MakeEnumerable(bluetooth.RemoteDevices)) { if ((remoteDevice.Name == "WM_Dan2") && (remoteDevice.IsPaired == false)) { remoteDevice.Pair(); connectedDevice = remoteDevice; } } string test; test = "Testing this out"; ASCIIEncoding encoding = new ASCIIEncoding(); byte[] encTest = encoding.GetBytes(test); byte[] encTest2; string test2; if (connectedDevice != null) { connectedDevice.ReadTimeout = 20000; encTest2 = connectedDevice.Read(encTest.Length); test2 = encoding.GetString(encTest2, 0, encTest2.Length); MessageBox.Show(test2); } } } } 

我放弃了使用内置的com端口连接并在连接上打开了一个SerialPort对象。

 SerialPort sp = new SerialPort(); sp.PortName = "COM" + connectedDevice.LocalComPort.ToString(); sp.BaudRate = 9600; sp.DataBits = 8; sp.Parity = Parity.None; sp.StopBits = StopBits.One; sp.Open(); sp.Open(); sp.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceived); sp.ErrorReceived += new SerialErrorReceivedEventHandler(sp_ErrorReceived); sp.WriteLine(textBoxSend.Text); 

我还发现即使他们的文档说LocalComPort是自动分配的,但这并不总是事实。 最好使用他们的BTExplorer来设置它。

同样,OpenComPort可以在不应该使用的情况下工作 – 使用Reflector它显然是错误的。 检查::CreateFile("COM" + port...)的返回值是否为0而不是-1( INVALID_HANDLE_VALUE

我不知道这是否可以帮助任何人,但这是我几年前写的一段旧代码。

您必须清理它以使其适用于您的应用程序。 我的应用程序有一个TextBox控件,它从Global类读取并记录错误。 改变它与你拥有的东西一起工作,它应该基本上是好的。

 static class Scanner { const string _CODEFILE = "Scanner.cs - Scanner::"; static int _baud = 9600; static int _bits = 8; static string _dataIn = null; static string _port = "COM1"; static Parity _parity = Parity.None; static StopBits _stop = StopBits.One; static SerialPort _com1 = null; static TextBox _textbox = null; public enum ControlType { None, BadgeID, PartNumber, SerialNumber, WorkOrder }; static ControlType _control; public static bool Available { get { return ((_com1 != null) && (_com1.IsOpen)); } } public static bool Close { get { if (_com1 == null) return true; try { if (_com1.IsOpen) { _com1.Close(); } return (!_com1.IsOpen); } catch { } return false; } } public static string Open() { const string na = "Not Available"; if (_com1 == null) { string reset = Reset(); if (!String.IsNullOrEmpty(reset)) return reset; } try { _com1.Open(); return (_com1.IsOpen) ? null : na; } catch (Exception err) { return err.Message; } } static void ProcessData(string incoming) { _dataIn += incoming; if ((_control != ControlType.None) && (_textbox != null)) { bool ok = false; string testData = _dataIn.Trim(); switch (_control) { case ControlType.BadgeID: if (testData.Length == 6) { if (testData != BarCode.LOGOFF) { Regex pattern = new Regex(@"[0-9]{6}"); ok = (pattern.Matches(testData).Count == 1); } else { ok = true; } } break; case ControlType.PartNumber: if (testData.Length == 7) { Regex pattern = new Regex(@"[BCX][P057][0-9]{5}"); ok = (pattern.Matches(testData).Count == 1); } break; case ControlType.SerialNumber: if (testData.Length == 15) { Regex pattern = new Regex(@"[BCX][P057][0-9]{5} [0-9]{4} [0-9]{2}"); ok = (pattern.Matches(testData).Count == 1); } break; case ControlType.WorkOrder: if (testData.Length == 6) { Regex pattern = new Regex(@"[0-9]{6}"); ok = (pattern.Matches(testData).Count == 1); } break; } if (ok) { _textbox.Text = testData; _textbox.ScrollToCaret(); _dataIn = null; } } } static string Reset() { if (_com1 != null) { try { if (_com1.IsOpen) { _com1.DiscardInBuffer(); _com1.Close(); } } catch (Exception err) { return err.Message; } Global.Dispose(_com1); _com1 = null; } try { _com1 = new SerialPort(_port, _baud, _parity, _bits, _stop); _com1.DataReceived += new SerialDataReceivedEventHandler(Serial_DataReceived); _com1.Open(); } catch (Exception err) { return err.Message; } return null; } public static void ScanSource(ref TextBox objTextBox, ControlType objType) { _textbox = objTextBox; _control = objType; _dataIn = null; } static void Serial_DataReceived(object sender, SerialDataReceivedEventArgs e) { ProcessData(_com1.ReadExisting()); } public static void Settings(string ComPort, int BaudRate, Parity ParityValue, int Bits, StopBits StopBit) { _port = ComPort; _baud = BaudRate; _parity = ParityValue; _bits = Bits; _stop = StopBit; } ///  /// Closes the COM Port /// COM Port routines are ready to add as soon as I am ///  static bool ComPortClose { get { if (_com1 == null) ComPortReset(); return ((_com1 == null) ? true : _com1.IsOpen ? false : true); } set { if (_com1 == null) ComPortReset(); else if (_com1.IsOpen) { _com1.DiscardInBuffer(); _com1.Close(); } } } ///  /// Opens the COM Port ///  static bool ComPortOpen { get { if (_com1 == null) ComPortReset(); return (_com1 == null) ? false : _com1.IsOpen; } set { if (_com1 == null) ComPortReset(); if ((_com1 != null) && (!_com1.IsOpen)) _com1.Open(); } } ///  /// Initialized the Serial Port on COM1 ///  static void ComPortReset() { if ((_com1 != null) && (_com1.IsOpen)) { _com1.Close(); _com1 = null; } try { _com1 = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One); } catch (IOException err) { Global.LogError(_CODEFILE + "ComPortReset", err); } } }