当前位置: 首页 > news >正文

android wifi framework与wpa_supplicant的交互

android frmework直接与wpa_supplicant进行交互,使用aidl或者hidl

二、事件

framework注册事件的地方:

packages/modules/Wifi/service/java/com/android/server/wifi/SupplicantStaIfaceCallbackImpl.java

class SupplicantStaIfaceCallbackImpl extends ISupplicantStaIfaceCallback.Stub {

        public void onStateChanged(int newState, byte bssid, int id, ArrayList<Byte> ssid..);

        public void onDisconnected(byte[/* 6 */] bssid, boolean locallyGenerated, int reasonCode);

        private void handleAssocRejectEvent(AssocRejectEventInfo assocRejectInfo)

}

注册此事件的地方

packages/modules/Wifi/service/java/com/android/server/wifi/SupplicantStaIfaceHal.java

这儿还需要进一步看是调用的哪个?这儿有v1、v2等

private boolean trySetupStaIfaceV1_4(String ifaceName,ISupplicantStaIface iface)  {

        SupplicantStaIfaceHalCallbackV1_4 callbackV14 =

                new SupplicantStaIfaceHalCallbackV1_4(ifaceName);

        if (!registerCallbackV1_4(getStaIfaceMockableV1_4(iface), callbackV14)) {

                throw new RemoteException("Init StaIface V1_4 failed.");

        }

        /* keep this in a store to avoid recycling by garbage collector. */

        mISupplicantStaIfaceCallbacks.put(ifaceName, callbackV14);

        return true;

}

setupIface->setupStaIface->vendor_setupIface(new SupplicantStaIfaceHalCallback)

setupStaIface->trySetupStaIfaceV1_1->trySetupStaIfaceV1_2->....

hidl定义callback和接口的地方

hardware/interfaces/wifi/supplicant/1.0/ISupplicantStaIfaceCallback.hal 

ISupplicantStaIfaceCallback在v1.1里有onDisconnected回调,后续的v1.2->v1.3->v1.4 的ISupplicantCallback.hal 都继承前面的版本

zheli

这里还有连接wifi失败时的ReasonCode、StatusCode、还有连接State

ReasonCode常见的有:

DEAUTH_LEAVING = 3、UNSPECIFIED = 1、INVALID_IE = 13、STA_LEAVING = 36、TIMEOUT = 39

State常见的有:

DISCONNECTED = 0、AUTHENTICATING = 4等

hardware/interfaces/wifi/supplicant/1.0/ISupplicantIface.hal

ISupplicantIface.hal 里有listNetworks、addNetwork接口

hardware/interfaces/wifi/supplicant/1.0/ISupplicantStaIface.hal

ISupplicantStaIface.hal里有定义接口 

registerCallback(ISupplicantStaIfaceCallback callback)、reassociate、disconnect、setPowerSave、getMacAddress、setBtCoexistenceMode、setCountryCode等

hardware/interfaces/wifi/supplicant/1.0/ISupplicantCallback.hal

ISupplicantCallback.hal里有onInterfaceCreated、onInterfaceRemoved接口

wpa_supplicant接口事件注册的地方

以连接失败为例:

external/wpa_supplicant_8/wpa_supplicant/hidl/1.4/hidl_manager.h

这里include了很多hidl生成的.h文件,可以在out目录下查看

hidl_manager.h

#include <android/hardware/wifi/supplicant/1.0/ISupplicantCallback.h>

#include <android/hardware/wifi/supplicant/1.0/ISupplicantP2pIfaceCallback.h>

#include <android/hardware/wifi/supplicant/1.0/ISupplicantP2pNetworkCallback.h>

#include <android/hardware/wifi/supplicant/1.4/ISupplicantStaIfaceCallback.h>

#include <android/hardware/wifi/supplicant/1.0/ISupplicantStaNetworkCallback.h>

#include <android/hardware/wifi/supplicant/1.4/ISupplicantStaNetworkCallback.h>

在out目录下类似:

./soong/.intermediates/hardware/interfaces/wifi/supplicant/1.4/

android.hardware.wifi.supplicant@1.4_genc++_headers/gen/android/hardware/wifi/、supplicant/1.4/ISupplicantStaIfaceCallback.h

external/wpa_supplicant_8/wpa_supplicant/hidl/1.4/hidl_manager.cpp

void HidlManager::notifyDisconnectReason(struct wpa_supplicant *wpa_s) {

        callWithEachStaIfaceCallback(

                &ISupplicantStaIfaceCallback::onDisconnected,  wpa_s->disconnect_reason);

}

如果连接密码失败,可以看下大致的如下路径 :

events.wpa_supplicant_event_disassoc_finish  (wpa_supplicant/events.c)

notify.wpas_notify_disconnect_reason->  (wpa_supplicant/notify.c)

hidl.wpas_hidl_notify_disconnect_reason->  (wpa_supplicant/hidl/1.4/hidl.cpp)

hidl_manager->notifyDisconnectReason

events.c

static void wpa_supplicant_event_disassoc_finish () {

        if (could_be_psk_mismatch(wpa_s, reason_code, locally_generated)) {

                wpa_msg(wpa_s, MSG_INFO, "WPA: 4-Way Handshake failed - ""pre-shared key may be incorrect");

                wpas_auth_failed(wpa_s, "WRONG_KEY");

                wpas_notify_disconnect_reason(wpa_s);

        }

}

        

相关文章:

android wifi framework与wpa_supplicant的交互

android frmework直接与wpa_supplicant进行交互&#xff0c;使用aidl或者hidl 二、事件 framework注册事件的地方&#xff1a; packages/modules/Wifi/service/java/com/android/server/wifi/SupplicantStaIfaceCallbackImpl.java class SupplicantStaIfaceCallbackImpl exte…...

初学stm32 --- flash模仿eeprom

目录 STM32内部FLASH简介 内部FLASH构成&#xff08;F1&#xff09; FLASH读写过程&#xff08;F1&#xff09; 闪存的读取 闪存的写入 内部FLASH构成&#xff08;F4 / F7 / H7&#xff09; FLASH读写过程&#xff08;F4 / F7 / H7&#xff09; 闪存的读取 闪存的写入 …...

使用C语言实现栈的插入、删除和排序操作

栈是一种后进先出(LIFO, Last In First Out)的数据结构,这意味着最后插入的元素最先被删除。在C语言中,我们可以通过数组或链表来实现栈。本文将使用数组来实现一个简单的栈,并提供插入(push)、删除(pop)以及排序(这里采用一种简单的排序方法,例如冒泡排序)的操作示…...

C语言程序环境和预处理详解

本章重点&#xff1a; 程序的翻译环境 程序的执行环境 详解&#xff1a;C语言程序的编译链接 预定义符号介绍 预处理指令 #define 宏和函数的对比 预处理操作符#和##的介绍 命令定义 预处理指令 #include 预处理指令 #undef 条件编译 程序的翻译环境和执行环…...

基于机器学习随机森林算法的个人职业预测研究

1.背景调研 随着信息技术的飞速发展&#xff0c;特别是大数据和云计算技术的广泛应用&#xff0c;各行各业都积累了大量的数据。这些数据中蕴含着丰富的信息和模式&#xff0c;为利用机器学习进行职业预测提供了可能。机器学习算法的不断进步&#xff0c;如深度学习、强化学习等…...

三种文本相似计算方法:规则、向量与大模型裁判

文本相似计算 项目背景 目前有众多工作需要评估字符串之间的相似(相关)程度&#xff1a;  比如&#xff0c;RAG 智能问答系统文本召回阶段需要计算用户文本与文本库内文本的相似分数&#xff0c;返回前TopK个候选文本。  在评估大模型生成的文本阶段&#xff0c;也需要评估…...

Python语言的计算机基础

Python语言的计算机基础 绪论 在当今信息技术飞速发展的时代&#xff0c;编程已经成为了一种必备技能。Python凭借其简洁、易读和强大的功能&#xff0c;逐渐成为初学者学习编程的首选语言。本文将以Python语言为基础&#xff0c;探讨计算机科学的基本概念&#xff0c;并帮助…...

Dify应用-工作流

目录 DIFY 工作流参考 DIFY 工作流 2025-1-15 老规矩感谢参考文章的作者,避免走弯路。 2025-1-15 方便容易上手 在dify的一个桌面上,添加多个节点来完成一个任务。 每个工作流必须有一个开始和结束节点。 节点之间用线连接即可。 每个节点可以有输入和输出 输出类型有,字符串,…...

02.02、返回倒数第 k 个节点

02.02、[简单] 返回倒数第 k 个节点 1、题目描述 实现一种算法&#xff0c;找出单向链表中倒数第 k 个节点。返回该节点的值。 2、题解思路 本题的关键在于使用双指针法&#xff0c;通过两个指针&#xff08;fast 和 slow&#xff09;&#xff0c;让 fast 指针比 slow 指针…...

Linux手写FrameBuffer任意引脚驱动spi屏幕

一、硬件设备 开发板&#xff1a;香橙派 5Plus&#xff0c;cpu&#xff1a;RK3588&#xff0c;带有 40pin 外接引脚。 屏幕&#xff1a;SPI 协议 0.96 寸 OLED。 二、需求 主要是想给板子增加一个可视化的监视器&#xff0c;并且主页面可调。 平时跑个模型或者服务&#xff0c;…...

怎么修复损坏的U盘?而且不用格式化的方式!

当你插入U盘时&#xff0c;若电脑弹出“需要格式化才能使用”提示&#xff0c;且无法打开或读取其中的数据&#xff0c;说明U盘极有可能已经损坏。除此之外&#xff0c;若电脑在连接U盘后显示以下信息&#xff0c;也可能意味着U盘出现问题&#xff0c;需要修复损坏的U盘&#x…...

语音技术在播客领域的应用(2)

播客是以语音为主&#xff0c;各种基于AI 的语音技术在播客领域十分重要。 语音转文本 Whisper Whisper 是OpenAI 推出的开源语音辨识工具&#xff0c;可以把音档转成文字&#xff0c;支援超过50 种语言。这款工具是基于68 万小时的训练资料&#xff0c;其中包含11.7 万小时的…...

【Linux】应用层自定义协议与序列化

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;Linux 目录 一&#xff1a;&#x1f525; 应用层 &#x1f98b; 再谈 "协议"&#x1f98b; 网络版计算器&#x1f98b; 序列化 和 反序列化 二&#xff1a;&#x1f525; 重新理解 read、…...

深度学习中的张量 - 使用PyTorch进行广播和元素级操作

深度学习中的张量 - 使用PyTorch进行广播和元素级操作 元素级是什么意思&#xff1f; 元素级操作在神经网络编程中与张量的使用非常常见。让我们从一个元素级操作的定义开始这次讨论。 一个_元素级_操作是在两个张量之间进行的操作&#xff0c;它作用于各自张量中的相应元素…...

gitignore忽略已经提交过的

已经在.gitignore文件中添加了过滤规则来忽略bin和obj等文件夹&#xff0c;但这些文件夹仍然出现在提交中&#xff0c;可能是因为这些文件夹在添加.gitignore规则之前已经被提交到Git仓库中了。要解决这个问题&#xff0c;您需要从Git的索引中移除这些文件夹&#xff0c;并确保…...

h5使用video播放时关掉vant弹窗视频声音还在后台播放

现象&#xff1a; 1、点击遮罩弹窗关闭&#xff0c;弹窗的视频已经用v-if销毁&#xff0c;但是后台会自己从头开始播放视频声音。但是此时已经没有视频dom 2、定时器在打开弹窗后3秒自动关闭弹窗&#xff0c;则正常没有问题。 原来的代码&#xff1a; //页面 <a click&quo…...

Widows搭建sqli-labs

使用ms17_010渗透win7 ms17_010针对windows445端口(共享文件), 现有一台win7虚拟机IP 192.168.80.129, 开放445端口, 使用msf渗透该虚拟机 auxiliary 使用auxiliary判断目标主机是否适用smb17_010漏洞 这里发现80网段, 有一台主机适用 exploit 使用search ms17_010 type:expl…...

为AI聊天工具添加一个知识系统 之46 蒙板程序设计(第一版):Facet六边形【意识形态:操纵】

本文要点 要点 (原先标题冒号后只有 “Facet”后改为“Face六边形【意识形态】” &#xff0c;是 事后想到的&#xff0c;本文并未明确提出。备忘在这里作为后续的“后期制作”的备忘) 前面讨论的&#xff08;“之41 纯粹的思维”&#xff09;中 说到&#xff0c;“意识”三…...

ASP.NET Core WebApi接口IP限流实践技术指南

在当今的Web开发中&#xff0c;接口的安全性和稳定性至关重要。面对恶意请求或频繁访问&#xff0c;我们需要采取有效的措施来保护我们的WebApi接口。IP限流是一种常见的技术手段&#xff0c;通过对来自同一IP地址的请求进行频率控制&#xff0c;可以有效地防止恶意攻击和过度消…...

文件移动工具 (File Mover)

这是一个简单但功能强大的Python脚本&#xff0c;用于递归遍历目录并将指定格式的文件移动到目标目录。默认支持移动PDF文件&#xff0c;但也可以通过参数指定其他文件格式。 功能特点 递归遍历源目录及其所有子目录支持移动任意指定格式的文件自动处理目标目录中的文件重名情…...

革新性硬件控制工具:OmenSuperHub实现游戏本性能优化与完全掌控

革新性硬件控制工具&#xff1a;OmenSuperHub实现游戏本性能优化与完全掌控 【免费下载链接】OmenSuperHub 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub OmenSuperHub是一款专为惠普暗影精灵系列游戏本设计的开源硬件控制工具&#xff0c;提供完全离线的…...

LingBot-Depth实操手册:Gradio API返回JSON结构解析与字段含义

LingBot-Depth实操手册&#xff1a;Gradio API返回JSON结构解析与字段含义 1. 引言&#xff1a;为什么需要了解API返回结构 当你使用LingBot-Depth处理深度图像时&#xff0c;最让人困惑的可能就是API返回的那一串JSON数据。这些数据到底代表什么&#xff1f;每个字段有什么含…...

ESFT-gate-summary-lite:AI快速提炼文本关键信息

ESFT-gate-summary-lite&#xff1a;AI快速提炼文本关键信息 【免费下载链接】ESFT-gate-summary-lite ESFT-gate-summary-lite模型&#xff0c;基于DeepSeek-ai的开源项目&#xff0c;专注于提升基础模型摘要能力。源自ESFT-vanilla-lite&#xff0c;强化文本摘要&#xff0c;…...

leOS2:基于看门狗定时器的轻量级嵌入式调度器

1. leOS2&#xff1a;基于看门狗定时器的轻量级嵌入式调度器 leOS2&#xff08;little embedded Operating System 2&#xff09;是一个专为资源受限的8位AVR微控制器设计的极简实时调度器。它不依赖于通用定时器&#xff08;如Timer0/Timer1&#xff09;&#xff0c;而是创造…...

AutoDL云服务器避坑指南:从PyTorch到Jupyter,手把手搞定GPU环境配置

AutoDL云服务器GPU环境配置实战&#xff1a;从镜像选择到Jupyter避坑全攻略 第一次在AutoDL这类云GPU平台上配置深度学习环境时&#xff0c;那种既兴奋又忐忑的心情我至今记忆犹新。看着琳琅满目的镜像选项和复杂的版本匹配要求&#xff0c;稍有不慎就会陷入"版本地狱&qu…...

Pyodide vs Rust-Python vs WASI-NN:Python WASM性能终极对决(含13项微基准测试原始数据)

第一章&#xff1a;Pyodide vs Rust-Python vs WASI-NN&#xff1a;Python WASM性能终极对决&#xff08;含13项微基准测试原始数据&#xff09; WebAssembly 正在重塑 Python 在浏览器与边缘环境中的执行范式。本章基于统一测试平台&#xff08;WASI SDK 20.0、Chrome 124、In…...

OpenClaw密码管理:nanobot安全存储与自动填充方案

OpenClaw密码管理&#xff1a;nanobot安全存储与自动填充方案 1. 为什么需要本地化的密码管理方案 去年的一次数据泄露事件让我彻底放弃了所有云端密码管理器。当时我使用的某知名商业工具突然弹出安全警报&#xff0c;提示"您的部分密码可能已被未授权访问"。虽然…...

天津专业的阀门厂排名

在天津&#xff0c;阀门行业发展态势良好&#xff0c;众多阀门厂各有特色与优势。中国通用机械工业协会最新发布的《2026年阀门行业高质量发展白皮书》显示&#xff0c;天津的阀门产业在技术创新、产品质量和市场份额等方面都有不错的表现。下面为大家介绍几家天津比较知名的阀…...

AI药物研发加速发现:DeepChem深度学习框架实战指南

AI药物研发加速发现&#xff1a;DeepChem深度学习框架实战指南 【免费下载链接】deepchem Democratizing Deep-Learning for Drug Discovery, Quantum Chemistry, Materials Science and Biology 项目地址: https://gitcode.com/GitHub_Trending/de/deepchem 深度学习药…...

PdfiumAndroid完全指南:从集成到高级应用

PdfiumAndroid完全指南&#xff1a;从集成到高级应用 【免费下载链接】PdfiumAndroid 项目地址: https://gitcode.com/gh_mirrors/pd/PdfiumAndroid PdfiumAndroid是一款专为Android开发打造的PDF渲染库&#xff0c;基于Pdfium原生库提供API级别14及以上设备的PDF文件处…...