Номер детали: CC2640R2F
Инструмент / программное обеспечение: Code Composer Studio
Я работаю над проектом, и в моем проекте CC2640R2F выполняет рекламу и сканирование.Я использую пользовательский сервис BLE для получения данных из приложения (Android или iOS) в CC2640R2F.Всякий раз, когда я подключаю устройство с BLE Scanner в Android, я получаю все услуги и все характеристики, и я также могу отправлять и получать данные без каких-либо проблем.Это также работает в моем приложении для Android.
Но всякий раз, когда я подключаю устройство CC2640R2F к сканеру BLE в приложении iOS, устройство подключается, но я не получаю никаких услуг или характеристик в приложении.Та же ситуация и с нашим разработанным приложением ios.Почему это происходит?Если я получаю все вещи на Android, то это также должно работать на iOS.
Снимок экрана приложения Android сканера BLE: ![Screenshot of Ble scanner Android app](https://i.stack.imgur.com/a2h4d.jpg)
Приложение iOS Сканер BLE ![iOS app BLE scanner](https://i.stack.imgur.com/a2h4d.jpg)
Код для проверки, включен ли Bluetooth и сканирования периферийных устройств: [! [Код для проверки, включен ли Bluetooth и сканирования периферийных устройств] [3]] [3]
Код для подключения к устройству при обнаружении периферийного устройства: [! [Код для подключения к устройству при обнаружении периферийного устройства] [4]] [4]
Код для поиска служб после устройстваподключен (если найдены службы, то он будет прерывать таймер (), иначе поиск службы снова):
![Code to search for services after the device is connected](https://i.stack.imgur.com/7VNz2.jpg)
func centralManagerDidUpdateState (_ central: CBCentralManager){print ("--- centralManagerDidUpdateState")
if central.state == CBManagerState.poweredOn {
debugPrint("poweredOn")
let serviceUUIDs:[AnyObject] = [serviceCBUUID_READ]
let lastPeripherals = centralManager.retrieveConnectedPeripherals(withServices: serviceUUIDs as! [CBUUID])
if lastPeripherals.count > 0{
let device = lastPeripherals.last! as CBPeripheral;
deviceX = device;
centralManager.connect(deviceX, options: nil)
if(device.state == .disconnected){
self.alertShowing(msg: "Device is disconnected restart the device and connect again.")
}
}
else {
centralManager.scanForPeripherals(withServices: nil, options: nil)
}
debugPrint(lastPeripherals)
} else if(central.state == CBManagerState.poweredOff) {
self.alertShowing(msg: "Make sure that your bluetooth is turned on.")
}
else if(central.state == CBManagerState.unsupported) {
self.alertShowing(msg: "This device is unsupported.")
}else{
self.alertShowing(msg: "Try again after restarting the device.")
}
}
// DidDiscoverPeripheral
func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
if(peripheral.name == "Peripheral Observer") || (peripheral.name == "BLE Device"){
if let services = peripheral.services{
for service in services{
debugPrint(service)
}
}
debugPrint("advertisementData :\(advertisementData)")
deviceX = peripheral
peripheral.delegate = self
centralManager.stopScan()
centralManager.connect(peripheral)
}
}
// внутри didConnect
func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) {
debugPrint("Connected")
var i = 0
timerForService = Timer.scheduledTimer(withTimeInterval: 1, repeats: true, block: { (timer) in
if(self.service_Read == nil) && (self.service_Write == nil){
i += 1
if(i%2 == 1){
debugPrint("loop1")
peripheral.discoverServices(nil)
self.deviceX!.discoverServices(nil)
}else if( i&2 == 0){
debugPrint("loop0")
self.deviceX!.discoverServices([self.serviceCBUUID_READ, self.serviceCBUUID_Write])
}
}else{
self.timerForService.invalidate()
}
})
}