pure sdk for main
This commit is contained in:
@@ -0,0 +1,388 @@
|
||||
#include "sys_config.h"
|
||||
#include "typesdef.h"
|
||||
#include "list.h"
|
||||
#include "dev.h"
|
||||
#include "devid.h"
|
||||
#include "osal/string.h"
|
||||
#include "osal/semaphore.h"
|
||||
#include "osal/mutex.h"
|
||||
#include "osal/irq.h"
|
||||
#include "osal/task.h"
|
||||
#include "osal/sleep.h"
|
||||
#include "osal/timer.h"
|
||||
#include "hal/gpio.h"
|
||||
#include "hal/uart.h"
|
||||
#include "hal/netdev.h"
|
||||
#include "lib/common/common.h"
|
||||
|
||||
#include "lib/umac/umac.h"
|
||||
#include "lib/syscfg/syscfg.h"
|
||||
#include "lib/atcmd/libatcmd.h"
|
||||
#include "lwip/ip_addr.h"
|
||||
#include "lwip/netdb.h"
|
||||
#include "syscfg.h"
|
||||
#include "osal/work.h"
|
||||
#include "lib/common/dsleepdata.h"
|
||||
#ifdef CONFIG_SLEEP
|
||||
#include "lib/lmac/lmac_dsleep.h"
|
||||
#endif
|
||||
|
||||
#ifndef QC_STA_NAME
|
||||
#define QC_STA_NAME "BGN_test"
|
||||
#endif
|
||||
|
||||
#ifndef QC_STA_PW
|
||||
#define QC_STA_PW "12345678"
|
||||
#endif
|
||||
|
||||
#ifndef QC_SCAN_TIME
|
||||
#define QC_SCAN_TIME 200
|
||||
#endif
|
||||
|
||||
#ifndef QC_SCAN_CNT
|
||||
#define QC_SCAN_CNT 10
|
||||
#endif
|
||||
|
||||
#ifndef QC_SCAN_CHANNEL
|
||||
#define QC_SCAN_CHANNEL 0x010
|
||||
#endif
|
||||
|
||||
#define SYSCFG_WIFI_MODE(mode) ((mode) == WIFI_MODE_STA ? "sta" : ((mode) == WIFI_MODE_AP ? "ap" : "apsta"))
|
||||
|
||||
struct sys_config sys_cfgs = {
|
||||
.cfg_ver = CFG_VERSION_NUM,
|
||||
.default_wifi_mode = WIFI_MODE_AP,
|
||||
.channel = CHANNEL_DEFAULT,
|
||||
.beacon_int = 100,
|
||||
.dtim_period = 1,
|
||||
.bss_max_idle = 300,
|
||||
.key_mgmt = WPA_KEY_MGMT_NONE,
|
||||
.ipaddr = IP_ADDR_DEFAULT,
|
||||
.netmask = NET_MASK_DEFAULT,
|
||||
.gw_ip = GW_IP_DEFAULT,
|
||||
.dhcpd_startip = DHCP_START_IP_DEFAULT,
|
||||
.dhcpd_endip = DHCP_END_IP_DEFAULT,
|
||||
.dhcpd_lease_time = 3600,
|
||||
.dhcpd_en = 1,
|
||||
.dhcpc_en = 1,
|
||||
.ble_pair_status = 0,//ble 默认是0,没有配网,设置为1的时候,代表已经配过网络
|
||||
.wireless_paircode = 0,
|
||||
.net_pair_switch = 0,
|
||||
};
|
||||
|
||||
uint32 syscfg_key_mgmt_get(void){
|
||||
return (sys_cfgs.key_mgmt != WPA_KEY_MGMT_NONE);
|
||||
}
|
||||
|
||||
int32 syscfg_save(void)
|
||||
{
|
||||
return syscfg_write(&sys_cfgs, sizeof(sys_cfgs));
|
||||
}
|
||||
|
||||
|
||||
void syscfg_save_AP_msg(uint8_t *bssid,uint8_t station_channel,struct ieee80211_bss_wpadata *bss_data)
|
||||
{
|
||||
//原来参数一样,需要重新保存
|
||||
if(memcmp(bssid,sys_cfgs.bssid,6) == 0 && station_channel == sys_cfgs.station_channel && memcmp(bss_data,&sys_cfgs.bss_data,sizeof(struct ieee80211_bss_wpadata)) == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
memcpy(sys_cfgs.bssid,bssid,6);
|
||||
sys_cfgs.station_channel = station_channel;
|
||||
memcpy(&sys_cfgs.bss_data,bss_data,sizeof(struct ieee80211_bss_wpadata));
|
||||
syscfg_save();
|
||||
return;
|
||||
}
|
||||
}
|
||||
extern uint8 sta_ps[8][6];
|
||||
void syscfg_dump(void)
|
||||
{
|
||||
_os_printf("SYSCFG\r\n");
|
||||
_os_printf(" mode:%s, channel:%d, key_mgmt:%x\r\n",
|
||||
SYSCFG_WIFI_MODE(sys_cfgs.wifi_mode), sys_cfgs.channel, sys_cfgs.key_mgmt);
|
||||
_os_printf(" bssid:"MACSTR", mac:"MACSTR"\r\n", MAC2STR(sys_cfgs.bssid), MAC2STR(sys_cfgs.mac));
|
||||
_os_printf(" ssid:%s, passwd:%s\r\n", sys_cfgs.ssid, sys_cfgs.passwd);
|
||||
_os_printf(" bss_max_idle:%d, beacon_int:%d, ack_tmo:%d, dtim_period:%d\r\n",
|
||||
sys_cfgs.bss_max_idle, sys_cfgs.beacon_int, sys_cfgs.ack_tmo, sys_cfgs.dtim_period);
|
||||
}
|
||||
|
||||
|
||||
#ifdef CONFIG_UMAC4
|
||||
void qc_wifi_config(void)
|
||||
{
|
||||
wifi_create_station(QC_STA_NAME,QC_STA_PW,WPA_KEY_MGMT_PSK);
|
||||
}
|
||||
|
||||
int32 wifi_qc_scan(uint8 ifidx)
|
||||
{
|
||||
int32 ret = 0;
|
||||
uint8 bss_num = 0;
|
||||
uint8 *bss_data;
|
||||
struct hgic_bss_info* bss_map;
|
||||
struct ieee80211_scandata scan_param;
|
||||
bss_data = malloc(32*sizeof(struct hgic_bss_info));
|
||||
scan_param.chan_bitmap = QC_SCAN_CHANNEL;
|
||||
scan_param.scan_time = QC_SCAN_TIME;
|
||||
scan_param.scan_cnt = QC_SCAN_CNT;
|
||||
ieee80211_scan(ifidx,1,&scan_param);
|
||||
|
||||
|
||||
//ieee80211_scan(ifidx,0,NULL);
|
||||
os_sleep_ms(QC_SCAN_TIME*QC_SCAN_CNT+10);
|
||||
ret = ieee80211_get_bsslist((struct hgic_bss_info *)bss_data, 32, 1);
|
||||
for (bss_num = 0;bss_num < 32;bss_num++) {
|
||||
bss_map = (struct hgic_bss_info *)(bss_data + bss_num*sizeof(struct hgic_bss_info));
|
||||
os_printf("[%d]===>%s\r\n",bss_num,bss_map->ssid);
|
||||
if (! strcasecmp( (const char *)bss_map->ssid, QC_STA_NAME ) ) {
|
||||
free(bss_data);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
free(bss_data);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int get_rssi_msg(uint8_t *sta,char* ifname)
|
||||
{
|
||||
int ret = - 70;
|
||||
struct ieee80211_stainfo stainfo;
|
||||
if(sys_cfgs.wifi_mode == WIFI_MODE_STA) {
|
||||
ret = ieee80211_conf_get_stainfo(WIFI_MODE_STA,0,NULL,&stainfo);
|
||||
if (ret == 0) {
|
||||
ret = stainfo.rssi;
|
||||
} else {
|
||||
ret = -70;
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
void wifi_create_ap(char *ssid,char *password,int key_mode,int channel)
|
||||
{
|
||||
uint8 key[32];
|
||||
ieee80211_conf_set_channel(WIFI_MODE_AP, channel);
|
||||
ieee80211_conf_set_ssid(WIFI_MODE_AP, (uint8*)ssid);
|
||||
ieee80211_conf_set_keymgmt(WIFI_MODE_AP, key_mode);
|
||||
if (key_mode != WPA_KEY_MGMT_NONE) {
|
||||
wpa_passphrase((uint8*)ssid, password, key);
|
||||
ieee80211_conf_set_psk(WIFI_MODE_AP, key);
|
||||
ieee80211_conf_set_passwd(WIFI_MODE_AP, password);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void wifi_create_station(char *ssid,char *password,int key_mode)
|
||||
{
|
||||
uint8 key[32];
|
||||
ieee80211_conf_set_ssid(WIFI_MODE_STA, (uint8*)ssid);
|
||||
ieee80211_conf_set_keymgmt(WIFI_MODE_STA, key_mode);
|
||||
if (key_mode != WPA_KEY_MGMT_NONE) {
|
||||
wpa_passphrase((uint8*)ssid, password, key);
|
||||
ieee80211_conf_set_psk(WIFI_MODE_STA, key);
|
||||
ieee80211_conf_set_passwd(WIFI_MODE_STA, password);
|
||||
}
|
||||
}
|
||||
|
||||
int32 wificfg_flush(uint8 ifidx)
|
||||
{
|
||||
ieee80211_conf_set_mac(ifidx, sys_cfgs.mac);
|
||||
//station的时候,全信道扫描
|
||||
if(WIFI_MODE_STA == ifidx)
|
||||
{
|
||||
if(sys_cfgs.station_channel)
|
||||
{
|
||||
ieee80211_bss_add_manualAP(sys_cfgs.ssid,sys_cfgs.bssid,sys_cfgs.station_channel,IEEE80211_BAND_2GHZ,&sys_cfgs.bss_data);
|
||||
}
|
||||
ieee80211_conf_set_channel(ifidx, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
ieee80211_conf_set_channel(ifidx, sys_cfgs.channel);
|
||||
}
|
||||
|
||||
ieee80211_conf_set_beacon_int(ifidx, sys_cfgs.beacon_int);
|
||||
ieee80211_conf_set_dtim_int(ifidx, sys_cfgs.dtim_period);
|
||||
ieee80211_conf_set_bss_max_idle(ifidx, sys_cfgs.bss_max_idle);
|
||||
ieee80211_conf_set_ssid(ifidx, sys_cfgs.ssid);
|
||||
ieee80211_conf_set_keymgmt(ifidx, sys_cfgs.key_mgmt);
|
||||
ieee80211_conf_set_psk(ifidx, sys_cfgs.psk);
|
||||
ieee80211_conf_set_passwd(ifidx, sys_cfgs.passwd);
|
||||
ieee80211_conf_set_psdata_cnt(ifidx,40);
|
||||
if(ifidx == WIFI_MODE_AP){
|
||||
if(sys_cfgs.channel==0 && sys_status.channel){
|
||||
ieee80211_conf_set_channel(ifidx, sys_status.channel);
|
||||
}else{
|
||||
ieee80211_conf_set_channel(ifidx, sys_cfgs.channel);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void sta_ps_mode_enter(uint16 aid)
|
||||
{
|
||||
}
|
||||
|
||||
void sta_ps_mode_exit(uint16 aid)
|
||||
{
|
||||
}
|
||||
|
||||
void aid_to_mac(uint16 aid, uint8* mac)
|
||||
{
|
||||
struct ieee80211_stainfo stainfo;
|
||||
ieee80211_conf_get_stainfo(WIFI_MODE_AP,aid,NULL,&stainfo);
|
||||
memcpy(mac,stainfo.addr,6);
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
//hgics configs.
|
||||
struct umac_config umac_cfg;
|
||||
struct umac_config *sys_get_umaccfg()
|
||||
{
|
||||
struct umac_config *cfg = &umac_cfg;
|
||||
int hg0_sz = 0;
|
||||
uint8 channel = 0 ;
|
||||
cfg->bss_bw = 8;
|
||||
cfg->tx_mcs = 7;
|
||||
cfg->primary_chan = 1;
|
||||
cfg->chan_cnt = 2;
|
||||
cfg->chan_list[0] = 9020;
|
||||
cfg->chan_list[1] = 9100;
|
||||
if (sys_cfgs.wifi_mode == WIFI_MODE_STA) {
|
||||
hg0_sz += (int)os_sprintf(cfg->hg0, "update_config=1\n" \
|
||||
"network={\n" \
|
||||
"proto=WPA RSN\n"\
|
||||
"key_mgmt=WPA-PSK\n" \
|
||||
"pairwise=TKIP CCMP\n" \
|
||||
"group=TKIP CCMP\n" \
|
||||
);
|
||||
hg0_sz += (int)os_sprintf(&cfg->hg0[hg0_sz], "ssid=\"%s\"\n", "BGN_test");
|
||||
hg0_sz += (int)os_sprintf(&cfg->hg0[hg0_sz], "psk=\"%s\"\n", "12345678");
|
||||
hg0_sz += (int)os_strcpy(&cfg->hg0[hg0_sz], "}\n");
|
||||
_os_printf("cfg->hg0:%s\r\n", cfg->hg0);
|
||||
} else {
|
||||
hg0_sz += (int)os_sprintf(cfg->hg0, "country_code=CN\n");
|
||||
hg0_sz += (int)os_sprintf(&cfg->hg0[hg0_sz], "ssid=%s\n", sys_cfgs.ssid);
|
||||
if (sys_cfgs.channel == 0) {
|
||||
|
||||
} else {
|
||||
channel = sys_cfgs.channel;
|
||||
}
|
||||
hg0_sz += (int)os_sprintf(&cfg->hg0[hg0_sz], "channel=%d\n", channel);
|
||||
if (sys_cfgs.key_mgmt == WPA_KEY_MGMT_NONE) {
|
||||
hg0_sz += (int)os_strcpy(&cfg->hg0[hg0_sz],
|
||||
"wpa=0\n" \
|
||||
"hw_mode=g\n"\
|
||||
);
|
||||
} else {
|
||||
hg0_sz += (int)os_sprintf(&cfg->hg0[hg0_sz], "wpa_passphrase=%s\n", sys_cfgs.key);
|
||||
hg0_sz += (int)os_strcpy(&cfg->hg0[hg0_sz],
|
||||
"wpa=2\n" \
|
||||
"wpa_key_mgmt=WPA-PSK\n" \
|
||||
"wpa_pairwise=CCMP\n" \
|
||||
"hw_mode=g\n"\
|
||||
"ieee80211n=1\n" \
|
||||
"ht_capab=\n"\
|
||||
);
|
||||
}
|
||||
}
|
||||
return cfg;
|
||||
}
|
||||
|
||||
//save hgics configs into system.
|
||||
int sys_save_umaccfg(struct umac_config *cfg)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
void sta_ps_mode_enter(char *addr)
|
||||
{
|
||||
}
|
||||
|
||||
void sta_ps_mode_exit(char *addr)
|
||||
{
|
||||
}
|
||||
|
||||
void aid_to_mac(uint16 aid, uint8* mac)
|
||||
{
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
void syscfg_set_default_val()
|
||||
{
|
||||
sysctrl_efuse_mac_addr_calc(sys_cfgs.mac);
|
||||
if (IS_ZERO_ADDR(sys_cfgs.mac)) {
|
||||
os_random_bytes(sys_cfgs.mac, 6);
|
||||
sys_cfgs.mac[0] &= 0xfe;
|
||||
os_printf("use random mac "MACSTR"\r\n", MAC2STR(sys_cfgs.mac));
|
||||
}
|
||||
os_sprintf(sys_cfgs.ssid,"%s%02x%02x%02x",SSID_DEFAULT,sys_cfgs.mac[5],sys_cfgs.mac[4],sys_cfgs.mac[3]);
|
||||
os_sprintf(sys_cfgs.passwd,"%s","12345678");
|
||||
#ifdef CONFIG_UMAC4
|
||||
wpa_passphrase(sys_cfgs.ssid, sys_cfgs.passwd, sys_cfgs.psk);
|
||||
#else
|
||||
os_strcpy(sys_cfgs.key, "12345678");
|
||||
#endif
|
||||
}
|
||||
|
||||
uint8 get_sys_cfgs_ble_pair_status()
|
||||
{
|
||||
return sys_cfgs.ble_pair_status;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SLEEP
|
||||
int32 wificfg_set_wkupdata_mask(uint8 ifidx, uint8 offset, uint8 *mask, uint32 mask_len)
|
||||
{
|
||||
uint8 len = mask_len > (LMAC_WKDATA_SIZE/8) ? (LMAC_WKDATA_SIZE/8) : mask_len;
|
||||
struct lmac_wkdata_param *wkdata = sys_sleepdata_request(SYSTEM_SLEEPDATA_ID_WKDATA, sizeof(
|
||||
struct lmac_wkdata_param));
|
||||
os_printf("%s:%d\r\n", __func__, __LINE__);
|
||||
if(wkdata){
|
||||
wkdata->count = LMAC_WKDATA_COUNT;
|
||||
wkdata->wkdata_size = LMAC_WKDATA_SIZE;
|
||||
wkdata->data[0].offset = offset;//offset from ether hdr
|
||||
os_memset(wkdata->data[0].mask, 0, sizeof(wkdata->data[0].mask));
|
||||
os_memcpy(wkdata->data[0].mask, mask, len);
|
||||
os_printf(KERN_NOTICE"set wkdata mask, offset=%d \r\n", wkdata->data[0].offset);
|
||||
return RET_OK;
|
||||
}
|
||||
return -ENOTSUPP;
|
||||
}
|
||||
|
||||
int32 wificfg_set_wakeup_data(uint8 ifidx, uint8 *data, uint32 data_len)
|
||||
{
|
||||
uint8 len = data_len > LMAC_WKDATA_SIZE ? LMAC_WKDATA_SIZE : data_len;
|
||||
struct lmac_wkdata_param *wkdata = sys_sleepdata_request(SYSTEM_SLEEPDATA_ID_WKDATA, sizeof(
|
||||
struct lmac_wkdata_param));
|
||||
os_printf("%s:%d\r\n", __func__, __LINE__);
|
||||
if(wkdata){
|
||||
wkdata->count = LMAC_WKDATA_COUNT;
|
||||
wkdata->wkdata_size = LMAC_WKDATA_SIZE;
|
||||
wkdata->data[0].wkdata_len = len;
|
||||
os_memcpy(wkdata->data[0].wkdata, data, len);
|
||||
os_printf(KERN_NOTICE"set wkdata, len=%d \r\n", len);
|
||||
return RET_OK;
|
||||
}
|
||||
return -ENOTSUPP;
|
||||
}
|
||||
|
||||
int32 wificfg_set_wkdata_svr_ip(uint8 ifidx, uint32 svr_ip)
|
||||
{
|
||||
struct lmac_wkdata_param *wkdata = sys_sleepdata_request(SYSTEM_SLEEPDATA_ID_WKDATA, sizeof(
|
||||
struct lmac_wkdata_param));
|
||||
os_printf("%s:%d\r\n", __func__, __LINE__);
|
||||
if(wkdata){
|
||||
wkdata->count = LMAC_WKDATA_COUNT;
|
||||
wkdata->wkdata_size = LMAC_WKDATA_SIZE;
|
||||
wkdata->data[0].sip = svr_ip;
|
||||
os_printf(KERN_NOTICE"set wkdata sip="IPSTR"\r\n", IP2STR_N(svr_ip));
|
||||
return RET_OK;
|
||||
}
|
||||
return -ENOTSUPP;
|
||||
}
|
||||
#endif
|
||||
Reference in New Issue
Block a user