• Система автоматизации с открытым исходным кодом на базе 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…
 
Последнее редактирование:
Сверху Снизу