Использование BlueZ , который
является официальным Linux стеком Bluetooth
Я хотел бы знать, какой из двух приведенных ниже методы лучше подходят для обнаружения присутствия устройства поблизости. Точнее, я хочу периодически сканировать устройство Bluetooth (не BLE => рекламные пакеты не отправляются).
Я нашел два способа его обнаружения:
1.) Использование l2ping
# l2ping BTMAC
2.) Использование hcitool
# hcitool name BTMAC
Оба подхода работают.
Я хотел бы знать, какой подход разрядит больше батареи отсканированного устройство?
Глядя на решение № 1 ( источник l2ping ):
Он использует стандартный вызов сокета connect
для подключения к удаленному устройству, затем использует send
команда для отправки данных на него:
send(sk, send_buf, L2CAP_CMD_HDR_SIZE + size, 0)
Теперь L2CAP_CMD_HDR_SIZE
равно 4, а по умолчанию size
равно 44, поэтому всего 48 байтов отправляются и возвращаются с L2CAP_ECHO_REQ
.
Для hcitool я только что нашел точку входа:
int hci_read_remote_name(int dd, const bdaddr_t *bdaddr, int len, char *name, int to);
Мои вопросы:
- , какой из этих подходов лучше (менее энергозатратен) для удаленного устройство? Если есть какая-либо разница.
- Должен ли я уменьшить размер l2ping? Какой должен быть минимум?
- Правильно ли мое предположение, что
hci_read_remote_name
также подключается к удаленному устройству и отправляет ему какой-то запрос на получение его имени?