iphone应用连接CC2540问题
hi,各位大侠!
请教一个问题:我有两块开发板分别跑HostTestApp和SimpleBLEPeripheral工程的hex文件,通过BTool双方可以正常通信。BTool先扫描到外设的mac,然后建立连接,在通过UUID进行控制操作,这些操作都正常没问题。
我的问题是:我看iphone上面的代码它的连接步骤好像不同,iphone并不是先扫描mac地址,在建立连接;而是直接通过扫描UUID;请问一下:iphone为什么不需要先扫描到mac地址,然后在建立连接。HostTestApp是否也可以像iphone应用一样直接扫描UUID,或者是ble sdk中有类似的范例?iphone这种模式对应的外设工程是否也有类型的范例呢,请告知?还有我看博通发布的android ble也是通过mac建立连接的,能否解释一下,这两种方式有什么区别?
Hi
iPhone也扫描MAC地址, 只是iPhone没有把这个接口开放给IOS应用层, 不会把扫描到的mac地址往上面报告, 而是产生一个UUID报告给应用层.
本质上, 到了最底层, 一切操作, 比如说建立连接, 最终都是通过mac地址来的.
谢谢yan的解答,我还有个疑问:如果都多个相同的CC2540设备广播出来的UUID相同,在连接的时候怎么区分是哪个对应的设备啊
CC2540不广播UUID, IOS查找到的是CC2540的mac地址. 每个mac地址都是唯一的, 不一样.
通过不同mac地址, IOS针对不同CC2540产生不同UUID, 用以区分.
应该不是那样的吧,在SimpleBLEPeripheral工程的simpleBLEPeripheral.c中有这样的定义:
static uint8 advertData[] =
{
// Flags; this sets the device to use limited discoverable
// mode (advertises for 30 seconds at a time) instead of general
// discoverable mode (advertises indefinitely)
0x02, // length of this data
GAP_ADTYPE_FLAGS,
DEFAULT_DISCOVERABLE_MODE | GAP_ADTYPE_FLAGS_BREDR_NOT_SUPPORTED,
// service UUID, to notify central devices what services are included
// in this peripheral
0x07, // length of this data
GAP_ADTYPE_16BIT_MORE, // some of the UUID's, but not all
LO_UINT16( SIMPLEPROFILE_SERV_UUID ),
HI_UINT16( SIMPLEPROFILE_SERV_UUID ),
LO_UINT16( TEST_SERVICE_UUID ),
HI_UINT16( TEST_SERVICE_UUID ),
LO_UINT16( ENABLE_SERVICE_UUID ),
HI_UINT16( ENABLE_SERVICE_UUID ),
};
这个就是定义CC2540外设的广播数据吧,里面就定义了有UUID,而且我用Packet Sniffer也抓到了广播出来的数据确实是有UUID的,UUID应该不是iphone自己生成的。
附件中有我抓到的广播数据,AdvData中就有UUID
这个UUID只是服务的UUID, 并不是IOS为区别设备产生的UUID.
这个不会影响IOS去区分设备. 最终IOS设备还是靠mac地址来区分外设的.
你好。怎样才能在ios端获取cc2540的mac地址,而不是经过转换的uuid
hi shuyong,
iOS 不会把对方的mac地址传送到应用层, 处于某些安全考虑.
那请问如何确定硬件的唯一性?如果我们采购了CC2540研制成某种产品,app如何确定设备是我们研发的?
请问:
怎么做,才能搜索到iphone 发出的广播信息,cc2540能同时工作在host和device状态吗?或者说相互切换,如果可以,应该怎么做