1 Direct Audio TX代码流程

1.1 从Host到FW

1.1.1 代码流程

htc.c::HifLayerRecvCallback//从HIF_USB_CONTEXT获取数据中断,具体问俊奇

-> htc.c::_HTCPipeIndicateRecvMgs//HTC_SERVICE.ProcessRecvMsgMultiple = htt_tgt_hif_svc_h2t_input

-> htt_tgt_hif_svc.c::_htt_tgt_hif_svc_h2t_input//处理各类消息

-> htt_tgt_hif_svc.c::_htt_tgt_hif_svc_h2t_msg_dispatch//从HTC_BUFFER中读出h2t_msg_type=HTT_H2T_MSG_TYPE_TX_FRM

-> htt_tgt_tx.c::_htt_tgt_tx_input//处理HTT_H2T_MSG_TYPE_TX_FRM

-> ar_wal_tx_de.h::ar_wal_tx_de_input//调用_tx_de_input

-> ar_wal_tx_de_patch.c::patch_tx_de_input

1.1.2 重要的结构体

1.1.3 对应的log

enter htc.c::HifLayerRecvCallback.
enter htc.c::_HTCPipeIndicateRecvMgs.
enter htt_tgt_hif_svc.c::_htt_tgt_hif_svc_h2t_input.
enter htt_tgt_hif_svc.c::_htt_tgt_hif_svc_h2t_input call htt_tgt_hif_svc_h2t_msg_dispatch.
enter htt_tgt_hif_svc.c::_htt_tgt_hif_svc_h2t_msg_dispatch.
enter htt_tgt_tx.c::_htt_tgt_tx_input.
enter htt_tgt_tx.c::_htt_tgt_tx_input call ar_wal_tx_de_input 002, tid = 0.
enter ar_wal_tx_de_patch.c::patch_tx_de_input.

1.2 从FW到Air

1.2.1 代码流程

ar_wal_tx_send_patch.c::patch_tx_send_completion_hdlr//ACK处理函数,分析谁调用了它

-> ar_wal_tx_send_patch.c::patch_tx_send_proc_ppdu_done

/ar_wal_tx_send_patch.c::patch_tx_send_deliver_comp_pending_descs//comp_ctxt->tx_comp_ind_buf_send=htt_tgt_tx_compl_ind

-> htt_tgt_tx.c::_htt_tgt_tx_compl_ind

-> htt_tgt_hif_svc.c::_htt_tgt_hif_svc_msg_to_host

1.2.2 重要的结构体

struct wal_tx_msdu/wal_tx_msdu_t

结构体WHAL_TX_MSDU_DESC

结构体WHAL_TX_FRAG_DESC

举例:从struct wal_tx_mpdu* ppdu_mpdu_list中获取数据

A_UINT8* bufPtr = (A_UINT8*)(A_CPU_ADDR((WHAL_TX_FRAG_DESC*)A_CPU_ADDR(WHAL_MSDU_GET_DATA_REMOTE(WHAL_MSDU_DESC(msdu_desc)))->bufPtr));

(1) WHAL_MSDU_DESC(msdu_desc)强制转化成WHAL_TX_MSDU_DESC

(2) WHAL_MSDU_GET_DATA_REMOTE(msdu_desc_ptr)=WHAL_TX_MSDU_DESC.fragDescPtr

(3) (WHAL_TX_FRAG_DESC*)A_CPU_ADDR(frag_desc)->bufPtr=WHAL_TX_FRAG_DESC.bufPtr

struct ath_buf

struct htcWlanBuffers

struct txbuf

举例:从struct ath_buf中获取数据

A_UINT8* buffer = WLAN_BUF_START(abf->bf_b.wlanBuf.rx);

struct ath_buf->struct htcWlanBuffers->struct txbuf.bfdata_start

A_UINT32 length = WLAN_BUF_LENGTH(abf->bf_b.wlanBuf.rx);

struct ath_buf->struct htcWlanBuffers->struct txbuf.bfdata_len

1.2.3 对应的log:

enter ar_wal_tx_send_patch.c::patch_tx_send_completion_hdlr.
enter ar_wal_tx_send_patch.c::patch_tx_send_completion_hdlr call tx_send_proc_ppdu_done.
enter ar_wal_tx_send_patch.c::patch_tx_send_proc_ppdu_done.
enter ar_wal_tx_send_patch.c::patch_tx_send_deliver_comp_pending_descs.
enter htt_tgt_tx.c::_htt_tgt_tx_compl_ind.
enter htt_tgt_hif_svc.c::_htt_tgt_hif_svc_msg_to_host.

android wifi Direct Audio TX/RX延迟分析的更多相关文章

  1. Android WIFI 分析(一)

    本文基于<深入理解Android WiFi NFC和GPS 卷>和 Android N 代码结合分析   WifiService 是 Frameworks中负责wifi功能的核心服务,它主 ...

  2. android wifi ANR问题分析总结

    android wifi ANR问题分析总结 1 看看main进程阻塞在那里? 2 调用关系的函数阻塞在那里? 3 最终阻塞函数的阻塞前的log以及状态

  3. 【Android】 Android-wifi 直连 wifi direct wifi p2p

    现在,Android的支持Wi -Fi的直接点对点点对点(P2P)Android系统的供电设备和其他类型的设备,没有一个热点或互联网连接之间的连接.Android框架提供了一套Wi - Fi的P2P的 ...

  4. Android网络通信之WiFi Direct

    使用Wi-Fi Direct技术可以让具备硬件支持的设备在没有中间接入点的情况下进行直接互联.Android 4.0(API版本14)及以后的系统都提供了对Wi-Fi Direct的API支持.通过对 ...

  5. 马上搞定Android平台的Wi-Fi Direct开发

    导语 移动互联网时代,很多用户趋向于将大量的资料保存在移动设备上.但在给用户带来便利的同时引发了一个新的问题——保存在移动设备上的资料该怎样共享出去?到了思考时间,普通青年这样想:折腾什么劲啊,直接用 ...

  6. Android网络通信(8):WiFi Direct

    Android网络通信之WiFi Direct 使用Wi-Fi Direct技术可以让具备硬件支持的设备在没有中间接入点的情况下进行直接互联.Android 4.0(API版本14)及以后的系统都提供 ...

  7. Android Wi-Fi Display(Miracast)介绍

    地址:http://blog.csdn.net/innost/article/details/8474683 Android Wi-Fi Display(Miracast)介绍 2012年11月中旬, ...

  8. 17、Wi-Fi Direct

    Wi-Fi Direct简介 从Android4.0(API Level=14)开始,允许通过Wi-Fi模块在两个移动设备之间建立直接连接(这种技术称为Wi-Fi Direct),这种连接不需要无线路 ...

  9. android——wifi系统架构

    1. 系统架构 Android WiFi系统引入了wpa_supplicant,它的整个WiFi系统以wpa_supplicant为核心来定义上层用户接口和下层驱动接口.整个WiFi系统架构如下图所示 ...

随机推荐

  1. UITextView 显示不全的问题

    //设置UITextView的内边距 textView.contentInset = UIEdgeInsetsMake(0, 0, 20, 0);

  2. iOS代码实现九宫格

    #define ScreenW [UIScreen mainScreen].bounds.size.width #define ScreenH [UIScreen mainScreen].bounds ...

  3. 用 python实现简单EXCEL数据统计

    任务: 用python时间简单的统计任务-统计男性和女性分别有多少人. 用到的物料:xlrd 它的作用-读取excel表数据 代码: import xlrd workbook = xlrd.open_ ...

  4. Loadrunner,将http请求返回的中文结果打印出来

    Loadrunner 做保险承保业务测试 1. 保险正常业务流程:保费计算--->保存--->申请核保--->核保--->缴费(出保单) 问题描述: 脚本录制,参数化完成后,R ...

  5. android接收短信——framework处理流程(android 5.1)

    modem层不懂,所以直接从RIL.java开始.以电信卡接收短信为例 modem通知RIL.java中的 RILReceiver处理接收信息 class RILReceiver implements ...

  6. easyui form表单提交应注意的问题

    今天在一个项目中用到表单提交,代码如下: $('#CreateForm').form('submit', { onSubmit: function () { ajaxCreateFrom(this, ...

  7. freeCodeCamp:Slasher Flick

    返回一个数组被截断n个元素后还剩余的元素,截断从索引0开始. /*思路 利用splice截断数组arr,返回运算后的数组arr; 如果howMany大于或等于数组长度,则返回空数组: */ funct ...

  8. 后台返回字符串类型function的处理 (递归算法)

    $(function(){ $.ajax({ type: "post", url: "${ctx}/modules/fos/reference/echart", ...

  9. MVC 单元测试

    1.新建mvc项目 添加controller 添加action 或者方法 public ActionResult Index(string str) { ViewBag.Teststr = str; ...

  10. 和以往印象不同的Java

    Java编程概述 一个Java源文件至多有一个public类,但是可以有很多class的定义 public static void main (String args[]) public 代表公共的, ...