Обновление имени устройства Bluetooth

У меня есть устройство bluetooth blueNRG на прошивке STM32 MCU, для которой я программирую. Я хочу, чтобы пользователь мог изменить имя, под которым устройство отображается через Bluetooth. Приложение отправляет новое имя на устройство, устройство сохраняет его и при следующем запуске при инициализации bluetooth устанавливает его путем обновления характеристики имени устройства:

aci_gatt_update_char_value(service_handle, dev_name_char_handle, 0,
            strlen(name), (uint8_t *)name);

Однако после установки нового имени и перезагрузки устройства (и приложения iOS) приложение iOS продолжает видеть его со старым именем:

func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
    let deviceName = peripheral.name // sees it as old one
}

Но после того, как приложение подключается и отключается от устройства, при следующей попытке подключения оно видит новое имя, даже если устройство не было перезагружено. Я провел эксперимент с двумя iPhone и получил следующий результат:

Предположим, что текущее имя устройства - oldName. iPhone1 подключается к устройству и меняет его имя на newName. Перезагрузка устройства, перезапуск приложения iPhone1. Пытается подключиться с iPhone1 - он видит устройство как oldName. iPhone2 также видит устройство как oldName. Подключение к устройству с iPhone1, отключение и повторная попытка подключения с iPhone1 - теперь он видит его как newName. Тем временем iPhone2 продолжает видеть его как oldName, даже после перезапуска приложения iPhone2. Таким образом, в то же время iPhone1 видит его как newName, а iPhone2 как oldName. После выполнения процедуры подключения и отключения на iPhone2 он также начинает видеть его как newName.

Может кто-нибудь объяснить мне это очень загадочное поведение, пожалуйста? Почему имя устройства обновляется на каждом iPhone только после того, как он подключается и отключается от устройства?

0 ответов

Другие вопросы по тегам