STM32F103+SDIO wifi Marvell8801/Marvell88w8801 介绍(九) ---- Marvell 8801/Marvell 88w8801 实现AP功能/实现热点功能

代码工程的GITHUB连接:点进进入GITHUB仓库
https://github.com/sj15712795029/stm32f1_marvell88w8801_marvell8801_wifi

Marvell自己实现驱动系列文章分为几篇介绍:
SDIO wifi Marvell8801/Marvell88w8801 介绍(一) ---- 芯片介绍
SDIO wifi Marvell8801/Marvell88w8801 介绍(二) ---- SDIO协议介绍
SDIO wifi Marvell8801/Marvell88w8801 介绍(三) ---- 寄存器介绍
SDIO wifi Marvell8801/Marvell88w8801 介绍(四) ---- 命令/事件/数据格式
SDIO wifi Marvell8801/Marvell88w8801 介绍(五) ---- TLV
SDIO wifi Marvell8801/Marvell88w8801 介绍(六) ---- 实现初始化功能
SDIO wifi Marvell8801/Marvell88w8801 介绍(七) ---- 实现搜索功能
SDIO wifi Marvell8801/Marvell88w8801 介绍(八) ---- 实现STA功能
SDIO wifi Marvell8801/Marvell88w8801 介绍(九) ---- 实现AP功能
SDIO wifi Marvell8801/Marvell88w8801 介绍(十) ---- 移植TCP/IP协议栈LWIP
SDIO wifi Marvell8801/Marvell88w8801 介绍(十一) ---- 自己编写LWIP没有的DHCP server
SDIO wifi Marvell8801/Marvell88w8801 介绍(十二) ---- MQTT介绍
SDIO wifi Marvell8801/Marvell88w8801 介绍(十三) ---- 百度云操作说明
SDIO wifi Marvell8801/Marvell88w8801 介绍(十四) ---- 上位机STA操作/代码
SDIO wifi Marvell8801/Marvell88w8801 介绍(十五) ---- 上位机AP操作/代码
SDIO wifi Marvell8801/Marvell88w8801 介绍(十六) ---- 上位机UDP操作/代码
SDIO wifi Marvell8801/Marvell88w8801 介绍(十七) ---- 上位机TCP操作/代码
SDIO wifi Marvell8801/Marvell88w8801 介绍(十八) ---- 上位机PING操作/代码
SDIO wifi Marvell8801/Marvell88w8801 介绍(十九) ---- 上位机云服务器(百度云)操作/代码

每篇更新打开专栏可以看到打开Marvell8801/Marvell8801 专栏

关于裸机AP模式操作介绍主要分为以下图示几部分
在这里插入图片描述
1)开启热点命令格式介绍,主要对开启热点的格式进行介绍,包括TLV
2)开启默认热点介绍
3)开启特定SSID的热点介绍
4)开启WPA/WAP2热点介绍
5)停止热点介绍
6)AP主动踢掉某一个STA的介绍
另外,在写这个驱动之前我是假设平台的SDIO驱动已经调试OK,如果需要查看SDIO驱动方面,可以直接参照我的裸机代码,另外写这个驱动的目的是让你快速入门Marvell88w8801这颗wifi 芯片,其中没有复杂的802.11n的处理,如果你不想看Linux复杂的驱动,可以通过这个裸机快速入门。

1. 开启热点命令格式介绍

首先说明下创建dafault open wpa wpa2热点都是通过一个函数mrvl88w8801_cre_ap来实现
另外,我们先来看下创建热点的cmd/cmd response的格式
在这里插入图片描述
在这里插入图片描述

Start很简单,关键在于配置cmd/cmd response
在这里插入图片描述
在这里插入图片描述
最关键的部分在于ConfigDate,那些部分是TLV,我们先列出TLV list,在后面针对创建不同的节点再做介绍
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
停止热点的cmd/cmd response如图:
在这里插入图片描述

2. Marvell88w8801直接开启默认热点

开启热点很简单,只需要发送cmd HOST_CMD_APCMD_BSS_START就能得到一个默认的热点,如果之前没有配置过的话,那么就会得到一个叫做Marvell Micro AP的没有加密的热点,如图:
在这里插入图片描述
另外函数实现如下:


/******************************************************************************
 * 函数名:	mrvl88w8801_cre_ap_prepare
 * 参数:  	tx(IN)				-->tx buffer
 * 返回值: 	返回执行结果
 * 描述:	组HOST_CMD_APCMD_BSS_START command的封包,主要用于开启热点
******************************************************************************/
static uint8_t mrvl88w8801_cre_ap_prepare(uint8_t* tx)
{
    HostCmd_DS_COMMAND *cmd = (HostCmd_DS_COMMAND *)tx;
    uint16_t tx_packet_len = CMD_HDR_SIZE;

    cmd->pack_len = tx_packet_len;
    cmd->pack_type = TYPE_CMD_CMDRSP;
    cmd->command = HOST_CMD_APCMD_BSS_START;
    cmd->size = tx_packet_len - CMD_SDIO_HDR_SIZE;
    cmd->seq_num = 0;
    cmd->bss = BSS_TYPE_UAP << 4;
    cmd->result = 0;
    return COMP_ERR_OK;
}

3. Marvell88w8801 开启open热点

如果要创建一个open热点,那么我们就需要在发送HOST_CMD_APCMD_BSS_START命令之前先发送HOST_CMD_APCMD_SYS_CONFIGURE来配置热点,所有的配置TLV在开始的时候都有贴出,open热点主要用到两个。
1)SSID TLV,主要用于配置AP热点的名称
2)TLV_TYPE_UAP_BCAST_SSID_CTL TLV,主要用于该AP热点是否隐藏
SSID不做过多介绍,就是2byte type,2byte len,0~32 byte的名称
TLV_TYPE_UAP_BCAST_SSID_CTL TLV介绍如下
在这里插入图片描述
Enable是能被搜索到,disable不能被搜索到
整个过程是先发送HOST_CMD_APCMD_SYS_CONFIGURE然后收到cmd response后发送HOST_CMD_APCMD_BSS_START,这样热点就生产了,是一个open热点

4. Marvell88w8801 开启WPA/WPA2热点

Wpa热点除了以上open两个TLV外,还包含以下TLV
1)TLV_TYPE_UAP_WPA_PASSPHRASE
2)TLV_TYPE_UAP_ENCRYPT_PROTOCOL
3)TLV_TYPE_UAP_AKMP
4)TLV_TYPE_PWK_CIPHER
5)TLV_TYPE_GWK_CIPHER
其中TLV_TYPE_UAP_WPA_PASSPHRASE主要作用就是配置AP热点的密码
在这里插入图片描述
TLV_TYPE_UAP_ENCRYPT_PROTOCOL主要用于配置加密协议
在这里插入图片描述
WPA主要用于bit 3,WPA2主要用于bit5,看下代码的处理
在这里插入图片描述
TLV_TYPE_UAP_AKMP主要是用于认证的密码类型
在这里插入图片描述
此处我们选择keymgmt中的bit 1 psk
TLV_TYPE_PWK_CIPHER主要用于配对密码类型,此处不管是WPA还是WPA2我们都选择CCMP
在这里插入图片描述
代码如下
在这里插入图片描述
TLV_TYPE_GWK_CIPHER主要用于分组密码类型,我们也选择使用CCMP
在这里插入图片描述
代码如下
在这里插入图片描述
整个wap/wap2的方式和open方式流程一样,同样是:先发送
HOST_CMD_APCMD_SYS_CONFIGURE然后收到cmd response后发送
HOST_CMD_APCMD_BSS_START,只不过多了几个TLV

5. Marvell88w8801 停止热点

停止热点的命令也很简单,在开始部分我们已经贴出命令格式,代码如下


/******************************************************************************
 *	函数名:	mrvl88w8801_stop_ap_prepare
 * 参数:  	tx(IN)				-->tx buffer
 * 返回值: 	返回执行结果
 * 描述:	组HOST_CMD_APCMD_BSS_STOP command的封包,主要用于停止热点
******************************************************************************/
static uint8_t mrvl88w8801_stop_ap_prepare(uint8_t* tx)
{
    HostCmd_DS_COMMAND *cmd = (HostCmd_DS_COMMAND *)tx;
    uint16_t tx_packet_len = CMD_HDR_SIZE;

    cmd->pack_len = tx_packet_len;
    cmd->pack_type = TYPE_CMD_CMDRSP;
    cmd->command = HOST_CMD_APCMD_BSS_STOP;
    cmd->size = tx_packet_len - CMD_SDIO_HDR_SIZE;
    cmd->seq_num = 0;
    cmd->bss = BSS_TYPE_UAP << 4;
    cmd->result = 0;
    return COMP_ERR_OK;
}

6. Marvell88w8801 AP主动踢掉STA

AP主动踢掉STA主要用以下命令HOST_CMD_APCMD_STA_DEAUTH
Cmd/cmd response格式如图
在这里插入图片描述
代码实现如图


/******************************************************************************
 *	函数名:	mrvl88w8801_disconnect_sta_prepare
 * 参数:  	tx(IN)				-->tx buffer
 			data_buff(IN)		-->搜索的cmd body,在这里就是channel list
 			data_len(IN)		-->搜索的cmd body len,在这里就是channel list长度
 * 返回值: 	返回执行结果
 * 描述:	组HOST_CMD_APCMD_STA_DEAUTH command的封包,主要用于AP踢掉STA
******************************************************************************/
static uint8_t mrvl88w8801_disconnect_sta_prepare(uint8_t* tx,void *data_buff,uint16_t data_len)
{
    HostCmd_DS_COMMAND *cmd = (HostCmd_DS_COMMAND *)tx;
    HostCmd_DS_802_11_DEAUTHENTICATE *pdeauth = &cmd->params.deauth;
    uint16_t tx_packet_len = CMD_HDR_SIZE + sizeof(HostCmd_DS_802_11_DEAUTHENTICATE);

    cmd->pack_len = tx_packet_len;
    cmd->pack_type = TYPE_CMD_CMDRSP;
    cmd->command = HOST_CMD_APCMD_STA_DEAUTH;
    cmd->size = tx_packet_len - CMD_SDIO_HDR_SIZE;
    cmd->seq_num = 0;
    cmd->bss = BSS_TYPE_UAP << 4;
    cmd->result = 0;
    comp_memcpy(pdeauth->mac_addr,data_buff,data_len);
    pdeauth->reason_code = 2;

    return COMP_ERR_OK;
}

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wireless_Link

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值