test wifi sacn on linux

This commit is contained in:
lyon 2023-01-25 00:25:18 +08:00
parent ecd12f75a1
commit 262bc09f1e
10 changed files with 64 additions and 18 deletions

View File

@ -0,0 +1,6 @@
import network
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.scan()
wlan.close()

View File

@ -118,10 +118,7 @@ static const int _pika_hal_cmd_arg_cnt[] = {
(sizeof _pika_hal_cmd_arg_cnt / sizeof _pika_hal_cmd_arg_cnt[0])
static int _pika_hal_get_arg_cnt(PIKA_HAL_IOCTL_CMD cmd) {
if (cmd >= _PIKA_HAL_CMD_ARG_CNT_MAX) {
return -1;
}
return _pika_hal_cmd_arg_cnt[cmd];
return _pika_hal_cmd_arg_cnt[PIKA_HAL_IOCTL_CONFIG];
}
int _pika_hal_ioctl_merge_config(pika_dev* dev, void* config_in) {
@ -144,18 +141,26 @@ int pika_hal_ioctl(pika_dev* dev, PIKA_HAL_IOCTL_CMD cmd, ...) {
if (impl->ioctl == NULL) {
return -1;
}
void* config_in = NULL;
void* arg_in = NULL;
if (cmd != 0) {
va_list args;
va_start(args, cmd);
config_in = va_arg(args, void*);
ret = _pika_hal_ioctl_merge_config(dev, config_in);
arg_in = va_arg(args, void*);
if (cmd_origin == PIKA_HAL_IOCTL_CONFIG) {
ret = _pika_hal_ioctl_merge_config(dev, arg_in);
} else {
ret = 0;
}
va_end(args);
if (0 != ret) {
return ret;
}
}
ret = impl->ioctl(dev, cmd_origin, dev->ioctl_config);
if (cmd_origin == PIKA_HAL_IOCTL_CONFIG) {
ret = impl->ioctl(dev, cmd_origin, dev->ioctl_config);
} else {
ret = impl->ioctl(dev, cmd_origin, arg_in);
}
if (ret == 0) {
if (cmd_origin == PIKA_HAL_IOCTL_ENABLE) {
dev->is_enabled = 1;

View File

@ -86,7 +86,9 @@
int pika_hal_platform_##dev_name##_ioctl_enable(pika_dev* dev); \
int pika_hal_platform_##dev_name##_ioctl_disable(pika_dev* dev); \
int pika_hal_platform_##dev_name##_ioctl_config( \
pika_dev* dev, pika_hal_##dev_name##_config* cfg);
pika_dev* dev, pika_hal_##dev_name##_config* cfg); \
int pika_hal_platform_##dev_name##_ioctl_others( \
pika_dev* dev, PIKA_HAL_IOCTL_CMD cmd, void* arg);
#endif
#if defined(PIKA_HAL_TABLE_DEV_CONFIG_SIZE)

View File

@ -37,5 +37,7 @@ class WLAN:
def scan(self) -> list: ...
def close(self): ...
def __init__(): ...

View File

@ -209,3 +209,11 @@ PikaObj* _network_WLAN_scan(PikaObj* self) {
pika_platform_free(result);
return scan_list;
}
void _network_WLAN_close(PikaObj* self) {
pika_dev* hal_wifi = obj_getPtr(self, "hal_wifi");
if (hal_wifi == NULL) {
return;
}
pika_hal_close(hal_wifi);
}

View File

@ -37,5 +37,7 @@ class WLAN:
def scan(self) -> list: ...
def close(self): ...
def __init__(): ...

View File

@ -118,10 +118,7 @@ static const int _pika_hal_cmd_arg_cnt[] = {
(sizeof _pika_hal_cmd_arg_cnt / sizeof _pika_hal_cmd_arg_cnt[0])
static int _pika_hal_get_arg_cnt(PIKA_HAL_IOCTL_CMD cmd) {
if (cmd >= _PIKA_HAL_CMD_ARG_CNT_MAX) {
return -1;
}
return _pika_hal_cmd_arg_cnt[cmd];
return _pika_hal_cmd_arg_cnt[PIKA_HAL_IOCTL_CONFIG];
}
int _pika_hal_ioctl_merge_config(pika_dev* dev, void* config_in) {
@ -144,18 +141,26 @@ int pika_hal_ioctl(pika_dev* dev, PIKA_HAL_IOCTL_CMD cmd, ...) {
if (impl->ioctl == NULL) {
return -1;
}
void* config_in = NULL;
void* arg_in = NULL;
if (cmd != 0) {
va_list args;
va_start(args, cmd);
config_in = va_arg(args, void*);
ret = _pika_hal_ioctl_merge_config(dev, config_in);
arg_in = va_arg(args, void*);
if (cmd_origin == PIKA_HAL_IOCTL_CONFIG) {
ret = _pika_hal_ioctl_merge_config(dev, arg_in);
} else {
ret = 0;
}
va_end(args);
if (0 != ret) {
return ret;
}
}
ret = impl->ioctl(dev, cmd_origin, dev->ioctl_config);
if (cmd_origin == PIKA_HAL_IOCTL_CONFIG) {
ret = impl->ioctl(dev, cmd_origin, dev->ioctl_config);
} else {
ret = impl->ioctl(dev, cmd_origin, arg_in);
}
if (ret == 0) {
if (cmd_origin == PIKA_HAL_IOCTL_ENABLE) {
dev->is_enabled = 1;

View File

@ -86,7 +86,9 @@
int pika_hal_platform_##dev_name##_ioctl_enable(pika_dev* dev); \
int pika_hal_platform_##dev_name##_ioctl_disable(pika_dev* dev); \
int pika_hal_platform_##dev_name##_ioctl_config( \
pika_dev* dev, pika_hal_##dev_name##_config* cfg);
pika_dev* dev, pika_hal_##dev_name##_config* cfg); \
int pika_hal_platform_##dev_name##_ioctl_others( \
pika_dev* dev, PIKA_HAL_IOCTL_CMD cmd, void* arg);
#endif
#if defined(PIKA_HAL_TABLE_DEV_CONFIG_SIZE)

View File

@ -209,3 +209,11 @@ PikaObj* _network_WLAN_scan(PikaObj* self) {
pika_platform_free(result);
return scan_list;
}
void _network_WLAN_close(PikaObj* self) {
pika_dev* hal_wifi = obj_getPtr(self, "hal_wifi");
if (hal_wifi == NULL) {
return;
}
pika_hal_close(hal_wifi);
}

View File

@ -0,0 +1,6 @@
import network
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.scan()
wlan.close()