希望在Windows中编写蓝牙’hcitool’equivelant
发布时间:2020-12-14 05:25:13 所属栏目:Windows 来源:网络整理
导读:我在 Linux中使用了Bluez蓝牙堆栈,它带有一个方便的实用程序’hcitool’.希望在Windows中使用相同或相同的功能构建类似的东西.具体来说,’hcitool name MAC‘,显示指定的设备是否在范围内. 任何指导将不胜感激. 我有使用C/C++的Visual Studio 2010的Windows
我在
Linux中使用了Bluez蓝牙堆栈,它带有一个方便的实用程序’hcitool’.希望在Windows中使用相同或相同的功能构建类似的东西.具体来说,’hcitool name< MAC>‘,显示指定的设备是否在范围内.
任何指导将不胜感激. 我有使用C/C++的Visual Studio 2010的Windows SDK v7 谢谢. 解决方法
使用我的
32feet.NET库,如下所示.
编辑3月3日:我现在添加了代码,通过地址直接查找设备,而不是使用设备发现;所以这是一个简单的’新的BluetoothDeviceInfo(…)’. 看看是否找到了你想要的设备.这要求远程设备仅处于“可连接”模式,而前者要求它处于“可发现”模式. (顺便说一句,我已经将发现代码留在了原地.) 编辑3月8日:现在进行连接(使用SDP API)检查设备是否在范围内(并且处于可连接模式). using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using InTheHand.Net.Bluetooth; using InTheHand.Net; using InTheHand.Net.Sockets; using System.Diagnostics; using System.Net.Sockets; namespace hcitool { partial class Program { static bool infoRatherThanName; static BluetoothAddress _searchAddress; static int Main(string[] args) { if (args.Length < 1) { Console.WriteLine("Please specify command."); return 2; } var cmd = args[0]; switch (cmd) { case "name": infoRatherThanName = false; break; case "info": infoRatherThanName = true; break; //- case "dev": return ShowRadios(); //case "auth": // return CauseAuth(GETADDRESS()); default: throw new NotImplementedException("Command: '" + cmd + "'"); } if (args.Length < 2) { Console.WriteLine("Please specify device address."); return 2; } var addrS = args[1]; _searchAddress = BluetoothAddress.Parse(addrS); // var dev = new BluetoothDeviceInfo(_searchAddress); bool isInRange = GetCanConnectTo(dev); if (isInRange) { PrintDevice(dev); } else { Console.WriteLine("Can't see that device."); } // Console.WriteLine("simple"); return Simple(); //return Fancier(); } //---- private static int ShowRadios() { BluetoothRadio[] list; try { list = BluetoothRadio.AllRadios; } catch (Exception) { return 1; } Debug.Assert(list.Length != 0,"Expect zero radios case to raise an error."); foreach (var curR in list) { Console.WriteLine("* {0} '{1}'",curR.LocalAddress,curR.Name); Console.WriteLine("{0}",curR.SoftwareManufacturer); Console.WriteLine("{0}",curR.Manufacturer); Console.WriteLine("{0}",curR.Mode); }//for return 0; } private static int CauseAuth(BluetoothAddress addr) { BluetoothSecurity.PairRequest(addr,null); return 0; } //---- static int Simple() { BluetoothDeviceInfo[] devices; BluetoothDeviceInfo foundDev = null; var cli = new BluetoothClient(); // Fast: Remembered/Authenticated devices = cli.DiscoverDevices(255,true,false,false); SimpleCheckDevice(devices,ref foundDev); if (foundDev == null) { // Slow: Inquiry cli.DiscoverDevices(255,false); SimpleCheckDevice(devices,ref foundDev); } // if (foundDev != null) { return 0; } else { return 1; } } private static void SimpleCheckDevice(IEnumerable<BluetoothDeviceInfo> devices,ref BluetoothDeviceInfo foundDev) { foreach (var cur in devices) { if (cur.DeviceAddress == _searchAddress) { foundDev = cur; PrintDevice(cur); } }//for } private static void PrintDevice(BluetoothDeviceInfo cur) { Console.WriteLine("* Found device: '{0}' ",cur.DeviceName); if (infoRatherThanName) { try { var vs = cur.GetVersions(); Console.WriteLine(vs.Manufacturer); Console.WriteLine(vs.LmpVersion); Console.WriteLine(vs.LmpSubversion); Console.WriteLine(vs.LmpSupportedFeatures); } catch (Exception ex) { Console.WriteLine("Failed to get remote device versions info: " + ex.Message); } } } //---- private static bool GetCanConnectTo(BluetoothDeviceInfo device) { bool inRange; Guid fakeUuid = new Guid("{F13F471D-47CB-41d6-9609-BAD0690BF891}"); try { ServiceRecord[] records = device.GetServiceRecords(fakeUuid); Debug.Assert(records.Length == 0,"Why are we getting any records?? len: " + records.Length); inRange = true; } catch (SocketException) { inRange = false; } return inRange; } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 是否可以使用非特定网关分配Windows CE静态IP?
- Windows代码编辑器编译/解释大多数语言ala CodeRunner?
- Windows 8 WinRT – C或C .NET?
- wpf – Windows 10中关闭/最小化/减少按钮的字体系列是什么
- 利用windows api共享内存通讯
- 分离Windows窗体和类C#
- windows – IO完成端口是否在完成端口报告之前或之后生成新
- unity-container – Microsoft企业库中Unity应用程序块的用
- wpf – Crystal Reports:使用Crystal Reports的log4net.dl
- 在Windows下测量磁盘
推荐文章
站长推荐
热点阅读