STM32 wifi无线遥控器设计单片机解密
单片机解密STM32 wifi无线遥控器设计STM32MARVELL88芯片主控
单片机解密单片机源程序如下:
- #define DEBUG
- #include "drivers.h"
- #include "app.h"
- #include "api.h"
- #include "cfg80211.h"
- #include "defs.h"
- #include "type.h"
- #include "types.h"
- #include "moal_sdio.h"
- #include "lwip/pbuf.h"
- #include "lwip/sys.h"
- #include "wpa.h"
- #include "moal_main.h"
- #include "moal_uap.h"
- #include "moal_uap_priv.h"
- #include "mlan_ioctl.h"
- #include "oled.h"
- /*
- *分为station和ap两个设备,其接口函数是不一样的
- *所以在不同的模式下我们选择相对应的设备进行操作
- *wifi_dev指向当前设备
- */
- struct net_device *sta_wifi_dev = NULL;
- struct net_device *ap_wifi_dev = NULL;
- struct net_device *direct_wifi_dev = NULL;
- struct net_device *wifi_dev = NULL;
- struct net_device *get_wifi_dev()
- {
- return wifi_dev;
- }
- int is_hw_ok()
- {
- return wifi_dev?1:0;
- }
- /**
- * @brief 设置wifi模式,只是切换模式,不对ap参数进行配置
- * @param type : MODE_AP, MODE_STATION, MODE_ADHOC
- * @retval ok: 0, err: -1
- */
- int wifi_set_mode(int type)
- {
- int ret = -1;
- int set_type;
- moal_private *priv;
- struct net_device *saved_dev = wifi_dev;
- priv = (moal_private *)wifi_dev->ml_priv;
- //暂不支持ap+sta同时存在,切换模式前先关闭wifi
- if(priv->bss_role == MLAN_BSS_ROLE_UAP)
- wifi_stop_ap();
- else
- wifi_disconnect();
- if(0)
- ;
- #ifdef UAP_SUPPORT
- else if(type == MODE_AP){
- set_type = NL80211_IFTYPE_AP;
- wifi_dev = ap_wifi_dev;
- OLED_ShowString(16,2," MODE:AP ");
- OLED_ShowString(0,0,"IP:");
- OLED_ShowString(24,0,"192.168.1.8");
- p_dbg("IP:192.168.1.8");
- }
- #endif
- #ifdef STA_SUPPORT
- else if(type == MODE_STATION){
- wifi_dev = sta_wifi_dev;
- set_type = NL80211_IFTYPE_STATION;
- OLED_ShowString(16,2,"MODE:STATION");
- }
- else if(type == MODE_ADHOC){
- wifi_dev = sta_wifi_dev;
- set_type = NL80211_IFTYPE_ADHOC;
- OLED_ShowString(16,2," MODE:ADHOC ");
- }
- #endif
- #ifdef WIFI_DIRECT_SUPPORT
- else if(type == MODE_P2P_GO){
- wifi_dev = direct_wifi_dev;
- set_type = NL80211_IFTYPE_P2P_GO;
- }
- else if(type == MODE_P2P_GC){
- wifi_dev = direct_wifi_dev;
- set_type = NL80211_IFTYPE_P2P_CLIENT;
- }
- #endif
- else{
- p_err("type %d not support", type);
- return -1;
- }
- if(wifi_dev == NULL){
-
- wifi_dev = saved_dev;
- p_err("%s not support", __FUNCTION__);
- return -1;
- }
- if(wifi_dev->cfg80211_ops->change_virtual_intf){
- priv = (moal_private *)wifi_dev->ml_priv;
- //ap和sta指向相同的change_virtual_intf
- ret = wifi_dev->cfg80211_ops->change_virtual_intf(priv->wdev->wiphy, wifi_dev, (enum nl80211_iftype)set_type, 0, 0);
- if(ret != 0)
- {
- wifi_dev = saved_dev;
- }
- }else
- p_err("%s not support", __FUNCTION__);
- return ret;
- }
- /**
- * @brief 设置硬件的多播、广播、混杂模式
- * @param flags : IFF_PROMISC 接收所有的包
- IFF_ALLMULTI 接收所有的多播包(暂时采用接收所有多播报的简单方式,
- 不处理多播地址表)
- * @retval ok: 0, err: -1
- */
- int wifi_set_multicast(uint32_t flags)
- {
- if(!wifi_dev)
- return -1;
-
- wifi_dev->flags |= flags;
- if(wifi_dev->netdev_ops && wifi_dev->netdev_ops->ndo_set_multicast_list)
- wifi_dev->netdev_ops->ndo_set_multicast_list(wifi_dev);
-
- return 0;
- }

芯片解密