mirror of
https://github.com/Ai-Thinker-Open/Ai-Thinker-Open_RTL8710BX_ALIOS_SDK.git
synced 2025-02-05 20:05:24 +00:00
335 lines
6.3 KiB
C
335 lines
6.3 KiB
C
|
/*
|
||
|
* Copyright (C) 2015-2017 Alibaba Group Holding Limited
|
||
|
*/
|
||
|
|
||
|
#include <stdio.h>
|
||
|
#include <hal/hal.h>
|
||
|
|
||
|
static AOS_DLIST_HEAD(g_wifi_module);
|
||
|
|
||
|
hal_wifi_module_t *hal_wifi_get_default_module(void)
|
||
|
{
|
||
|
hal_wifi_module_t *m = 0;
|
||
|
|
||
|
if (dlist_empty(&g_wifi_module)) {
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
m = dlist_first_entry(&g_wifi_module, hal_wifi_module_t, base.list);
|
||
|
|
||
|
return m;
|
||
|
}
|
||
|
|
||
|
void hal_wifi_register_module(hal_wifi_module_t *module)
|
||
|
{
|
||
|
dlist_add_tail(&module->base.list, &g_wifi_module);
|
||
|
|
||
|
}
|
||
|
|
||
|
int hal_wifi_init(void)
|
||
|
{
|
||
|
int err = 0;
|
||
|
dlist_t *t;
|
||
|
|
||
|
/* do low level init */
|
||
|
dlist_for_each(t, &g_wifi_module) {
|
||
|
hal_wifi_module_t *m = (hal_wifi_module_t *)t;
|
||
|
#if ((WIFI_CONFIG_SUPPORT_LOWPOWER > 0) && (WIFI_CONFIG_LISTENSET_BINIT > 0))
|
||
|
m->set_listeninterval(m, WIFI_CONFIG_LISTEN_INTERVAL);
|
||
|
#endif
|
||
|
m->init(m);
|
||
|
#if ((WIFI_CONFIG_SUPPORT_LOWPOWER > 0) && (WIFI_CONFIG_LISTENSET_BINIT == 0))
|
||
|
m->set_listeninterval(m, WIFI_CONFIG_LISTEN_INTERVAL);
|
||
|
#endif
|
||
|
}
|
||
|
|
||
|
return err;
|
||
|
}
|
||
|
|
||
|
int hal_wifi_get_mac_addr(hal_wifi_module_t *m, uint8_t *mac)
|
||
|
{
|
||
|
if (m == NULL) {
|
||
|
m = hal_wifi_get_default_module();
|
||
|
}
|
||
|
|
||
|
if (m && m->get_mac_addr) {
|
||
|
m->get_mac_addr(m, mac);
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
return -1;
|
||
|
}
|
||
|
|
||
|
int hal_wifi_set_mac_addr(hal_wifi_module_t *m, const uint8_t *mac)
|
||
|
{
|
||
|
if (m == NULL) {
|
||
|
m = hal_wifi_get_default_module();
|
||
|
}
|
||
|
|
||
|
if (m && m->set_mac_addr) {
|
||
|
m->set_mac_addr(m, mac);
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
return -1;
|
||
|
}
|
||
|
|
||
|
int hal_wifi_start(hal_wifi_module_t *m, hal_wifi_init_type_t *init_para)
|
||
|
{
|
||
|
if (m == NULL) {
|
||
|
m = hal_wifi_get_default_module();
|
||
|
}
|
||
|
|
||
|
if (m == NULL)
|
||
|
return -1;
|
||
|
|
||
|
return m->start(m, init_para);
|
||
|
}
|
||
|
|
||
|
int hal_wifi_start_adv(hal_wifi_module_t *m, hal_wifi_init_type_adv_t *init_para_adv)
|
||
|
{
|
||
|
if (m == NULL) {
|
||
|
m = hal_wifi_get_default_module();
|
||
|
}
|
||
|
|
||
|
return m->start_adv(m, init_para_adv);
|
||
|
}
|
||
|
|
||
|
int hal_wifi_get_ip_stat(hal_wifi_module_t *m, hal_wifi_ip_stat_t *out_net_para, hal_wifi_type_t wifi_type)
|
||
|
{
|
||
|
if (m == NULL) {
|
||
|
m = hal_wifi_get_default_module();
|
||
|
}
|
||
|
|
||
|
return m->get_ip_stat(m, out_net_para, wifi_type);
|
||
|
}
|
||
|
|
||
|
int hal_wifi_get_link_stat(hal_wifi_module_t *m, hal_wifi_link_stat_t *out_stat)
|
||
|
{
|
||
|
if (m == NULL) {
|
||
|
m = hal_wifi_get_default_module();
|
||
|
}
|
||
|
|
||
|
return m->get_link_stat(m, out_stat);
|
||
|
}
|
||
|
|
||
|
void hal_wifi_start_scan(hal_wifi_module_t *m)
|
||
|
{
|
||
|
if (m == NULL) {
|
||
|
m = hal_wifi_get_default_module();
|
||
|
}
|
||
|
|
||
|
m->start_scan(m);
|
||
|
}
|
||
|
|
||
|
void hal_wifi_start_scan_adv(hal_wifi_module_t *m)
|
||
|
{
|
||
|
if (m == NULL) {
|
||
|
m = hal_wifi_get_default_module();
|
||
|
}
|
||
|
|
||
|
m->start_scan_adv(m);
|
||
|
}
|
||
|
|
||
|
void hal_wifi_start_scan_direct(hal_wifi_module_t *m)
|
||
|
{
|
||
|
if (m == NULL) {
|
||
|
m = hal_wifi_get_default_module();
|
||
|
}
|
||
|
|
||
|
if (m->start_scan_direct) m->start_scan_direct(m);
|
||
|
}
|
||
|
|
||
|
int hal_wifi_power_off(hal_wifi_module_t *m)
|
||
|
{
|
||
|
if (m == NULL) {
|
||
|
m = hal_wifi_get_default_module();
|
||
|
}
|
||
|
|
||
|
return m->power_off(m);
|
||
|
}
|
||
|
|
||
|
int hal_wifi_power_on(hal_wifi_module_t *m)
|
||
|
{
|
||
|
if (m == NULL) {
|
||
|
m = hal_wifi_get_default_module();
|
||
|
}
|
||
|
|
||
|
return m->power_on(m);
|
||
|
}
|
||
|
|
||
|
int hal_wifi_suspend(hal_wifi_module_t *m)
|
||
|
{
|
||
|
if (m == NULL) {
|
||
|
m = hal_wifi_get_default_module();
|
||
|
}
|
||
|
|
||
|
return m->suspend(m);
|
||
|
}
|
||
|
|
||
|
int hal_wifi_suspend_station(hal_wifi_module_t *m)
|
||
|
{
|
||
|
if (m == NULL) {
|
||
|
m = hal_wifi_get_default_module();
|
||
|
}
|
||
|
|
||
|
return m->suspend_station(m);
|
||
|
}
|
||
|
|
||
|
int hal_wifi_suspend_soft_ap(hal_wifi_module_t *m)
|
||
|
{
|
||
|
if (m == NULL) {
|
||
|
m = hal_wifi_get_default_module();
|
||
|
}
|
||
|
|
||
|
return m->suspend_soft_ap(m);
|
||
|
}
|
||
|
|
||
|
int hal_wifi_set_channel(hal_wifi_module_t *m, int ch)
|
||
|
{
|
||
|
if (m == NULL) {
|
||
|
m = hal_wifi_get_default_module();
|
||
|
}
|
||
|
|
||
|
return m->set_channel(m, ch);
|
||
|
}
|
||
|
|
||
|
int hal_wifi_get_channel(hal_wifi_module_t *m)
|
||
|
{
|
||
|
if (m == NULL) {
|
||
|
m = hal_wifi_get_default_module();
|
||
|
}
|
||
|
|
||
|
return m->get_channel(m);
|
||
|
}
|
||
|
|
||
|
int hal_wifi_get_channel_list(hal_wifi_module_t *m, const uint8_t **chnlist)
|
||
|
{
|
||
|
if (m == NULL) {
|
||
|
m = hal_wifi_get_default_module();
|
||
|
}
|
||
|
|
||
|
return m->get_channel_list(m, chnlist);
|
||
|
}
|
||
|
|
||
|
void hal_wifi_start_wifi_monitor(hal_wifi_module_t *m)
|
||
|
{
|
||
|
if (m == NULL) {
|
||
|
m = hal_wifi_get_default_module();
|
||
|
}
|
||
|
|
||
|
m->start_monitor(m);
|
||
|
}
|
||
|
|
||
|
void hal_wifi_stop_wifi_monitor(hal_wifi_module_t *m)
|
||
|
{
|
||
|
if (m == NULL) {
|
||
|
m = hal_wifi_get_default_module();
|
||
|
}
|
||
|
|
||
|
m->stop_monitor(m);
|
||
|
}
|
||
|
|
||
|
void hal_wifi_register_monitor_cb(hal_wifi_module_t *m, monitor_data_cb_t fn)
|
||
|
{
|
||
|
if (m == NULL) {
|
||
|
m = hal_wifi_get_default_module();
|
||
|
}
|
||
|
|
||
|
m->register_monitor_cb(m, fn);
|
||
|
}
|
||
|
|
||
|
void hal_wifi_install_event(hal_wifi_module_t *m, const hal_wifi_event_cb_t *cb)
|
||
|
{
|
||
|
if (NULL == m)
|
||
|
return;
|
||
|
m->ev_cb = cb;
|
||
|
}
|
||
|
|
||
|
void hal_wlan_register_mgnt_monitor_cb(hal_wifi_module_t *m, monitor_data_cb_t fn)
|
||
|
{
|
||
|
if (m == NULL) {
|
||
|
m = hal_wifi_get_default_module();
|
||
|
}
|
||
|
|
||
|
m->register_wlan_mgnt_monitor_cb(m, fn);
|
||
|
}
|
||
|
|
||
|
int hal_wlan_send_80211_raw_frame(hal_wifi_module_t *m, uint8_t *buf, int len)
|
||
|
{
|
||
|
if (m == NULL) {
|
||
|
m = hal_wifi_get_default_module();
|
||
|
}
|
||
|
|
||
|
return m->wlan_send_80211_raw_frame(m, buf, len);
|
||
|
}
|
||
|
|
||
|
void hal_wifi_start_debug_mode(hal_wifi_module_t *m)
|
||
|
{
|
||
|
if (m == NULL) {
|
||
|
m = hal_wifi_get_default_module();
|
||
|
}
|
||
|
|
||
|
if (m->start_debug_mode == NULL) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
m->start_debug_mode(m);
|
||
|
}
|
||
|
|
||
|
void hal_wifi_stop_debug_mode(hal_wifi_module_t *m)
|
||
|
{
|
||
|
if (m == NULL) {
|
||
|
m = hal_wifi_get_default_module();
|
||
|
}
|
||
|
|
||
|
if (m->stop_debug_mode == NULL) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
m->stop_debug_mode(m);
|
||
|
}
|
||
|
|
||
|
#if (WIFI_CONFIG_SUPPORT_LOWPOWER > 0)
|
||
|
|
||
|
int hal_wifi_set_listeninterval(hal_wifi_module_t *m, uint8_t listen_interval)
|
||
|
{
|
||
|
if (m == NULL) {
|
||
|
m = hal_wifi_get_default_module();
|
||
|
}
|
||
|
|
||
|
if (m->set_listeninterval == NULL) {
|
||
|
return -1;
|
||
|
}
|
||
|
|
||
|
return m->set_listeninterval(m, listen_interval);
|
||
|
}
|
||
|
|
||
|
int hal_wifi_enter_powersave(hal_wifi_module_t *m, uint8_t recvDTIMs)
|
||
|
{
|
||
|
if (m == NULL) {
|
||
|
m = hal_wifi_get_default_module();
|
||
|
}
|
||
|
|
||
|
if (m->enter_powersave == NULL) {
|
||
|
return -1;
|
||
|
}
|
||
|
|
||
|
return m->enter_powersave(m, recvDTIMs);
|
||
|
}
|
||
|
|
||
|
int hal_wifi_exit_powersave(hal_wifi_module_t *m)
|
||
|
{
|
||
|
if (m == NULL) {
|
||
|
m = hal_wifi_get_default_module();
|
||
|
}
|
||
|
|
||
|
if (m->exit_powersave == NULL) {
|
||
|
return -1;
|
||
|
}
|
||
|
|
||
|
return m->exit_powersave(m);
|
||
|
}
|
||
|
|
||
|
#endif
|