• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Включать/выключать AP без разрыва соединения STATION

sharikov

Active member
Дано: STATION соединен, поднято соединение TCP, AP выключена. Необходимо по событию включить/выключать AP не разрывая ранее установленное соединение STATION.
Т.е нужна прозрачная смена режимов RTW_MODE_STA <--> RTW_MODE_STA_AP.
Возможно ли такое в принципе ?

Смена режима через wifi_run ведет к отключению всех интерфейсов и их инициализации заново с инициализацией lwip, соединением Station, стартом dhcp... Это приведет к разрыву установленного TCP соединения что мне нежелательно.
В sdk не обнаружил деинициализации одиночного интерфейса - есть только деинициализация всего сразу. На уровне lwip гасить обработку не вариант - надо отрубать AP полностью.
 

pvvx

Активный участник сообщества
wifi_run(mode) сделана для проекта Web-свалки, а там это не требовалось (требовалось сокращение объема действий и кода при вкл/переключении WiFi).
Вам надо инициализировать оба, назовем "драйвера WiFi" - для AP и ST.
Есть функции останова данных драйверов. При их останове, возможно, потребуется и "коммутация" LwIP...
 

sharikov

Active member
wifi_run(mode) сделана для проекта Web-свалки, а там это не требовалось (требовалось сокращение объема действий и кода при вкл/переключении WiFi).
Вам надо инициализировать оба, назовем "драйвера WiFi" - для AP и ST.
Есть функции останова данных драйверов. При их останове, возможно, потребуется и "коммутация" LwIP...
Коммутация lwip не потребуется потому что STA не переезжает с нулевого интерфейса. Потребовалось бы при выключении STA и переходе в только AP но это не мой случай.
Есть функции
int rltk_wlan_init(int idx_wlan, rtw_mode_t mode);
void rltk_wlan_deinit(void);
как видно инициализировать интерфейсы можно индивидуально а вот деинициализировать только все сразу.
Можно ли это обойти - вопрос.
 

pvvx

Активный участник сообщества
как видно инициализировать интерфейсы можно индивидуально а вот деинициализировать только все сразу.
Можно ли это обойти - вопрос.
Там бардак и деинициализация была сделана по флагам двух драйверов, а проверка отключения WiFi из других процедур производиться иногда всего по первому... Я туда залез, пытался переписать оболочку управления*, но потом бросил и откатился назад из-за выхода нового SDK, т.к. Ameba сменили структуры данных в драйверах - они увеличились на новые компоненты, хотя в старых не используется и более 1/3 полей... Только память выжирают...

* + убирал задержки деинициализации для автономных применений. Иначе там шаг ожидания флага отключения стоял типа 200 ms, хотя деинициализация происходит за пару ms, если у вас закрыты все буфера предыдущих транзакций заранее...

PS: Если вы что-то делаете на продажу или серийно, то смысл там ковыряться есть (средств для "реверса" и отладки на ARM много и они развиты). А если просто поиграться, тогда - нет. В любой момент может выйти новый бардачек от Ameba…
 
Последнее редактирование:
Сверху Снизу