7620a无线中继模块(wisp)

本文介绍7620a无线中继模块,支持自动扫描、自动拨号及中文SSID配置。内容包括无线驱动的增强功能,如发送WiFi断开和连接信号,适用于应用层事件处理。模块适用于各种场景,如有疑问,作者提供咨询。
摘要由CSDN通过智能技术生成

该模块为7620a无线中继模块,支持自动扫描,自动拨号,支持中文ssid配置(需要编解码模块支持)

无线驱动需要增加wifi断开和连接信号发送,用于应用层处理事件。

该模块仅供参考,如有问题,可以联系我。

/*
 * wisp.c
 * 7620a无线中继模块,支持自动重拨,支持中文ssid
 * Author:dxt1107
 * Mail:destan19@126.com
 * 2014.12.04
 */
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <bcmnvram.h>
#include <shutils.h>
#include <ralink.h>
#include <bcmutils.h>
#include <etioctl.h>
#include <bcmparams.h>
#include <linux/autoconf.h>
#include <signal.h>
#include "encode.h"
#define WISP_IFNAME "apcli0"

#define STAT_LINK_DOWN 0
#define STAT_LINK_UP 1
#define SIG_APCLI_LINKDOWN SIGUSR2 + 20  // 37
#define SIG_APCLI_LINKUP   SIGUSR2 + 21  // 38
#define SIG_WISP_DEBUG     SIGUSR2 + 22  // 39
#define SCAN_INTERVAL 3
#define CHECK_NETWORK_INTERVAL 180
#define DIAGNOSE_INTERVAL 16
static int wisp_debug = 0;

#define WDBG(fmt,args...) if (wisp_debug)\
	printf("dxt1107\033[0;32;32m%s,%d "fmt"\033[m",__func__,__LINE__,##args);

struct wifi_node_t{
	struct wifi_node_t * next;
	char ssid[64];
	char bssid[32];
	char auth_mode[32];
	char encrypt_type[32];	
	char w_mode[16];
	int signal;
	int channel;
};
typedef enum wifi_status
{
	STATUS_INIT = 0,
	STATUS_AUTH_OK,
	STATUS_CONNECTED_OK,
	STATUS_INTERNET_OK,
}E_WIFI_STATUS;
struct wifi_node_t * wifi_head = NULL;
struct wifi_node_t g_cur_connect_wifi;
static int g_wifi_node_count = 0;
E_WIFI_STATUS  g_wifi_status = STATUS_INIT;

static void update_wifi_status(E_WIFI_STATUS status)
{
	char buf[16] = {0};
	if ( status < STATUS_INIT || status > STATUS_INTERNET_OK ) {
		printf("error,invalid status,%d\n",status);
		return;
	}
	g_wifi_status = status;
	sprintf(buf, "%d", status);
	nvram_set("wisp_status",buf);
}

void show_all_wifi_node(void)
{
	if (!wisp_debug)
		return;
	printf("dxt1107###########begin show wifi list###############\n");
	int i = 0;
	struct wifi_node_t * p = wifi_head;
	while ( p ) {
		i++;
		printf("%d ssid:%s,bssid:%s,channel:%d,mode:%s,signal:%d\n",
				i, p->ssid,p->bssid,p->channel,p->auth_mode,p->signal);
		p = p->next;
	}
	printf("dxt1107###########end show wifi list###############\n");

}

void show_one_wifi_node(struct wifi_node_t * p )
{
	if ( !p )
		return;
	printf("dxt1107###ssid:%s,bssid:%s,channel:%d,mode:%s,signal:%d###\n",
			p->ssid,p->bssid,p->channel,p->auth_mode,p->signal);
}
int  add_wifi_node(struct wifi_node_t * item)
{
	if ( NULL == item )
		return 0;
	item ->next = NULL;
	if ( wifi_head == NULL ){
		wifi_head = item;
	}
	else{
		item->next = wifi_head->next;
		wifi_head->next = item;
	}
	g_wifi_node_count ++;
	return 1;
}


void  del_wifi_node(struct wifi_node_t * item)
{
	struct wifi_node_t * p = wifi_head;
	struct wifi_node_t * prev = wifi_head;
	if ( NULL == item )
		return ;
	if ( wifi_head == NULL ){
		return ;
	}
	else{
		while ( p ) {
			if ( !strcmp ( p->bssid , item->bssid) && 
				p->channel == item->channel) {
				if ( NULL == prev->next )
					wifi_head = NULL;
				else {
					prev->next = p->next;
				}
				g_wifi_node_count--;
				WDBG("dxt1107bssid:%s,ssid:%s,channel:%d,cur_count:%d\n",\
					p->bssid,p->ssid,p->channel,g_wifi_node_count);
				free(p);
				return;
			}
			prev = p;
			p = p->next;
		}
	}
}

void clear_wifi_list(vo
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值