#1 2023-07-10 02:24:24

Пройдисвіт
Учасник
Зареєстрований: 2023-07-10
Повідомлень: 2

ESP32. Як встановити Class of Device для Bluetooth classic контролера?

Власне, питання в назві теми. Намагаюся присвоїти контролеру сервіс - аудіо, клас - аудіо/відео, підклас навушники. Біти встановлюю, як написано в Assigned Numbers. Через Wireshark перевіряю отриманий від ESP пакет, там все по 0. Тобто невідомий пристрій, невідомий клас. Bluedroid вміє встановлювати коректно, але там так все закручено, що не зміг знайти в його коді формування пакету. Тож що роблю не так?

void hciSendSetDeviceClass()
{
    uint8_t hci_cmd_buf[2 + 4 + 3];
    uint8_t *buf = hci_cmd_buf;

    setPackSize(buf, 4 + 3);
    uint8ToBuf(buf, PACK_TYPE_CMD);
    setOpCode(buf, HCI_OGF_CONTROLLER, HCI_OCF_WRITE_DEVICE_CLASS);
    uint8ToBuf(buf, 3);
    uint8ToBuf(buf, 0b00100000);
    uint8ToBuf(buf, 0b00000100);
    uint8ToBuf(buf, 0b00011000);

    queuePacket(hci_cmd_buf);
}

Ось посилання на доку якщо що: https://www.ampedrftech.com/datasheets/ … nition.pdf

Остання редакція Пройдисвіт (2023-07-10 02:44:35)

Неактивний

#2 2023-07-10 08:08:08

Honey
Учасник
З Київ
Зареєстрований: 2020-09-26
Повідомлень: 415

Re: ESP32. Як встановити Class of Device для Bluetooth classic контролера?

setPackSize, uint8ToBuf, uint8ToBuf самі інкрементують вказівник buf, чи це покладається на програміста?

Активний

#3 2023-07-10 22:56:35

Пройдисвіт
Учасник
Зареєстрований: 2023-07-10
Повідомлень: 2

Re: ESP32. Як встановити Class of Device для Bluetooth classic контролера?

Honey пише:

setPackSize, uint8ToBuf, uint8ToBuf самі інкрементують вказівник buf?

Так, це мої функції. Тут проблема не в фізичному коді, а в логіці. Команда відправляється і навіть має якийсь вплив. Тому що без цієї команди, ПК взагалі не хоче відображати ESP32 в списку доступних пристроїв. Після застосування цієї команди, ESP починає відображатися як "Інше". Хоча очікується, що він буде відображатися як "Гарнітура". Порядок байт міняв, змін 0.
Якщо використовувати стандартний приклад з BTSerial, то контролер блютуз встановлюється як "Персональний комп'ютер". Тобто поміняти сервіс і клас можливо, але перечитавши купу інфи по HCI я так і не зрозумів, як це реалізувати. Скрізь говориться про 3 байти, хоча, очевидно, цього не достатньо. Потрібно ще щось додати в пакет команди, але я не розумію що саме. Тому і звернувся за допомогою.

Чому не хочу використовувати bluedroid, тому що він дуже тяжкий. Голий приклад займає близько 70% памяті. В той час, якщо писати тільки потрібний мені функціонал, код бібліотеки займає не більше 40%.

Остання редакція Пройдисвіт (2023-07-10 22:59:33)

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму