Я изучаю требования для создания потокобезопасной библиотеки C ++ BLE: https://github.com/edrosten/libblepp
Мне нужна помощь в том, как я могу подключиться к нескольким устройствам BLE или как Мне нужно сериализовать мои задачи (несколько записей).
С помощью gatttool можно одновременно открывать (и подключаться) несколько устройств BLE.
Если я использую эту библиотеку, я должен Я создаю несколько экземпляров BLEGATTStateMachine
?
В их неблокирующем примере (https://github.com/edrosten/libblepp/blob/master/examples/bluetooth.cc):
//Writes are usually available, so only check for them when the
//state machine wants to write.
if(gatt.wait_on_write())
FD_SET(gatt.socket(), &write_set);
int result = select(gatt.socket() + 1, &read_set, &write_set, NULL, & tv);
if(FD_ISSET(gatt.socket(), &write_set))
gatt.write_and_process_next();
Хорошо, если мне есть что запись, и запись становится доступной, он вызывает write_and_process_next()
.
Однако в https://github.com/edrosten/libblepp/blob/master/src/blestatemachine.cc#L476:
Кажется, он обрабатывает только if(state == Connecting)
. Итак, если я уже подключен, этот вызов, похоже, ничего не делает.
Однако есть также send_write_request
, который вызывает dev.send_write_request
, который в конечном итоге заканчивается записью сокета (https://github.com/edrosten/libblepp/blob/master/src/bledevice.cc#L119):
int ret = write(sock, buf.data(), len);
Теперь мои вопросы:
- как подключиться к нескольким устройствам?
- Достаточно ли синхронизировать эти
write
вызывает сокет, чтобы сделать его потокобезопасным?