приобрести семафор для антенны esp32 (Bluetooth / Wi-Fi Dualmode) - PullRequest
6 голосов
/ 26 апреля 2019

Я пытаюсь создать приложение esp32, в котором у меня одновременно включены Bluetooth и Wi-Fi.

Bluetooth используется с профилем a2dp, где esp является приемником.После получения данных они должны быть опубликованы через сокет UDP в качестве широковещательной рассылки в сеть.

Проблема в антенне.И BT, и Wi-Fi делятся этим.Поток a2dp, кажется, постоянно получает антенну и выпускает ее очень редко (~ 2 пакета / мин, у меня ~ 3000 пакетов / мин).

Итак, мой вопрос: есть ли какой-то семафор, который можно приобрести, чтобы иметь полный контроль над антенной?Таким образом, мой сокет сможет отправлять данные в сеть?

Я использую свой esp32 с freeRTOS.Библиотека FreeRTOS написана на C, но я пытаюсь обернуть все в C ++.Тем не менее, я думаю, что эта проблема связана с C lib, поэтому я помечаю ее как C.

Я открыт для любых предложений, как это сделать.Заранее спасибо.

ОБНОВЛЕНИЕ :

Я использую release/v3.3 из официального репо esp-idf.

У меня есть: CONFIG_SW_COEXIST_ENABLE=yи CONFIG_SW_COEXIST_PREFERENCE_WIFI=y

Я не могу найти CONFIG_ESP32_WIFI_SW_COEXIST_ENABLE в моей конфигурации.

Упомянутая конфигурация не работает.

Я попытался прочитать сообщение, но не могу найти "scan_window" или "scan_interval" в моей библиотеке.Было написано, что оно находится где-то в gap_api, но не может его найти.

Вот мой код + config: https://github.com/Dimfred/esp32_bt_streamer

Задача клиента сокета, которая должна транслироватьa2dp_msg, запускается здесь: https://github.com/Dimfred/esp32_bt_streamer/blob/master/main/app/event_handler.cpp#L22

Все события, извлеченные из станции / точки доступа / bluetooth / a2dp, все фиксируются в event_handler.hpp / cpp

1 Ответ

3 голосов
/ 28 мая 2019

Как вы видели, Bluetooth имеет более высокий приоритет по WIFI.

Взгляните на CONFIG_SW_COEXIST_ENABLE и убедитесь, что он включен. Вам также необходимо настроить CONFIG_SW_COEXIST_PREFERENCE на WIFI. Пожалуйста, смотрите страницу для дополнительных флагов, которые вы можете обновить в зависимости от вашего приложения.

Если вы хотите оставить аппаратное обеспечение ответственным за обработку сосуществующих устройств (BL и WIFI), вы можете отключить CONFIG_SW_COEXIST_ENABLE и уменьшить окно сканирования и увеличить интервал сканирования BL, чтобы оставить время для получения WIFI доступ к антенне. См. сообщение для более подробной информации.

Чтобы ответить на ваш оригинальный вопрос о возможном семафоре / мьютексе. Я сомневаюсь, что есть один доступный для вас, и я бы оставил API (программное обеспечение) для обработки сосуществующих модулей, обращающихся к антенне. Но вы всегда можете проверить, что делает код после установки CONFIG_SW_COEXIST_ENABLE (флаг переименован в CONFIG_ESP32_WIFI_SW_COEXIST_ENABLE). См https://github.com/espressif/esp-idf/blob/81ca1c01395f604972fbf141cfbe49764a746023/components/esp_wifi/src/phy_init.c

...