doubao_chat/apps/common/net/wifi_conf.c

1540 lines
52 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include <string.h>
#include "generic/typedef.h"
#include "app_config.h"
#include "asm/crc16.h"
#include "asm/gpio.h"
#include "database.h"
#include "syscfg/syscfg_id.h"
#include "asm/sfc_norflash_api.h"
#include "wifi/wifi_connect.h"
#include "lwip.h"
/*
// 设置WIFI DEBUG 信息输出等级
Debug information verbosity: lower values indicate higher urgency
0:RT_DEBUG_OFF
1:RT_DEBUG_ERROR
2:RT_DEBUG_WARN
3:RT_DEBUG_TRACE
4:RT_DEBUG_INFO
5:RT_DEBUG_LOUD
*/
const u8 RTDebugLevel = 2;
const char WL_TX_DEBUG = 0; //WIFI底层发送数据FIFO繁忙打印
const char WL_RX_DEBUG = 0; //WIFI底层接收FIFO塞满导致丢包打印
const char WL_TX_ERR_RATIO_DEBUG_SEC = 0; //统计每秒TX数据包成功/失败/重发和错误率的情况,配置每隔多少秒打印一次
const char WL_RX_ERR_RATIO_DEBUG_SEC = 0; //统计每秒RX数据包成功/失败/和错误率的情况,配置每隔多少秒打印一次
const u16 WL_RX_BACK_GROUND_ERR_CNT_PER_SECOND = 10; //硬件少了寄存器统计接收正确包,所以统计正确包和误报率不准,人工设定一个当前环境干扰每秒钟的本底错误包作为弥补,一开始需要先观察打印确认
const u8 WL_TX_PEND_DEBUG_SEC = 2; //WIFI底层FIFO塞满导致连续多少秒都发送不出数据时打印, 一般认为是干扰严重/wifi板TX性能差/CPU被挡等因素导致
const char WL_RX_PEND_DEBUG_SEC = 2; //统计WIFI底层连续多少秒都接收不到空中包时打印,一般认为是进了屏蔽房/加了MAC层过滤/板子硬件性能太差/CPU太繁忙来接收线程来不及取数因素导致
const char WL_RX_OVERFLOW_DEBUG = 0; //统计WIFI底层接收FIFO塞满导致丢包打印,一般认为对端发送太猛/空中干扰太强/CPU太繁忙来接收线程来不及取数因素导致, 使能后如果出现丢包打印每秒丢多少个数据包
const char WIFI_PA_ENABLE = 0; //wifi开启外挂硬件PA功率放大,791X占据PA1和PA2硬件IO,远距离传输
#if defined CONFIG_NO_SDRAM_ENABLE
const u8 RxReorderEnable = 0; //底层包乱序整理,0为关闭(关闭时UDP重发包也会上传到上层, 但关闭可以减少内存消耗),1为开启
const u32 MAX_REORDERING_MPDU_NUM = 1; //当RxReorderEnable开启时需要内存较大,该值也需要根据实际设置大一点(128)
#else
const u8 RxReorderEnable = 1; //底层包乱序整理,0为关闭(关闭时UDP重发包也会上传到上层, 但关闭可以减少内存消耗),1为开启
const u32 MAX_REORDERING_MPDU_NUM = 128; //当RxReorderEnable开启时需要内存较大,该值也需要根据实际设置大一点(128)
#endif
const u16 MAX_CHANNEL_TIME_BSS_INFRA = 200;//扫描每个信道停留时间,单位ms,最小20ms, 200-400ms最佳
const char WIFI_CHANNEL_QUALITY_INDICATION_BAD = 5; //STA模式下的信道通信质量差阈值,一旦低于这个值就断线重连,如果配置为-1则信号质量再差也不通知断线,但是太久不重连会被路由器认为死亡踢掉的风险
#ifdef CONFIG_RF_TEST_ENABLE
const char wifi_temperature_drift_trim_on = 0; //WiFi温度漂移校准开关,0为关闭,1为打开
#else
const char wifi_temperature_drift_trim_on = 1; //WiFi温度漂移校准开关,0为关闭,1为打开
#endif
const char wifi_ap_scan_support = 0; //ap扫描开关,0为关闭,1为开启
#if defined CONFIG_NO_SDRAM_ENABLE
const u16 MAX_PACKETS_IN_QUEUE = 16; //配置WiFi驱动最大发送数据包队列
const u16 MAX_PACKETS_IN_MCAST_PS_QUEUE = 4; //配置WiFi驱动最大发送数据包队列 //8 16 modify by lyx 32
const u16 MAX_PACKETS_IN_PS_QUEUE = 2; //配置WiFi驱动最大发送数据包队列 //128 /*16 */
#else
const u16 MAX_PACKETS_IN_QUEUE = 64; //配置WiFi驱动最大发送数据包队列
const u16 MAX_PACKETS_IN_MCAST_PS_QUEUE = 8; //配置WiFi驱动最大发送MCAST-power-save包队列 //modify by lyx 32
const u16 MAX_PACKETS_IN_PS_QUEUE = 16; //配置WiFi驱动最大发送power-save队列 //128 /*16 */
#endif
#ifdef CONFIG_RF_TEST_ENABLE
const u8 RFIinitUseTrimValue = 0;//记忆wifi rf 初始化使用vm记忆的trim的值,可大大降低wifi初始化时间
#else
const u8 RFIinitUseTrimValue = 1;//记忆wifi rf 初始化使用vm记忆的trim的值,可大大降低wifi初始化时间
#endif
#ifdef CONFIG_STATIC_IPADDR_ENABLE
const u8 IPV4_ADDR_CONFLICT_DETECT = 1; //开启静态ip冲突检测
#else
const u8 IPV4_ADDR_CONFLICT_DETECT = 0;
#endif
const u8 ntp_get_time_init = 1; //连上网后调用ntp向ntp_host列表所有服务器获取时间, 0为关闭, 1为开启
const u32 rtc_update_interval = 0; //每经过设置的时间间隔后会通过ntp对rtc进行校准, 单位毫秒
const u8 CONFIG_SDIO_SLAVE_MODE = 0; //wifi模块作为sdio从机
#ifdef CONFIG_UCOS_ENABLE
const u8 WIFI_TX_FULL_WAIT_MODE = 0; // 可以设置为0,1,2, 数值越大一定程度上会提高wifi的吞吐率,但同时会加大wifi线程占据cpu的比重
#else
const u8 WIFI_TX_FULL_WAIT_MODE = 1; // 可以设置为0,1,2, 数值越大一定程度上会提高wifi的吞吐率,但同时会加大wifi线程占据cpu的比重
#endif
const u8 WIFI_COLD_START_FAST_CONNECTION = 1; //启用WIFI冷启动快连, 0为关闭,1为开启
#if defined CONFIG_NO_SDRAM_ENABLE
const u8 MAX_LEN_OF_BSS_TABLE = 2; //BSS table 个数设置用于存放扫描结果,最少为1个,不能为0,个数越多占用内存越大
#else
const u8 MAX_LEN_OF_BSS_TABLE = 4; //BSS table 个数设置用于存放扫描结果,最少为1个,不能为0,个数越多占用内存越大
#endif
const u8 wifi_recv_poll = 0; //wifi接收数据方式,0为中断方式接收,1为轮询方式接收
#if defined CONFIG_WIFI_IDLE_RESUME_BASEBAND_ENABLE
u8 wifi_lowpower_mode = 1;
#else
u8 wifi_lowpower_mode = 0;
#endif
u8 wl_active_wait_interval_count = 0; // 默认配置不等待
u16 wl_custom_listen_interval = 10; // 默认自定义的监听间隔是 10,防止没有 set 这个变量而导致异常
u16 wl_default_listen_interval = 3; // 默认监听间隔是 3,防止没有 set 这个变量而导致异常
/*--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
#ifdef CONFIG_NET_ENABLE
#if 0
static void print_debug_ipv4(u32 daddr, u32 saddr)
{
put_buf(&daddr, 4);
put_buf(&saddr, 4);
printf("daddr : %s\n", inet_ntoa(daddr));
printf("saddr : %s\n", inet_ntoa(saddr));
}
#endif
//用于根据LWIP接收队列溢出情况下快速丢包减轻CPU负担,预留空间接收重要数据包
int lwip_low_level_inputput_filter(u8 *pkg, u32 len)
{
#ifdef CONFIG_RF_TEST_ENABLE
return 0;
#endif
static const u8 bc_mac[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
#define ipv4addr_ismulticast(addr) ((addr & PP_HTONL(0xf0000000UL)) == PP_HTONL(0xe0000000UL))
//根据LWIP接收缓存情况快速丢包减轻CPU负担,并且防止丢失重要重要数据包
struct iphdr_e *iph = (struct iphdr_e *)(pkg + 10);
u16 protoType = ntohs(iph->h_proto);
/*------------------------------------------------------------------------------------------------------------------------------------------------------------*/
#define ICMP_ER 0 /* echo reply */
#define ICMP_ECHO 8 /* echo */
if ((protoType != 0x0806) && iph->iphd.protocol == 1 && *((u8 *)iph + sizeof(struct iphdr_e)) != ICMP_ER && *((u8 *)iph + sizeof(struct iphdr_e)) != ICMP_ECHO) { //如果是ICMP并且不是echo和echo reply就丢弃, 因为是一些Time_Ex等无用包
putchar('C');
return -1;
}
/*------------------------------------------------------------------------------------------------------------------------------------------------------------*/
#define PBUF_RESERVED_FOR_ARP 1 //最起码预留一个 PBUF_POOL给ARP请求,否则不回复路由器导致断流
#define PBUF_RESERVED_FOR_TCP (PBUF_RESERVED_FOR_ARP+1)
u32 remain_pbuf_pool = memp_get_pbuf_pool_free_cnt();
if (remain_pbuf_pool <= PBUF_RESERVED_FOR_TCP) {
if (remain_pbuf_pool == 0) { //PBUF_POOL 一个也没了,直接丢弃
putchar('X');
return -1;
} else if (remain_pbuf_pool <= PBUF_RESERVED_FOR_ARP && protoType != 0x0806) {//PBUF_POOL 在剩余小于 PBUF_RESERVED_FOR_ARP 的情况下, 丢弃非ARP包
putchar('Y');
return -1;
} else if (!(protoType == 0x0800 && iph->iphd.protocol == 6)) { //PBUF_POOL 在剩余小于 PBUF_RESERVED_FOR_TCP 的情况下, 丢弃非TCP包
putchar('D');
return -1;
}
}
return 0;
}
//在WIFI底层发送队列不足的情况, 预留空间给重要数据包发送
int lwip_low_level_output_filter(u8 *pkg, u32 len)
{
#ifdef CONFIG_RF_TEST_ENABLE
return 0;
#endif
struct iphdr_e *iph = (struct iphdr_e *)(pkg + 10);
u16 protoType = ntohs(iph->h_proto);
u32 remain_wifi_txq = wifi_get_remain_tx_queue(0);
#define WIFI_TXQ_RESERVED_FOR_ARP 1 //最起码预留一个WIFI_TXQ给ARP请求,否则不回复路由器导致断流
#define WIFI_TXQ_RESERVED_FOR_TCP (WIFI_TXQ_RESERVED_FOR_ARP+1)
if (remain_wifi_txq <= WIFI_TXQ_RESERVED_FOR_TCP) {
if (remain_wifi_txq == 0) { //WIFI_TXQ 一个也没了,直接丢弃
putchar('G');
return -1;
} else if (remain_wifi_txq <= WIFI_TXQ_RESERVED_FOR_ARP && protoType != 0x0806) {//WIFI_TXQ 在剩余小于 WIFI_TXQ_RESERVED_FOR_ARP 的情况下, 丢弃非ARP包
putchar('O');
return -1;
} else if (!(protoType == 0x0800 && iph->iphd.protocol == 6)) { //WIFI_TXQ 在剩余小于 WIFI_TXQ_RESERVED_FOR_TCP 的情况下, 丢弃非TCP包
putchar('H');
return -1;
}
}
return 0;
}
//空中干扰/网络拥塞严重的情况,WIFI底层发送较慢,MAX_PACKETS_IN_QUEUE 队列满导致丢弃上层数据包
int socket_send_but_netif_busy_hook(int s, char type_udp)
{
if (type_udp) {
putchar('@');
/* os_time_dly(30); //根据实际应用发送情况调节, 针对UDP多释放一下CPU, 一方面有利于系统其他线程顺畅运行, 另一方面防止猛发送导致网络拥塞加剧 */
} else {
putchar('|');
/* os_time_dly(2); */
}
return 0;
}
int wifi_recv_pkg_and_soft_filter(u8 *pkg, u32 len) //通过软件过滤无用数据帧减轻cpu压力,pkg[20]就是对应抓包工具第一个字节的802.11 MAC Header 字段
{
#if 0
static u32 thdll, count;
int ret;
ret = time_lapse(&thdll, 1000);
if (ret) {
printf("sdio_recv_cnt = %d, %d \r\n", ret, count);
count = 0;
}
++count;
#endif
#if 0 //调试用
static const u8 bc_mac[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
#define ipv4addr_ismulticast(addr) ((addr & PP_HTONL(0xf0000000UL)) == PP_HTONL(0xe0000000UL))
struct ieee80211_frame *wh = (struct ieee80211_frame *)&pkg[20];
if ((wh->i_fc[0] & IEEE80211_FC0_TYPE_MASK) == IEEE80211_FC0_TYPE_DATA) {// 只丢弃数据帧
if (pkg[54] == 0X88 && pkg[55] == 0x8E) {} else //如果是EAPOL不要丢弃
if (len >= (52 + sizeof(struct iphdr_e))) {
u16 protoType;
struct iphdr_e *iph;
if (0 == memcmp(bc_mac, wh->i_addr1, 6)) {
//广播
iph = (struct iphdr_e *)((u8 *)pkg + 48);
} else {
iph = (struct iphdr_e *)((u8 *)pkg + 52);
}
protoType = ntohs(iph->h_proto);
if (protoType == 0x0800) { //ipv4
if (iph->iphd.protocol == 17) { //udp
if (ipv4addr_ismulticast(iph->iphd.daddr)) { //组播
/*putchar('M');*/
} else {
/*putchar('U');*/
}
/* print_debug_ipv4(iph->iphd.daddr, iph->iphd.saddr); */
} else if (iph->iphd.protocol == 6) { //tcp
/*putchar('T');*/
/* print_debug_ipv4(iph->iphd.daddr, iph->iphd.saddr); */
}
} else if (protoType == 0x0806) { //arp
/*putchar('R');*/
}
}
}
#endif
return 0;
}
#endif
/*--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
#if defined CONFIG_RF_TRIM_CODE_MOVABLE || defined CONFIG_RF_TRIM_CODE_AT_RAM
extern u32 __rf_trim_movable_slot_start[];
extern u32 __rf_trim_movable_slot_end[];
extern u8 __rf_trim_movable_region_start[];
extern u8 __rf_trim_movable_region_end[];
extern u32 __rf_trim_code_start, __rf_trim_code_end;
AT(.volatile_ram_code)
u8 *enter_wifi_rf_trim_region(u32 **start_of_region)
{
u8 *rf_trim_code_run_addr = NULL;
#if defined CONFIG_RF_TRIM_CODE_MOVABLE
u32 code_size = __rf_trim_movable_region_end - __rf_trim_movable_region_start;
printf("rf_trim_movable code _start:0x%x, code_size:%d \r\n", (u32)__rf_trim_movable_region_start, code_size);
rf_trim_code_run_addr = malloc(code_size);
if (rf_trim_code_run_addr == NULL) {
return NULL;
}
code_movable_load(__rf_trim_movable_region_start, code_size, rf_trim_code_run_addr, __rf_trim_movable_slot_start, __rf_trim_movable_slot_end, start_of_region);
#endif
norflash_enter_spi_code();
#if defined CONFIG_RF_TRIM_CODE_MOVABLE && !defined CONFIG_NO_SDRAM_ENABLE
icache_flush(rf_trim_code_run_addr, code_size);
#endif
return rf_trim_code_run_addr;
}
AT(.volatile_ram_code)
void exit_wifi_rf_trim_region(u32 **start_of_region, u8 *rf_trim_code_run_addr)
{
#if defined CONFIG_RF_TRIM_CODE_MOVABLE
if (rf_trim_code_run_addr == NULL) {
return;
}
#endif
norflash_exit_spi_code();
#if defined CONFIG_RF_TRIM_CODE_MOVABLE
code_movable_unload(__rf_trim_movable_region_start, __rf_trim_movable_slot_start, __rf_trim_movable_slot_end, start_of_region);
free(rf_trim_code_run_addr);
#endif
}
#endif
/*--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
#if 0
WirelessMode:
PHY_11BG_MIXED = 0,
PHY_11B = 1,
PHY_11A = 2,,
PHY_11ABG_MIXED = 3,,
PHY_11G = 4,
PHY_11ABGN_MIXED, /* both band 5 */
PHY_11N_2_4G, /* 11n-only with 2.4G band 6 */
PHY_11GN_MIXED, /* 2.4G band 7 */
PHY_11AN_MIXED, /* 5G band 8 */
PHY_11BGN_MIXED, /* if check 802.11b. 9 */
PHY_11AGN_MIXED, /* if check 802.11b. 10 */
PHY_11N_5G, /* 11n-only with 5G band 11 */
#endif
#ifdef CONFIG_NET_ENABLE
/*
MaxStaNum 最大连接数不能超过 MAX_LEN_OF_MAC_TABLE(5)
*/
static char WL_AP_DAT[] = {
"\
Default\n\
MacAddress=00:00:00:00:00:00\n\
CountryRegion=1\n\
CountryRegionABand=0\n\
CountryCode=CN\n\
BssidNum=1\n\
MaxStaNum=2\n\
IdleTimeout=300\n\
SSID=####SSID_LENTH_MUST_LESS_THAN_32\n\
WirelessMode=9\n\
TxRate=0\n\
Channel=11#\n\
BasicRate=15\n\
BeaconPeriod=100\n\
DtimPeriod=1\n\
TxPower=100\n\
DisableOLBC=0\n\
BGProtection=0\n\
TxAntenna=\n\
RxAntenna=\n\
TxPreamble=1\n\
RTSThreshold=2347\n\
FragThreshold=2346\n\
TxBurst=0\n\
PktAggregate=0\n\
TurboRate=0\n\
WmmCapable=0\n\
APSDCapable=0\n\
DLSCapable=0\n\
APAifsn=3;7;1;1\n\
APCwmin=4;4;3;2\n\
APCwmax=6;10;4;3\n\
APTxop=0;0;94;47\n\
APACM=0;0;0;0\n\
BSSAifsn=3;7;2;2\n\
BSSCwmin=4;4;3;2\n\
BSSCwmax=10;10;4;3\n\
BSSTxop=0;0;94;47\n\
BSSACM=0;0;0;0\n\
AckPolicy=0;0;0;0\n\
NoForwarding=0\n\
NoForwardingBTNBSSID=0\n\
HideSSID=0\n\
StationKeepAlive=0\n\
ShortSlot=1\n\
AutoChannelSelect=0\n\
IEEE8021X=0\n\
IEEE80211H=0\n\
CSPeriod=10\n\
WirelessEvent=0\n\
IdsEnable=0\n\
AuthFloodThreshold=32\n\
AssocReqFloodThreshold=32\n\
ReassocReqFloodThreshold=32\n\
ProbeReqFloodThreshold=32\n\
DisassocFloodThreshold=32\n\
DeauthFloodThreshold=32\n\
EapReqFooldThreshold=32\n\
PreAuth=0\n\
AuthMode=################\n\
EncrypType=################\n\
RekeyInterval=0\n\
RekeyMethod=DISABLE\n\
PMKCachePeriod=10\n\
WPAPSK=#########wpa_passphrase_lenth_must_more_than_7_and_less_than_63\n\
DefaultKeyID=1\n\
Key1Type=0\n\
Key1Str=\n\
Key2Type=0\n\
Key2Str=\n\
Key3Type=0\n\
Key3Str=\n\
Key4Type=0\n\
Key4Str=\n\
HSCounter=0\n\
AccessPolicy0=0\n\
AccessControlList0=\n\
AccessPolicy1=0\n\
AccessControlList1=\n\
AccessPolicy2=0\n\
AccessControlList2=\n\
AccessPolicy3=0\n\
AccessControlList3=\n\
WdsEnable=0\n\
WdsEncrypType=NONE\n\
WdsList=\n\
WdsKey=\n\
RADIUS_Server=192.168.2.3\n\
RADIUS_Port=1812\n\
RADIUS_Key=ralink\n\
own_ip_addr=192.168.5.234\n\
EAPifname=br0\n\
PreAuthifname=br0\n\
HT_HTC=0\n\
HT_RDG=1\n\
HT_EXTCHA=0\n\
HT_LinkAdapt=0\n\
HT_OpMode=0\n\
HT_MpduDensity=4\n\
HT_BW=0\n\
HT_BADecline=0\n\
HT_AutoBA=1\n\
HT_AMSDU=0\n\
HT_BAWinSize=64\n\
HT_GI=0\n\
HT_MCS=33\n\
MeshId=MESH\n\
MeshAutoLink=1\n\
MeshAuthMode=OPEN\n\
MeshEncrypType=NONE\n\
MeshWPAKEY=\n\
MeshDefaultkey=1\n\
MeshWEPKEY=\n\
WscManufacturer=\n\
WscModelName=\n\
WscDeviceName=\n\
WscModelNumber=\n\
WscSerialNumber=\n\
RadioOn=1\n\
PMFMFPC=0\n\
PMFMFPR=0\n\
PMFSHA256=0"
};
#if defined CONFIG_LOW_POWER_ENABLE
#define WL_STA_SLEEP 2
#elif defined CONFIG_WIFI_IDLE_RESUME_BASEBAND_ENABLE
#define WL_STA_SLEEP 1//2
#else
#define WL_STA_SLEEP 0
#endif
static const char WL_STA_DAT[] = {
"\
Default\n\
MacAddress=00:00:00:00:00:00\n\
CountryRegion=1\n\
CountryRegionABand=0\n\
CountryCode=CN\n\
ChannelGeography=1\n\
SSID=DEFAULT_CONNECT_SSID\n\
NetworkType=Infra\n\
WirelessMode=9\n\
Channel=1\n\
BeaconPeriod=100\n\
TxPower=100\n\
BGProtection=0\n\
TxPreamble=1\n\
RTSThreshold=2347\n\
FragThreshold=2346\n\
TxBurst=0\n\
PktAggregate=0\n\
WmmCapable=1\n\
AckPolicy=0;0;0;0\n\
AuthMode=OPEN\n\
EncrypType=NONE\n\
WPAPSK=\n\
DefaultKeyID=1\n\
Key1Type=0\n\
Key1Str=\n\
Key2Type=0\n\
Key2Str=\n\
Key3Type=0\n\
Key3Str=\n\
Key4Type=0\n\
Key4Str=\n"
#if WL_STA_SLEEP == 1
"PSMode=Legacy_PSP\n"
#elif WL_STA_SLEEP == 2
"PSMode=Fast_PSP\n"
#else
"PSMode=CAM\n"
#endif
"AutoRoaming=0\n\
RoamThreshold=70\n\
APSDCapable=1\n\
APSDAC=0;0;0;0\n\
HT_RDG=1\n\
HT_EXTCHA=0\n\
HT_OpMode=0\n\
HT_MpduDensity=4\n\
HT_BW=0\n\
HT_BADecline=0\n\
HT_AutoBA=1\n\
HT_AMSDU=0\n\
HT_BAWinSize=64\n\
HT_GI=0\n\
HT_MCS=33\n\
HT_MIMOPSMode=3\n\
HT_DisallowTKIP=1\n\
HT_STBC=0\n\
EthConvertMode=\n\
EthCloneMac=\n\
IEEE80211H=0\n\
TGnWifiTest=0\n\
WirelessEvent=0\n\
MeshId=MESH\n\
MeshAutoLink=1\n\
MeshAuthMode=OPEN\n\
MeshEncrypType=NONE\n\
MeshWPAKEY=\n\
MeshDefaultkey=1\n\
MeshWEPKEY=\n\
CarrierDetect=0\n\
AntDiversity=0\n\
BeaconLostTime=16\n\
FtSupport=0\n\
Wapiifname=ra0\n\
WapiPsk=\n\
WapiPskType=\n\
WapiUserCertPath=\n\
WapiAsCertPath=\n\
PSP_XLINK_MODE=0\n\
WscManufacturer=\n\
WscModelName=\n\
WscDeviceName=\n\
WscModelNumber=\n\
WscSerialNumber=\n\
RadioOn=1\n\
WIDIEnable=0\n\
P2P_L2SD_SCAN_TOGGLE=8\n\
Wsc4digitPinCode=0\n\
P2P_WIDIEnable=0\n\
PMFMFPC=0\n\
PMFMFPR=0\n\
PMFSHA256=0"
};
void wsc_sta_config_set_ssid_pwd(const char *ssid, const char *pwd, int ssid_len, int pwd_len)
{
#ifdef CONFIG_WSC_NET_CFG
extern int wsc_net_set_ssid_pwd(const char *ssid, const char *pwd, int ssid_len, int pwd_len);
wsc_net_set_ssid_pwd(ssid, pwd, ssid_len, pwd_len);
#endif
}
const char *GET_WL_STA_DAT(void)
{
return WL_STA_DAT;
}
int GET_WL_STA_DAT_LEN(void)
{
return strlen(WL_STA_DAT);
}
const char *GET_WL_AP_DAT(void)
{
return WL_AP_DAT;
}
int GET_WL_AP_DAT_LEN(void)
{
return strlen(WL_AP_DAT);
}
#if 0
const char *get_wl_cfg_data(int is_sta)
{
const char *data = NULL;
if (is_sta) {
data = malloc(strlen(WL_STA_DAT) + 1);
} else {
data = malloc(strlen(WL_AP_DAT) + 1);
}
if (!data) {
return NULL;
}
if (is_sta) {
strcpy(data, WL_STA_DAT);
} else {
strcpy(data, WL_AP_DAT);
}
return data;
}
static u32 write_offset = 0;
void *RtmpOSFileOpen(const char *fileName, int mode, int opt)
{
write_offset = 0;
return zalloc(4096);
}
void RtmpOSFileClose(void *ptr)
{
printf("wifi cfg file : %s\n", (const char *)ptr);
free(ptr);
}
int RtmpOSFileWrite(void *ptr, const char *str, int len)
{
memcpy(ptr + write_offset, str, len);
write_offset += len;
return len;
}
#endif
int wl_set_wifi_channel(int channel)
{
char channel_str[3] = {0};
if (channel < 1 || channel > 14) {
return -1;
}
sprintf(channel_str, "%d", channel);
const char *find_channel = "Channel=";
char *channel_position = strstr(GET_WL_AP_DAT(), find_channel) + strlen(find_channel);
strcpy(channel_position, channel_str);
channel_position[strlen(channel_str)] = '\n';
memset(channel_position + strlen(channel_str) + 1, '#', 3 - strlen(channel_str) - 1);
return 0;
}
static int wl_set_ssid(const char *ssid)
{
if (ssid == 0) {
return -1;
}
const char *find_ssid = "SSID=";
char *ssid_position = strstr(GET_WL_AP_DAT(), find_ssid) + strlen(find_ssid);
if (strlen(ssid) > 32) {
printf("set_ssid_passphrase fail,ssid len (0x%lx) longer than 32!\n", strlen(ssid));
return -1;
}
strcpy(ssid_position, ssid);
ssid_position[strlen(ssid)] = '\n';
memset(ssid_position + strlen(ssid) + 1, '#', 32 - strlen(ssid) - 1);
return 0;
}
static int wl_set_passphrase(const char *passphrase)
{
if (passphrase == 0) {
return -1;
}
const char *AUTH_MODE, *ENCRYP_TYPE;
const char *find_wpa_passphrase = "WPAPSK=";
const char *find_AuthMode = "AuthMode=";
const char *find_EncrypType = "EncrypType=";
char *wpa_passphrase_position = strstr(GET_WL_AP_DAT(), find_wpa_passphrase) + strlen(find_wpa_passphrase);
char *AuthMode_position = strstr(GET_WL_AP_DAT(), find_AuthMode) + strlen(find_AuthMode);
char *EncrypType_position = strstr(GET_WL_AP_DAT(), find_EncrypType) + strlen(find_EncrypType);
if (strcmp(passphrase, "")) {
if ((strlen(passphrase) < 8) || (strlen(passphrase) > 63)) {
printf("set_ssid_passphrase fail,passphrase len (0x%lx) must more than 7 and less than 63!\n", strlen(passphrase));
return -1;
}
strcpy(wpa_passphrase_position, passphrase);
wpa_passphrase_position[strlen(passphrase)] = '\n';
memset(wpa_passphrase_position + strlen(passphrase) + 1, '#', 63 - strlen(passphrase) - 1);
AUTH_MODE = "WPA2PSK";
strcpy(AuthMode_position, AUTH_MODE);
AuthMode_position[strlen(AUTH_MODE)] = '\n';
memset(AuthMode_position + strlen(AUTH_MODE) + 1, '#', 16 - strlen(AUTH_MODE) - 1);
ENCRYP_TYPE = "AES";
strcpy(EncrypType_position, ENCRYP_TYPE);
EncrypType_position[strlen(ENCRYP_TYPE)] = '\n';
memset(EncrypType_position + strlen(ENCRYP_TYPE) + 1, '#', 16 - strlen(ENCRYP_TYPE) - 1);
} else {
AUTH_MODE = "OPEN";
strcpy(AuthMode_position, AUTH_MODE);
AuthMode_position[strlen(AUTH_MODE)] = '\n';
memset(AuthMode_position + strlen(AUTH_MODE) + 1, '#', 16 - strlen(AUTH_MODE) - 1);
ENCRYP_TYPE = "NONE";
strcpy(EncrypType_position, ENCRYP_TYPE);
EncrypType_position[strlen(ENCRYP_TYPE)] = '\n';
memset(EncrypType_position + strlen(ENCRYP_TYPE) + 1, '#', 16 - strlen(ENCRYP_TYPE) - 1);
}
return 0;
}
int wl_ap_init(const char *ssid, const char *passphrase)
{
int ret;
wl_set_ssid(ssid);
wl_set_passphrase(passphrase);
// printf("WLAP_DAT = \r\n %s \r\n",GET_WL_AP_DAT());
return 0;
}
void set_bss_table_record(char *data, u32 len)
{
struct wifi_mode_info info = {0};
info.mode = NONE_MODE;
wifi_get_mode_cur_info(&info);
if (info.mode == SMP_CFG_MODE) {
return;
}
syscfg_write(WIFI_BSS_TABLE, data, len);
}
int get_bss_table_record(char *data, u32 len)
{
int ret;
ret = syscfg_read(WIFI_BSS_TABLE, data, len);
if (ret < 0) {
return 0;
}
return 1;
}
void set_scan_result_record(char *data, u32 len)
{
syscfg_write(WIFI_SCAN_INFO, data, len);
}
int get_stored_scan_record(char *data, u32 len)
{
int ret;
ret = syscfg_read(WIFI_SCAN_INFO, data, len);
if (ret < 0) {
return 0;
}
return 1;
}
#if 1
struct pmk_info {
u32 crc;
char pmk[32];
};
int get_stored_pmk(char *password, char *ssid, int ssidlength, char *output)
{
int ret;
u32 crc;
struct pmk_info info;
/* ret = db_select_buffer(WIFI_PMK_INFO, (char *)&info, sizeof(struct pmk_info)); */
ret = syscfg_read(WIFI_PMK_INFO, (char *)&info, sizeof(struct pmk_info));
if (ret < 0) {
return 0;
}
crc = CRC16(password, strlen(password));
crc += CRC16(ssid, ssidlength);
if (crc != info.crc) {
return 0;
}
memcpy(output, info.pmk, sizeof(info.pmk));
printf("stored pmk_info match[%s] [%s],,,\n", ssid, password);
return 1;
}
void set_stored_pmk(char *password, char *ssid, int ssidlength, char *output)
{
printf("pmk_info not match, store... [%s] [%s],,,\n", ssid, password);
struct pmk_info info;
info.crc = CRC16(password, strlen(password));
info.crc += CRC16(ssid, ssidlength);
memcpy(info.pmk, output, sizeof(info.pmk));
/* db_update_buffer(WIFI_PMK_INFO, (char *)&info, sizeof(struct pmk_info)); */
syscfg_write(WIFI_PMK_INFO, (char *)&info, sizeof(struct pmk_info));
}
#endif
#endif
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int wifi_get_rf_trim_data(void *info, int size)
{
if (syscfg_read(VM_WIFI_RF_INIT_INFO, info, size) != size) {
return -1;
}
return 0;
}
int wifi_set_rf_trim_data(void *info, int size)
{
if (syscfg_write(VM_WIFI_RF_INIT_INFO, info, size) != size) {
return -1;
}
return 0;
}
/* 大量数据传输时可以设置这个间隔或者缩短休眠间隔 */
void wl_set_active_wait_interval(u8 count)
{
wl_active_wait_interval_count = count;
return;
}
u8 wl_get_active_wait_interval(void)
{
return wl_active_wait_interval_count;
}
/* 设置自定义 beacon 监听间隔,这个间隔时间只有 STA 自己知道,太长可能导致断连 */
void wl_set_custom_listen_interval(u16 interval)
{
wl_custom_listen_interval = interval;
return;
}
u16 wl_get_custom_listen_interval(void *priv)
{
return wl_custom_listen_interval;
}
/* 设置默认 beacon 监听间隔,这个间隔时间在连接关联时会同步给 AP,因此需要在建立连接之前设置,当不监听 DTIM 时,系统按照这个间隔休眠 */
void wl_set_default_listen_interval(u16 interval)
{
wl_default_listen_interval = interval;
return;
}
u16 wl_get_default_listen_interval(void)
{
return wl_default_listen_interval;
}
// Listening policy
/* 策略共四种情况:
1、只监听 DTIM (默认);不启用 2、3 时,默认使用策略 1;
2、每个 TIM 都监听;优先级最高
3、自定义监听间隔;
4、以上三个都不启用则按照默认监听间隔监听;优先级最低
*/
extern bool wl_listen_dtim_enabled_flag; // 默认情况下监听 DTIM
extern bool wl_listen_each_tim_enabled_flag;
extern bool wl_listen_custom_intervals_enabled_flag;
extern bool wl_listen_intervals_cheak_flag; // 监听策略修改之后,要给这个标志位置1,让wifi协议栈去更新
void wl_enabled_listen_dtim(void)
{
wl_listen_dtim_enabled_flag = true;
wl_listen_each_tim_enabled_flag = false;
wl_listen_custom_intervals_enabled_flag = false;
wl_listen_intervals_cheak_flag = true;
return;
}
// 按照默认监听间隔进行监听,该默认间隔需要在连接之前通过 wl_set_default_listen_interval 配置下去,否则默认值是3
void wl_disenabled_listen_dtim(void)
{
wl_listen_dtim_enabled_flag = false;
wl_listen_each_tim_enabled_flag = false;
wl_listen_custom_intervals_enabled_flag = false;
wl_listen_intervals_cheak_flag = true;
return;
}
// 按照自定义的间隔进行监听,该自定义间隔需要通过 wl_set_custom_listen_interval 配置下去,否则默认值是10
void wl_enabled_listen_custom_intervals(void)
{
wl_listen_dtim_enabled_flag = false;
wl_listen_each_tim_enabled_flag = false;
wl_listen_custom_intervals_enabled_flag = true;
wl_listen_intervals_cheak_flag = true;
return;
}
// 退出自定义间隔的配置之后,默认回到监听 DTIM 的策略,如果要进入默认间隔的配置则需要再调一次 wl_disenabled_listen_dtim
void wl_disenabled_listen_custom_intervals(void)
{
wl_enabled_listen_dtim();
return;
}
void wl_enabled_listen_each_tim(void)
{
wl_listen_dtim_enabled_flag = false;
wl_listen_each_tim_enabled_flag = true;
wl_listen_custom_intervals_enabled_flag = false;
wl_listen_intervals_cheak_flag = true;
return;
}
// 退出监听每一个间隔的配置之后,默认回到监听 DTIM 的策略,如果要进入默认间隔的配置则需要再调一次 wl_disenabled_listen_dtim
void wl_disenabled_listen_each_tim(void)
{
wl_enabled_listen_dtim();
return;
}
#if 0 //WIFI RX 中庸策略
const u32 STF_END_CNT_THR_VAL = 179;
const u32 STF_DET_CNT_THR_VAL = 16;
const u32 DS_DET_CNT_THR0_VAL = 3;
const u32 STF_DET_THR1_VAL = 180;
const u32 STF_DET_THR2_VAL = 180;
const u32 STF_DET_THR3_VAL = 180;
const u32 DSSS_XCDET_THR1_VAL = 120;
const u32 DSSS_XCDET_THR2_VAL = 80;
const u32 DS_VLD_CNT_THR_VAL = 72;
const u32 DS_DET_CNT_THR1_VAL = 3;
///=======================================================//
/// ram adr ctl
/// 0 - 127 feq index 0 - 127
/// 128 - 223 agc index 0 - 95
/// 224 - 225 apc index 0 - 31
///=======================================================//
const unsigned long wl_rfd_ram_lut [256][2] = {
//{ H , L }
/// =================================================
/// FEQ
///
///
///==================================================
/* 0 */ { 0x06405555 , 0x8A1B01A0 },
/* 1 */ { 0x06410000 , 0x8A3B01A0 },
/* 2 */ { 0x0641AAAB , 0x8A5B01A0 },
/* 3 */ { 0x06425555 , 0x8A7B01A0 },
/* 4 */ { 0x06430000 , 0x8A9B01A0 },
/* 5 */ { 0x0643AAAB , 0x8ABB01A0 },
/* 6 */ { 0x06445555 , 0x8ADB01A0 },
/* 7 */ { 0x06450000 , 0x8AFB01A0 },
/* 8 */ { 0x0645AAAB , 0x8B1B01A0 },
/* 9 */ { 0x06465555 , 0x8B3B01A0 },
/*10 */ { 0x06470000 , 0x8B5B01A0 },
/*11 */ { 0x0647AAAB , 0x8B7B01A0 },
/*12 */ { 0x06485555 , 0x8B9B01A0 },
/*13 */ { 0x06490000 , 0x8BBB01A0 },
/*14 */ { 0x0649AAAB , 0x8BDB01A0 },
/*15 */ { 0x064A5555 , 0x8BFB01A0 },
/*16 */ { 0x064B0000 , 0x8C1B01A0 },
/*17 */ { 0x064BAAAB , 0x8C3B01A0 },
/*18 */ { 0x064C5555 , 0x8C5B01A0 },
/*19 */ { 0x064D0000 , 0x8C7B01A0 },
/*20 */ { 0x064DAAAB , 0x8C9B01A0 },
/*21 */ { 0x064E5555 , 0x8CBB01A0 },
/*22 */ { 0x064F0000 , 0x8CDB01A0 },
/*23 */ { 0x064FAAAB , 0x8CFB01A0 },
/*24 */ { 0x06505555 , 0x8D1B01A0 },
/*25 */ { 0x06510000 , 0x8D3B01A0 },
/*26 */ { 0x0651AAAB , 0x8D5B01A0 },
/*27 */ { 0x06525555 , 0x8D7B01A0 },
/*28 */ { 0x06530000 , 0x8D9B01A0 },
/*29 */ { 0x0653AAAB , 0x8DBB01A0 },
/*30 */ { 0x06545555 , 0x8DDB01A0 },
/*31 */ { 0x06550000 , 0x8DFB01A0 },
/*32 */ { 0x0655AAAB , 0x8E1B01A0 },
/*33 */ { 0x06565555 , 0x8E3B01A0 },
/*34 */ { 0x06570000 , 0x8E5B01A0 },
/*35 */ { 0x0657AAAB , 0x8E7B01A0 },
/*36 */ { 0x06585555 , 0x8E9B01A0 },
/*37 */ { 0x06590000 , 0x8EBB01A0 },
/*38 */ { 0x0659AAAB , 0x8EDB01A0 },
/*39 */ { 0x065A5555 , 0x8EFB01A0 },
/*40 */ { 0x065B0000 , 0x8F1B01A0 },
/*41 */ { 0x065BAAAB , 0x8F3B01A0 },
/*42 */ { 0x065C5555 , 0x8F5B01A0 },
/*43 */ { 0x065D0000 , 0x8F7B01A0 },
/*44 */ { 0x065DAAAB , 0x8F9B01A0 },
/*45 */ { 0x065E5555 , 0x8FBB01A0 },
/*46 */ { 0x065F0000 , 0x8FDB01A0 },
/*47 */ { 0x065FAAAB , 0x8FFB01A0 },
/*48 */ { 0x06605555 , 0x901B01A0 },
/*49 */ { 0x06610000 , 0x903B01A0 },
/*50 */ { 0x0661AAAB , 0x905B01A0 },
/*51 */ { 0x06625555 , 0x907B01A0 },
/*52 */ { 0x06630000 , 0x909B01A0 },
/*53 */ { 0x0663AAAB , 0x90BB01A0 },
/*54 */ { 0x06645555 , 0x90DB01A0 },
/*55 */ { 0x06650000 , 0x90FB01A0 },
/*56 */ { 0x0665AAAB , 0x911B01A0 },
/*57 */ { 0x06665555 , 0x913B01A0 },
/*58 */ { 0x06670000 , 0x915B01A0 },
/*59 */ { 0x0667AAAB , 0x917B01A0 },
/*60 */ { 0x06685555 , 0x919B01A0 },
/*61 */ { 0x06690000 , 0x91BB01A0 },
/*62 */ { 0x0669AAAB , 0x91DB01A0 },
/*63 */ { 0x066A5555 , 0x91FB01A0 },
/*64 */ { 0x066B0000 , 0x921B01A0 },
/*65 */ { 0x066BAAAB , 0x923B01A0 },
/*66 */ { 0x066C5555 , 0x925B01A0 },
/*67 */ { 0x066D0000 , 0x927B01A0 },
/*68 */ { 0x066DAAAB , 0x929B01A0 },
/*69 */ { 0x066E5555 , 0x92BB01A0 },
/*70 */ { 0x066F0000 , 0x92DB01A0 },
/*71 */ { 0x066FAAAB , 0x92FB01A0 },
/*72 */ { 0x06705555 , 0x931B01A0 },
/*73 */ { 0x06710000 , 0x933B01A0 },
/*74 */ { 0x0671AAAB , 0x935B01A0 },
/*75 */ { 0x06725555 , 0x937B01A0 },
/*76 */ { 0x06730000 , 0x939B01A0 },
/*77 */ { 0x0673AAAB , 0x93BB01A0 },
/*78 */ { 0x06745555 , 0x93DB01A0 },
/*79 */ { 0x06750000 , 0x93FB01A0 },
/*80 */ { 0x0675AAAB , 0x941B01A0 },
/*81 */ { 0x06765555 , 0x943B01A0 },
/*82 */ { 0x06770000 , 0x945B01A0 },
/*83 */ { 0x0677AAAB , 0x947B01A0 },
/*84 */ { 0x06785555 , 0x949B01A0 },
/*85 */ { 0x06790000 , 0x94BB01A0 },
/*86 */ { 0x06790000 , 0x94BB01A0 },
/*87 */ { 0x06790000 , 0x94BB01A0 },
/*88 */ { 0x06790000 , 0x94BB01A0 },
/*89 */ { 0x06790000 , 0x94BB01A0 },
/*90 */ { 0x06790000 , 0x94BB01A0 },
/*91 */ { 0x06790000 , 0x94BB01A0 },
/*92 */ { 0x06790000 , 0x94BB01A0 },
/*93 */ { 0x06790000 , 0x94BB01A0 },
/*94 */ { 0x06790000 , 0x94BB01A0 },
/*95 */ { 0x06790000 , 0x94BB01A0 },
/*96 */ { 0x06790000 , 0x94BB01A0 },
/*97 */ { 0x06790000 , 0x94BB01A0 },
/*98 */ { 0x06790000 , 0x94BB01A0 },
/*99 */ { 0x06790000 , 0x94BB01A0 },
/*100 */{ 0x06415555 , 0x8A3B01A0 },
/*101 */{ 0x0644AAAB , 0x8ADB01A0 },
/*102 */{ 0x06480000 , 0x8B7B01A0 },
/*103 */{ 0x064B5555 , 0x8C1B01A0 },
/*104 */{ 0x064EAAAB , 0x8CBB01A0 },
/*105 */{ 0x06520000 , 0x8D5B01A0 },
/*106 */{ 0x06555555 , 0x8DFB01A0 },
/*107 */{ 0x0658AAAB , 0x8E9B01A0 },
/*108 */{ 0x065C0000 , 0x8F3B01A0 },
/*109 */{ 0x065F5555 , 0x8FDB01A0 },
/*110 */{ 0x0662AAAB , 0x907B01A0 },
/*111 */{ 0x06660000 , 0x911B01A0 },
/*112 */{ 0x06695555 , 0x91BB01A0 },
/*113 */{ 0x066CAAAB , 0x925B01A0 },
/*114 */{ 0x06700000 , 0x92FB01A0 },
/*115 */{ 0x06735555 , 0x939B01A0 },
/*116 */{ 0x0676AAAB , 0x943B01A0 },
/*117 */{ 0x067A0000 , 0x94DB01A0 },
/*118 */{ 0x067A0000 , 0x94DB01A0 },
/*119 */{ 0x067A0000 , 0x94DB01A0 },
/*120 */{ 0x067A0000 , 0x94DB01A0 },
/*121 */{ 0x067A0000 , 0x94DB01A0 },
/*122 */{ 0x067A0000 , 0x94DB01A0 },
/*123 */{ 0x067A0000 , 0x94DB01A0 },
/*124 */{ 0x067A0000 , 0x94DB01A0 },
/*125 */{ 0x067A0000 , 0x94DB01A0 },
/*126 */{ 0x067A0000 , 0x94DB01A0 },
/*127 */{ 0x067A0000 , 0x94DB01A0 },
/// =================================================
/// AGC
/// [32] [31:29] [28:26] [25:23] [22:20] [19:18] [17:15] [14:11] [10:4] [3:2] [1:0]
/// TRX_RFSW TRX_RFCAP VG1_5-0 VG0_12/6/0 HPF_GS RXF3_12/6RXF_12/6/0 MIX_TIA_RT MIX_TIA_CT MIX_GM_GS LNA_GS
///==================================================
/*128*/{0x0000007A , 0x008087F0 },
/*129*/{0x0000007A , 0x048087F0 },
/*130*/{0x0000007A , 0x088087F0 },
/*131*/{0x0000007A , 0x0C8087F0 },
/*132*/{0x0000007A , 0x108087F0 },
/*133*/{0x0000007A , 0x008087F4 },
/*134*/{0x0000007A , 0x048087F4 },
/*135*/{0x0000007A , 0x088087F4 },
/*136*/{0x0000000A , 0x008087F4 },
/*137*/{0x0000000A , 0x048087F4 },
/*138*/{0x0000000A , 0x088087F4 },
/*139*/{0x0000000A , 0x0C8087F4 },
/*140*/{0x0000000A , 0x108087F4 },
/*141*/{0x0000000A , 0x148087F4 },
/*142*/{0x0000000A , 0x008087F5 },
/*143*/{0x0000000A , 0x048087F5 },
/*144*/{0x0000000A , 0x088087F5 },
/*145*/{0x0000000A , 0x0C8087F5 },
/*146*/{0x0000000A , 0x108087F5 },
/*147*/{0x0000000A , 0x008087F6 },
/*148*/{0x0000000A , 0x048087F6 },
/*149*/{0x0000000A , 0x088087F6 },
/*150*/{0x0000000A , 0x0C8087F6 },
/*151*/{0x0000000A , 0x108087F6 },
/*152*/{0x0000000A , 0x148087F6 },
/*153*/{0x0000000A , 0x011087F6 },
/*154*/{0x0000000A , 0x051087F6 },
/*155*/{0x0000000A , 0x091087F6 },
/*156*/{0x0000000A , 0x0D1087F6 },
/*157*/{0x0000000A , 0x111087F6 },
/*158*/{0x0000000A , 0x151087F6 },
/*159*/{0x0000000A , 0x012487F6 },
/*160*/{0x0000000A , 0x052487F6 },
/*161*/{0x0000000A , 0x092487F6 },
/*162*/{0x0000000A , 0x0D2487F6 },
/*163*/{0x0000000A , 0x008087F7 },
/*164*/{0x0000000A , 0x048087F7 },
/*165*/{0x0000000A , 0x088087F7 },
/*166*/{0x0000000A , 0x0C8087F7 },
/*167*/{0x0000000A , 0x108087F7 },
/*168*/{0x0000000A , 0x148087F7 },
/*169*/{0x0000000A , 0x011087F7 },
/*170*/{0x0000000A , 0x051087F7 },
/*171*/{0x0000000A , 0x091087F7 },
/*172*/{0x0000000A , 0x0D1087F7 },
/*173*/{0x0000000A , 0x111087F7 },
/*174*/{0x0000000A , 0x151087F7 },
/*175*/{0x0000000A , 0x012487F7 },
/*176*/{0x0000000A , 0x052487F7 },
/*177*/{0x0000000A , 0x092487F7 },
/*178*/{0x0000000A , 0x0D2487F7 },
/*179*/{0x0000000A , 0x112487F7 },
/*180*/{0x0000000A , 0x15109C57 },
/*181*/{0x0000000A , 0x01249C57 },
/*182*/{0x0000000A , 0x05249C57 },
/*183*/{0x0000000A , 0x09249C57 },
/*184*/{0x0000000A , 0x0D249C57 },
/*185*/{0x0000000A , 0x11249C57 },
/*186*/{0x0000000A , 0x0110C8F7 },
/*187*/{0x0000000A , 0x0510C8F7 },
/*188*/{0x0000000A , 0x0910C8F7 },
/*189*/{0x0000000A , 0x0D10C8F7 },
/*190*/{0x0000000A , 0x1110C8F7 },
/*191*/{0x0000000A , 0x1510C8F7 },
/*192*/{0x0000000A , 0x0124C8F7 },
/*193*/{0x0000000A , 0x0524C8F7 },
/*194*/{0x0000000A , 0x0924C8F7 },
/*195*/{0x0000000A , 0x0D24C8F7 },
/*196*/{0x0000000A , 0x1124C8F7 },
/*197*/{0x0000000A , 0x1524C8F7 },
/*198*/{0x0000000A , 0x013548F7 },
/*199*/{0x0000000A , 0x053548F7 },
/*200*/{0x0000000A , 0x093548F7 },
/*201*/{0x0000000A , 0x0D3548F7 },
/*202*/{0x0000000A , 0x113548F7 },
/*203*/{0x0000000A , 0x153548F7 },
/*204*/{0x0000000A , 0x024548F7 },
/*205*/{0x0000000A , 0x064548F7 },
/*206*/{0x0000000A , 0x0A4548F7 },
/*207*/{0x0000000A , 0x0E4548F7 },
/*208*/{0x0000000A , 0x124548F7 },
/*209*/{0x0000000A , 0x164548F7 },
/*210*/{0x0000000A , 0x025948F7 },
/*211*/{0x0000000A , 0x065948F7 },
/*212*/{0x0000000A , 0x0A5948F7 },
/*213*/{0x0000000A , 0x0E5948F7 },
/*214*/{0x0000000A , 0x125948F7 },
/*215*/{0x0000000A , 0x165948F7 },
/*216*/{0x0000000A , 0x026A48F7 },
/*217*/{0x0000000A , 0x066A48F7 },
/*218*/{0x0000000A , 0x0A6A48F7 },
/*219*/{0x0000000A , 0x0E6A48F7 },
/*220*/{0x0000000A , 0x126A48F7 },
/*221*/{0x0000000A , 0x166A48F7 },
/*222*/{0x0000000A , 0x166A48F7 },
/*223*/{0x0000000A , 0x166A48F7 },
/// =================================================
/// APC
///
///
///==================================================
/*224*/{ 0x00000078, 0x17836876},
/*225*/{ 0x00000078, 0x17A36876},
/*226*/{ 0x00000078, 0x17C36876},
/*227*/{ 0x00000078, 0x17E36876},
/*228*/{ 0x00000078, 0x57E36876},
/*229*/{ 0x00000078, 0x97E36876},
/*230*/{ 0x00000078, 0xD7E36876},
/*231*/{ 0x00000078, 0xD7E36876},
/*232*/{ 0x00000078, 0xD7E36876},
/*233*/{ 0x00000078, 0xD7E36876},
/*234*/{ 0x00000078, 0xD7E36876},
/*235*/{ 0x00000078, 0xD7E36876},
/*236*/{ 0x00000078, 0xD7E36876},
/*237*/{ 0x00000078, 0xD7E36876},
/*238*/{ 0x00000078, 0xD7E36876},
/*239*/{ 0x00000078, 0xD7E36876},
/*240*/{ 0x00000078, 0x17830871},
/*241*/{ 0x00000078, 0x17831871},
/*242*/{ 0x00000078, 0x17832871},
/*243*/{ 0x00000078, 0x17834871},
/*244*/{ 0x00000078, 0x17836871},
/*245*/{ 0x00000078, 0x17A36871},
/*246*/{ 0x00000078, 0x17E36871},
/*247*/{ 0x00000078, 0x57E36871},
/*248*/{ 0x00000078, 0x97E36871},
/*249*/{ 0x00000078, 0xD7E36875},
/*250*/{ 0x00000078, 0xD7E36876},
/*251*/{ 0x00000078, 0xD7E3687a},
/*252*/{ 0x00000078, 0xD7E3687a},
/*253*/{ 0x00000078, 0xD7E3687a},
/*254*/{ 0x00000078, 0xD7E3687a},
/*255*/{ 0x00000078, 0xD7E3687a},
};
#else // WIFI RX 抗干扰能力更强策略
const u32 STF_END_CNT_THR_VAL = 190;
const u32 STF_DET_CNT_THR_VAL = 12;
const u32 DS_DET_CNT_THR0_VAL = 4;
const u32 STF_DET_THR1_VAL = 190;
const u32 STF_DET_THR2_VAL = 150;
const u32 STF_DET_THR3_VAL = 140;
const u32 DSSS_XCDET_THR1_VAL = 80;
const u32 DSSS_XCDET_THR2_VAL = 100;
const u32 DS_VLD_CNT_THR_VAL = 80;
const u32 DS_DET_CNT_THR1_VAL = 4;
///=======================================================//
/// ram adr ctl
/// 0 - 127 feq index 0 - 127
/// 128 - 223 agc index 0 - 95
/// 224 - 225 apc index 0 - 31
///=======================================================//
const unsigned long wl_rfd_ram_lut [256][2] = {
//{ H , L }
/// =================================================
/// FEQ
///
///
///==================================================
/* 0 */ { 0x06405555 , 0x8A1B01A0 },
/* 1 */ { 0x06410000 , 0x8A3B01A0 },
/* 2 */ { 0x0641AAAB , 0x8A5B01A0 },
/* 3 */ { 0x06425555 , 0x8A7B01A0 },
/* 4 */ { 0x06430000 , 0x8A9B01A0 },
/* 5 */ { 0x0643AAAB , 0x8ABB01A0 },
/* 6 */ { 0x06445555 , 0x8ADB01A0 },
/* 7 */ { 0x06450000 , 0x8AFB01A0 },
/* 8 */ { 0x0645AAAB , 0x8B1B01A0 },
/* 9 */ { 0x06465555 , 0x8B3B01A0 },
/*10 */ { 0x06470000 , 0x8B5B01A0 },
/*11 */ { 0x0647AAAB , 0x8B7B01A0 },
/*12 */ { 0x06485555 , 0x8B9B01A0 },
/*13 */ { 0x06490000 , 0x8BBB01A0 },
/*14 */ { 0x0649AAAB , 0x8BDB01A0 },
/*15 */ { 0x064A5555 , 0x8BFB01A0 },
/*16 */ { 0x064B0000 , 0x8C1B01A0 },
/*17 */ { 0x064BAAAB , 0x8C3B01A0 },
/*18 */ { 0x064C5555 , 0x8C5B01A0 },
/*19 */ { 0x064D0000 , 0x8C7B01A0 },
/*20 */ { 0x064DAAAB , 0x8C9B01A0 },
/*21 */ { 0x064E5555 , 0x8CBB01A0 },
/*22 */ { 0x064F0000 , 0x8CDB01A0 },
/*23 */ { 0x064FAAAB , 0x8CFB01A0 },
/*24 */ { 0x06505555 , 0x8D1B01A0 },
/*25 */ { 0x06510000 , 0x8D3B01A0 },
/*26 */ { 0x0651AAAB , 0x8D5B01A0 },
/*27 */ { 0x06525555 , 0x8D7B01A0 },
/*28 */ { 0x06530000 , 0x8D9B01A0 },
/*29 */ { 0x0653AAAB , 0x8DBB01A0 },
/*30 */ { 0x06545555 , 0x8DDB01A0 },
/*31 */ { 0x06550000 , 0x8DFB01A0 },
/*32 */ { 0x0655AAAB , 0x8E1B01A0 },
/*33 */ { 0x06565555 , 0x8E3B01A0 },
/*34 */ { 0x06570000 , 0x8E5B01A0 },
/*35 */ { 0x0657AAAB , 0x8E7B01A0 },
/*36 */ { 0x06585555 , 0x8E9B01A0 },
/*37 */ { 0x06590000 , 0x8EBB01A0 },
/*38 */ { 0x0659AAAB , 0x8EDB01A0 },
/*39 */ { 0x065A5555 , 0x8EFB01A0 },
/*40 */ { 0x065B0000 , 0x8F1B01A0 },
/*41 */ { 0x065BAAAB , 0x8F3B01A0 },
/*42 */ { 0x065C5555 , 0x8F5B01A0 },
/*43 */ { 0x065D0000 , 0x8F7B01A0 },
/*44 */ { 0x065DAAAB , 0x8F9B01A0 },
/*45 */ { 0x065E5555 , 0x8FBB01A0 },
/*46 */ { 0x065F0000 , 0x8FDB01A0 },
/*47 */ { 0x065FAAAB , 0x8FFB01A0 },
/*48 */ { 0x06605555 , 0x901B01A0 },
/*49 */ { 0x06610000 , 0x903B01A0 },
/*50 */ { 0x0661AAAB , 0x905B01A0 },
/*51 */ { 0x06625555 , 0x907B01A0 },
/*52 */ { 0x06630000 , 0x909B01A0 },
/*53 */ { 0x0663AAAB , 0x90BB01A0 },
/*54 */ { 0x06645555 , 0x90DB01A0 },
/*55 */ { 0x06650000 , 0x90FB01A0 },
/*56 */ { 0x0665AAAB , 0x911B01A0 },
/*57 */ { 0x06665555 , 0x913B01A0 },
/*58 */ { 0x06670000 , 0x915B01A0 },
/*59 */ { 0x0667AAAB , 0x917B01A0 },
/*60 */ { 0x06685555 , 0x919B01A0 },
/*61 */ { 0x06690000 , 0x91BB01A0 },
/*62 */ { 0x0669AAAB , 0x91DB01A0 },
/*63 */ { 0x066A5555 , 0x91FB01A0 },
/*64 */ { 0x066B0000 , 0x921B01A0 },
/*65 */ { 0x066BAAAB , 0x923B01A0 },
/*66 */ { 0x066C5555 , 0x925B01A0 },
/*67 */ { 0x066D0000 , 0x927B01A0 },
/*68 */ { 0x066DAAAB , 0x929B01A0 },
/*69 */ { 0x066E5555 , 0x92BB01A0 },
/*70 */ { 0x066F0000 , 0x92DB01A0 },
/*71 */ { 0x066FAAAB , 0x92FB01A0 },
/*72 */ { 0x06705555 , 0x931B01A0 },
/*73 */ { 0x06710000 , 0x933B01A0 },
/*74 */ { 0x0671AAAB , 0x935B01A0 },
/*75 */ { 0x06725555 , 0x937B01A0 },
/*76 */ { 0x06730000 , 0x939B01A0 },
/*77 */ { 0x0673AAAB , 0x93BB01A0 },
/*78 */ { 0x06745555 , 0x93DB01A0 },
/*79 */ { 0x06750000 , 0x93FB01A0 },
/*80 */ { 0x0675AAAB , 0x941B01A0 },
/*81 */ { 0x06765555 , 0x943B01A0 },
/*82 */ { 0x06770000 , 0x945B01A0 },
/*83 */ { 0x0677AAAB , 0x947B01A0 },
/*84 */ { 0x06785555 , 0x949B01A0 },
/*85 */ { 0x06790000 , 0x94BB01A0 },
/*86 */ { 0x06790000 , 0x94BB01A0 },
/*87 */ { 0x06790000 , 0x94BB01A0 },
/*88 */ { 0x06790000 , 0x94BB01A0 },
/*89 */ { 0x06790000 , 0x94BB01A0 },
/*90 */ { 0x06790000 , 0x94BB01A0 },
/*91 */ { 0x06790000 , 0x94BB01A0 },
/*92 */ { 0x06790000 , 0x94BB01A0 },
/*93 */ { 0x06790000 , 0x94BB01A0 },
/*94 */ { 0x06790000 , 0x94BB01A0 },
/*95 */ { 0x06790000 , 0x94BB01A0 },
/*96 */ { 0x06790000 , 0x94BB01A0 },
/*97 */ { 0x06790000 , 0x94BB01A0 },
/*98 */ { 0x06790000 , 0x94BB01A0 },
/*99 */ { 0x06790000 , 0x94BB01A0 },
/*100 */{ 0x06415555 , 0x8A3B01A0 },
/*101 */{ 0x0644AAAB , 0x8ADB01A0 },
/*102 */{ 0x06480000 , 0x8B7B01A0 },
/*103 */{ 0x064B5555 , 0x8C1B01A0 },
/*104 */{ 0x064EAAAB , 0x8CBB01A0 },
/*105 */{ 0x06520000 , 0x8D5B01A0 },
/*106 */{ 0x06555555 , 0x8DFB01A0 },
/*107 */{ 0x0658AAAB , 0x8E9B01A0 },
/*108 */{ 0x065C0000 , 0x8F3B01A0 },
/*109 */{ 0x065F5555 , 0x8FDB01A0 },
/*110 */{ 0x0662AAAB , 0x907B01A0 },
/*111 */{ 0x06660000 , 0x911B01A0 },
/*112 */{ 0x06695555 , 0x91BB01A0 },
/*113 */{ 0x066CAAAB , 0x925B01A0 },
/*114 */{ 0x06700000 , 0x92FB01A0 },
/*115 */{ 0x06735555 , 0x939B01A0 },
/*116 */{ 0x0676AAAB , 0x943B01A0 },
/*117 */{ 0x067A0000 , 0x94DB01A0 },
/*118 */{ 0x067A0000 , 0x94DB01A0 },
/*119 */{ 0x067A0000 , 0x94DB01A0 },
/*120 */{ 0x067A0000 , 0x94DB01A0 },
/*121 */{ 0x067A0000 , 0x94DB01A0 },
/*122 */{ 0x067A0000 , 0x94DB01A0 },
/*123 */{ 0x067A0000 , 0x94DB01A0 },
/*124 */{ 0x067A0000 , 0x94DB01A0 },
/*125 */{ 0x067A0000 , 0x94DB01A0 },
/*126 */{ 0x067A0000 , 0x94DB01A0 },
/*127 */{ 0x067A0000 , 0x94DB01A0 },
/// =================================================
/// AGC
/// [32] [31:29] [28:26] [25:23] [22:20] [19:18] [17:15] [14:11] [10:4] [3:2] [1:0]
/// TRX_RFSW TRX_RFCAP VG1_5-0 VG0_12/6/0 HPF_GS RXF3_12/6RXF_12/6/0 MIX_TIA_RT MIX_TIA_CT MIX_GM_GS LNA_GS
///==================================================
/*128*/{0x0000007A , 0x008087F0 },
/*129*/{0x0000007A , 0x048087F0 },
/*130*/{0x0000007A , 0x088087F0 },
/*131*/{0x0000007A , 0x0C8087F0 },
/*132*/{0x0000007A , 0x108087F0 },
/*133*/{0x0000007A , 0x008087F4 },
/*134*/{0x0000007A , 0x048087F4 },
/*135*/{0x0000007A , 0x088087F4 },
/*136*/{0x0000000A , 0x008087F4 },
/*137*/{0x0000000A , 0x048087F4 },
/*138*/{0x0000000A , 0x088087F4 },
/*139*/{0x0000000A , 0x0C8087F4 },
/*140*/{0x0000000A , 0x108087F4 },
/*141*/{0x0000000A , 0x148087F4 },
/*142*/{0x0000000A , 0x008087F5 },
/*143*/{0x0000000A , 0x048087F5 },
/*144*/{0x0000000A , 0x088087F5 },
/*145*/{0x0000000A , 0x0C8087F5 },
/*146*/{0x0000000A , 0x108087F5 },
/*147*/{0x0000000A , 0x008087F6 },
/*148*/{0x0000000A , 0x048087F6 },
/*149*/{0x0000000A , 0x088087F6 },
/*150*/{0x0000000A , 0x0C8087F6 },
/*151*/{0x0000000A , 0x108087F6 },
/*152*/{0x0000000A , 0x148087F6 },
/*153*/{0x0000000A , 0x011087F6 },
/*154*/{0x0000000A , 0x051087F6 },
/*155*/{0x0000000A , 0x091087F6 },
/*156*/{0x0000000A , 0x0D1087F6 },
/*157*/{0x0000000A , 0x111087F6 },
/*158*/{0x0000000A , 0x151087F6 },
/*159*/{0x0000000A , 0x012487F6 },
/*160*/{0x0000000A , 0x052487F6 },
/*161*/{0x0000000A , 0x092487F6 },
/*162*/{0x0000000A , 0x0D2487F6 },
/*163*/{0x0000000A , 0x008087F7 },
/*164*/{0x0000000A , 0x048087F7 },
/*165*/{0x0000000A , 0x088087F7 },
/*166*/{0x0000000A , 0x0C8087F7 },
/*167*/{0x0000000A , 0x108087F7 },
/*168*/{0x0000000A , 0x148087F7 },
/*169*/{0x0000000A , 0x011087F7 },
/*170*/{0x0000000A , 0x051087F7 },
/*171*/{0x0000000A , 0x091087F7 },
/*172*/{0x0000000A , 0x0D1087F7 },
/*173*/{0x0000000A , 0x111087F7 },
/*174*/{0x0000000A , 0x151087F7 },
/*175*/{0x0000000A , 0x012487F7 },
/*176*/{0x0000000A , 0x052487F7 },
/*177*/{0x0000000A , 0x092487F7 },
/*178*/{0x0000000A , 0x0D2487F7 },
/*179*/{0x0000000A , 0x112487F7 },
/*180*/{0x0000000A , 0x0D248F17 },
/*181*/{0x0000000A , 0x11248F17 },
/*182*/{0x0000000A , 0x15248F17 },
/*183*/{0x0000000A , 0x01350F17 },
/*184*/{0x0000000A , 0x05350F17 },
/*185*/{0x0000000A , 0x09350F17 },
/*186*/{0x0000000A , 0x15249C57 },
/*187*/{0x0000000A , 0x01351C57 },
/*188*/{0x0000000A , 0x05351C57 },
/*189*/{0x0000000A , 0x09351C57 },
/*190*/{0x0000000A , 0x1524AAB7 },
/*191*/{0x0000000A , 0x01352AB7 },
/*192*/{0x0000000A , 0x05352AB7 },
/*193*/{0x0000000A , 0x09352AB7 },
/*194*/{0x0000000A , 0x0D352AB7 },
/*195*/{0x0000000A , 0x11352AB7 },
/*196*/{0x0000000A , 0x11353217 },
/*197*/{0x0000000A , 0x15353217 },
/*198*/{0x0000000A , 0x02453217 },
/*199*/{0x0000000A , 0x06453217 },
/*200*/{0x0000000A , 0x0A453217 },
/*201*/{0x0000000A , 0x0E453217 },
/*202*/{0x0000000A , 0x12453217 },
/*203*/{0x0000000A , 0x16453217 },
/*204*/{0x0000000A , 0x0E453997 },
/*205*/{0x0000000A , 0x12453997 },
/*206*/{0x0000000A , 0x16453997 },
/*207*/{0x0000000A , 0x02593997 },
/*208*/{0x0000000A , 0x02594137 },
/*209*/{0x0000000A , 0x06594137 },
/*210*/{0x0000000A , 0x0A594137 },
/*211*/{0x0000000A , 0x0E594137 },
/*212*/{0x0000000A , 0x12594137 },
/*213*/{0x0000000A , 0x0E594137 },
/*214*/{0x0000000A , 0x125948F7 },
/*215*/{0x0000000A , 0x165948F7 },
/*216*/{0x0000000A , 0x026A48F7 },
/*217*/{0x0000000A , 0x066A48F7 },
/*218*/{0x0000000A , 0x0A6A48F7 },
/*219*/{0x0000000A , 0x0E6A48F7 },
/*220*/{0x0000000A , 0x126A48F7 },
/*221*/{0x0000000A , 0x166A48F7 },
/*222*/{0x0000000A , 0x166A48F7 },
/*223*/{0x0000000A , 0x166A48F7 },
/// =================================================
/// APC
///
///
///==================================================
/*224*/{ 0x00000078, 0x17836876},
/*225*/{ 0x00000078, 0x17A36876},
/*226*/{ 0x00000078, 0x17C36876},
/*227*/{ 0x00000078, 0x17E36876},
/*228*/{ 0x00000078, 0x57E36876},
/*229*/{ 0x00000078, 0x97E36876},
/*230*/{ 0x00000078, 0xD7E36876},
/*231*/{ 0x00000078, 0xD7E36876},
/*232*/{ 0x00000078, 0xD7E36876},
/*233*/{ 0x00000078, 0xD7E36876},
/*234*/{ 0x00000078, 0xD7E36876},
/*235*/{ 0x00000078, 0xD7E36876},
/*236*/{ 0x00000078, 0xD7E36876},
/*237*/{ 0x00000078, 0xD7E36876},
/*238*/{ 0x00000078, 0xD7E36876},
/*239*/{ 0x00000078, 0xD7E36876},
/*240*/{ 0x00000078, 0x17830871},
/*241*/{ 0x00000078, 0x17831871},
/*242*/{ 0x00000078, 0x17832871},
/*243*/{ 0x00000078, 0x17834871},
/*244*/{ 0x00000078, 0x17836871},
/*245*/{ 0x00000078, 0x17A36871},
/*246*/{ 0x00000078, 0x17E36871},
/*247*/{ 0x00000078, 0x57E36871},
/*248*/{ 0x00000078, 0x97E36871},
/*249*/{ 0x00000078, 0xD7E36875},
/*250*/{ 0x00000078, 0xD7E36876},
/*251*/{ 0x00000078, 0xD7E3687a},
/*252*/{ 0x00000078, 0xD7E3687a},
/*253*/{ 0x00000078, 0xD7E3687a},
/*254*/{ 0x00000078, 0xD7E3687a},
/*255*/{ 0x00000078, 0xD7E3687a},
};
#endif
/**
* @brief Log (Verbose/Info/Debug/Warn/Error)
*/
/*-----------------------------------------------------------*/
const char log_tag_const_v_WEBSOCKET AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
const char log_tag_const_d_WEBSOCKET AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
const char log_tag_const_i_WEBSOCKET AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
const char log_tag_const_w_WEBSOCKET AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
const char log_tag_const_e_WEBSOCKET AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);