Прежде всего, моей целевой системой является Android.
Я создал приложение c ++ для связи с wpa_supplicant через интерфейс управления, предоставленный в виде файла wpa_ctrl.c (я включил заголовочный файл wpa_ctrl.h и связал его с библиотекой libwpa_client.so)
вот страница документации.
Все работало нормально, но вдруг на каждую отправляемую мной команду отвечает НЕИЗВЕСТНАЯ КОМАНДА, я полагаю, что команды, которые работают нормально (ping, list_networks, status и terminate), имеют общую вещь (возможно, им не нужно открывать wpa_supplicant .conf, который вызывает проблему на других командах)
вот как я открываю соединение:
this->ctrl = wpa_ctrl_open(this->socket.c_str());
вот как я отправляю команды:
s = wpa_ctrl_request(this->ctrl, cmd.c_str(), cmd.length(), this->_reply, &reply_len, msg_cb);
Подпись метода выше:
struct wpa_ctrl * wpa_ctrl_open(const char *ctrl_path);
int wpa_ctrl_request(struct wpa_ctrl *ctrl, const char *cmd, size_t cmd_len,
char *reply, size_t *reply_len,
void (*msg_cb)(char *msg, size_t len));
пример вывода:
PING
PONG
UNKNOWN COMMAND: MIB
UNKNOWN COMMAND: STATUS-VERBOSE
UNKNOWN COMMAND: PMKSA
UNKNOWN COMMAND: LOGON
UNKNOWN COMMAND: LOGOFF
UNKNOWN COMMAND: REASSOCIATE
UNKNOWN COMMAND: RECONNECT
UNKNOWN COMMAND: RECONFIGURE
LIST_NETWORKS
network id / ssid / bssid / flags
UNKNOWN COMMAND: DISCONNECT
UNKNOWN COMMAND: SCAN
UNKNOWN COMMAND: SCAN_RESULTS
UNKNOWN COMMAND: BSS
UNKNOWN COMMAND: ADD_NETWORK
STATUS
p2p_device_address=12:d3:8a:c8:34:ef
p2p_state=IDLE
wifi_display=1
ifname=p2p0
address=12:d3:8a:c8:34:ef
ifname=wlan0
address=10:d3:8a:c8:34:ef
UNKNOWN COMMAND: ADD_NETWORK
closed connection with wpa_supplicant.
Can not create Network
Вот это скриншот старой версии программы, работающей почти нормально:
любая помощь приветствуется.
РЕДАКТИРОВАТЬ: я протестировал программу на другом устройстве, и она работала хорошо. Но все еще сломанный на моем основном устройстве, вероятно, сброс к заводским настройкам решит это. Но я все еще хочу знать причину проблемы.
Проблема была в том, что имя интерфейса было неправильным.
Других решений пока нет …