从C / C ++扫描BLE设备

从“蓝牙设备访问指南” ,我读过蓝牙API应该可以从C或C ++访问。 我在IOBluetooth框架中找到了一些与蓝牙相关的C-header(IOBluetoothUserLib.h,Bluetooth.h),它包含用于定义搜索creteria的枚举和数据,但是我找不到任何采用这种枚举或数据结构的函数作为参数。 根据文档,我将不得不创建一个CBCentralManager但我找不到从C或C ++这样做的方法。

背景:我们使用OS / X作为开发平台,用于开发支持BLE的微控制器。 要更新此微控制器上的固件,我想编写一个BLE引导加载程序,我希望有一个命令行客户端来更新固件。 所有的代码都是用C ++编写的,我不想为这个小任务学习objectiv-C。

任何指针,文档,示例?

谢谢

托斯滕

根据文档,我将不得不创建一个CBCentralManager但我找不到从C或C ++这样做的方法。

您引用的文档适用于经典蓝牙,IOBluetooth框架具有一些function。 CBCentralManager是CoreBluetooth的管理员,仅适用于蓝牙LE。

对于经典蓝牙,您需要的管理器是来自IOKit框架的HID管理器,其文档可在此处找到。 如果你四处搜索,你会发现很多关于IOKit和IOHIDManager( 1,2 )的C ++用法的例子。

IOKit实际上可以为您提供所需的所有function,但IOBluetooth提供了一些蓝牙特定的function。 从开发蓝牙应用程序 :

虽然您不需要使用蓝牙API来访问HID级设备,但您可以选择使用蓝牙框架中的function或方法来增强用户体验。 例如,您的应用程序可以提供特定于蓝牙的信息,以便用户知道设备是否不支持特定服务。

我同意Henrik你需要一些胶水。 看看RedBearLab的工作和精确到课堂。

ofxBLE. h/mm // C++ interface // // (Obj-C may be a superset of C, but this just makes interopability // easier with oF) class ofxBLE { protected: ofxBLEDelegate *btDelegate; public: ofxBLE(); ~ofxBLE(); void scanPeripherals(); void sendPosition(uint8_t x, uint8_t y); bool isConnected(); }; ... - (void)bleDidDisconnect { NSLog(@"->Disconnected"); } - (void)bleDidReceiveData:(unsigned char *)data length:(int)length { } @end // = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = //= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = // C++ class implementation ofxBLE::ofxBLE() { btDelegate = [[ofxBLEDelegate alloc] init]; } ofxBLE::~ofxBLE() { } void ofxBLE::scanPeripherals(){ [btDelegate scanForPeripherals]; } void ofxBLE::sendPosition(uint8_t x, uint8_t y) { // position should be NORMALIZED to between 0 and 255 BEFORE // passing into this method! [btDelegate sendPositionX:x withY:y]; }