mirror of
https://gitee.com/Lyon1998/pikapython.git
synced 2025-02-05 17:28:23 +08:00
141 lines
4.5 KiB
C
141 lines
4.5 KiB
C
#include "_network_WLAN.h"
|
|
#include "_network_NET.h"
|
|
#include "../pikascript-lib/PikaStdDevice/pika_hal.h"
|
|
#include "PikaStdData_List.h"
|
|
#include "PikaStdData_Tuple.h"
|
|
#include "_network_common.h"
|
|
|
|
void _network_WLAN___init__(PikaObj* self, int interface_id) {
|
|
pika_dev* hal_wifi = pika_hal_open(PIKA_HAL_WIFI, "WLAN0");
|
|
if (hal_wifi == NULL) {
|
|
return;
|
|
}
|
|
pika_hal_WIFI_config cfg = {0};
|
|
cfg.mode = interface_id;
|
|
_net_check_res(pika_hal_ioctl(hal_wifi, PIKA_HAL_IOCTL_CONFIG, &cfg));
|
|
obj_setPtr(self, "hal_dev", hal_wifi);
|
|
}
|
|
|
|
void _network_WLAN_connect(PikaObj* self, char* ssid, char* key) {
|
|
pika_dev* hal_wifi = _NET_OBJ_2DEV(self);
|
|
if (hal_wifi == NULL) {
|
|
return;
|
|
}
|
|
pika_hal_WIFI_connect_config conncfg = {0};
|
|
strcpy(conncfg.ssid, ssid);
|
|
strcpy(conncfg.password, key);
|
|
_net_check_res(
|
|
pika_hal_ioctl(hal_wifi, PIKA_HAL_IOCTL_WIFI_CONNECT, &conncfg));
|
|
return;
|
|
}
|
|
|
|
void _network_WLAN_connectWithBssid(PikaObj* self,
|
|
char* ssid,
|
|
char* key,
|
|
char* bssid) {
|
|
pika_dev* hal_wifi = _NET_OBJ_2DEV(self);
|
|
if (hal_wifi == NULL) {
|
|
return;
|
|
}
|
|
pika_hal_WIFI_connect_config conncfg = {0};
|
|
strcpy(conncfg.ssid, ssid);
|
|
strcpy(conncfg.password, key);
|
|
strcpy(conncfg.bssid, bssid);
|
|
_net_check_res(
|
|
pika_hal_ioctl(hal_wifi, PIKA_HAL_IOCTL_WIFI_CONNECT, &conncfg));
|
|
}
|
|
|
|
void _network_WLAN_disconnect(PikaObj* self) {
|
|
pika_dev* hal_wifi = _NET_OBJ_2DEV(self);
|
|
if (hal_wifi == NULL) {
|
|
return;
|
|
}
|
|
_net_check_res(pika_hal_ioctl(hal_wifi, PIKA_HAL_IOCTL_WIFI_DISCONNECT));
|
|
}
|
|
|
|
int _network_WLAN_isconnected(PikaObj* self) {
|
|
if (_network_NET_status(self) == PIKA_HAL_WIFI_STATUS_GOT_IP) {
|
|
return 1;
|
|
} else {
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
PikaObj* _network_WLAN_scan(PikaObj* self) {
|
|
pika_dev* hal_wifi = _NET_OBJ_2DEV(self);
|
|
if (hal_wifi == NULL) {
|
|
return NULL;
|
|
}
|
|
pika_hal_WIFI_scan_result* result = NULL;
|
|
_net_check_res(pika_hal_ioctl(hal_wifi, PIKA_HAL_IOCTL_WIFI_SCAN, &result));
|
|
if (NULL == result) {
|
|
return NULL;
|
|
}
|
|
PikaObj* scan_list = newNormalObj(New_PikaStdData_List);
|
|
PikaStdData_List___init__(scan_list);
|
|
for (int i = 0; i < result->count; i++) {
|
|
// (ssid, bssid, channel, RSSI, authmode, hidden)
|
|
PikaObj* record = newNormalObj(New_PikaStdData_Tuple);
|
|
PikaStdData_Tuple___init__(record);
|
|
Arg* arg = arg_newStr(result->records[i].ssid);
|
|
PikaStdData_List_append(record, arg);
|
|
arg_deinit(arg);
|
|
arg = arg_newBytes(result->records[i].bssid,
|
|
result->records[i].bssid_len);
|
|
PikaStdData_List_append(record, arg);
|
|
arg_deinit(arg);
|
|
arg = arg_newInt(result->records[i].channel);
|
|
PikaStdData_List_append(record, arg);
|
|
arg_deinit(arg);
|
|
arg = arg_newInt(result->records[i].rssi);
|
|
PikaStdData_List_append(record, arg);
|
|
arg_deinit(arg);
|
|
arg = arg_newInt(result->records[i].authmode);
|
|
PikaStdData_List_append(record, arg);
|
|
arg_deinit(arg);
|
|
arg = arg_newInt(0);
|
|
PikaStdData_List_append(record, arg);
|
|
arg_deinit(arg);
|
|
arg = arg_newObj(record);
|
|
PikaStdData_List_append(scan_list, arg);
|
|
arg_deinit(arg);
|
|
}
|
|
pika_platform_free(result);
|
|
return scan_list;
|
|
}
|
|
|
|
void _network_WLAN_config(PikaObj* self, PikaDict* kwargs) {
|
|
pika_dev* hal_net = _NET_OBJ_2DEV(self);
|
|
if (hal_net == NULL) {
|
|
return;
|
|
}
|
|
pika_hal_WIFI_config cfg = {0};
|
|
if (pikaDict_isArgExist(kwargs, "ssid")) {
|
|
strcpy(cfg.ap_ssid, pikaDict_getStr(kwargs, "ssid"));
|
|
}
|
|
if (pikaDict_isArgExist(kwargs, "password")) {
|
|
strcpy(cfg.ap_password, pikaDict_getStr(kwargs, "password"));
|
|
}
|
|
if (pikaDict_isArgExist(kwargs, "channel")) {
|
|
cfg.channel = pikaDict_getInt(kwargs, "channel") + 1;
|
|
}
|
|
_net_check_res(pika_hal_ioctl(hal_net, PIKA_HAL_IOCTL_CONFIG, &cfg));
|
|
}
|
|
|
|
Arg* _network_WLAN_checkConfig(PikaObj* self, char* param) {
|
|
pika_dev* hal_net = _NET_OBJ_2DEV(self);
|
|
if (hal_net == NULL) {
|
|
return NULL;
|
|
}
|
|
pika_hal_WIFI_config* cfg = hal_net->ioctl_config;
|
|
if (strcmp(param, "ssid") == 0) {
|
|
return arg_newStr(cfg->ap_ssid);
|
|
} else if (strcmp(param, "password") == 0) {
|
|
return arg_newStr(cfg->ap_password);
|
|
} else if (strcmp(param, "channel") == 0) {
|
|
return arg_newInt(cfg->channel - 1);
|
|
} else {
|
|
return NULL;
|
|
}
|
|
}
|