WIFI之三:WIN MOBILE平台上的88W8688驱动
来源:互联网 发布:ubuntu恢复删除的文件 编辑:程序博客网 时间:2024/05/02 06:12
(1)缩写术语
OID-object identifier
SSID-service set identifier
BSS-basic service set
ESS-extended service set
RSSI-received signal strength indication
NIC-Network Interface Cards
NDIS-Network Driver Interface Specification
(2)WLAN接口层
网络的驱动,无线和有线都是去填充NDIS的预留接口。关键函数如下:
(A),DriverEntry
在wince下的任何网络驱动都要实现的函数有DriverEntry。在该函数中初始化一个NDIS_MINIPORT_CHARACTERISTICS变量。这是一个关键的变量,它的类型是一个结构体,并且具有很多函数指针的元素,几乎所有的adapter的功能函数都是通过这个变量来开放给NDIS来调用。接着就是用NdisMRegisterMiniport这个NDIS提供的函数来注册这个变量,其实就是相当于注册了一个adapter的driver了,在这个函数返回之前,上述结构体变量中的InitializeHandler函数指针(被赋值为MrvDrvInitialize)被调用,以用来初始化adapter设备(This routine will check medium support and call resource allocation and HW initialization routines to set up the staion.)
DriverEntry只做了两件事:NdisMInitializeWrapper和NdisMRegisterMiniport。
NdisMInitializeWrapper通知NDIS一个新的miniport正在初始化。NIC(网络接口卡)驱动在调用其他NdisXXX函数之前必须要先调用该函数。在这个函数中有一个out参数NdisWrapperHandle:in which NDIS returns a handle that represents itself。根据MS的操作习惯,可以知道这个HANDLE是要用来指示下面很多操作的。
NdisMRegisterMiniport:每一个网卡驱动都必须用它自己提供的MiniportXXX函数来填充一个NDIS_MINIPORT_CHARACTERISTICS结构体变量。这个变量在注册的时候被拷贝到NDIS库的内部以存储,所以在注册以后,miniport driver不能改变它的handler函数。在注册完成,该函数返回之前会调用MiniportInitialize函数,也就是这里的MrvDrvInitialize,它的调用是在ndis库中被间接调用的。
(B),InitializeHandler
InitializeHandler函数中最重要的就是分配一个Adapter变量的空间,并初始化该结构变量的元素,以后的操作几乎都是基于该变量进行的。
MrvDrvInitialize:在这里第一个重要的函数就是If_Initialize【sdio_Initialization】,接口配置初始化函数,这里也就是对SDIO的配置与初始化。
If_FirmwareDownload,这个就是要说的第二个重要的函数,从名字可以看出也是接口函数,这个就是SDIO的sdio_FirmwareDownload:通过SDIO接口下载了image到device。
InitializeWirelessConfig:这个函数就不得不说了,从名字知道,这是对无线的初始配置。首先通过SDIO发送HostCmd_CMD_GET_HW_SPEC命令,并等待device的响应。这个命令应该是获取填充Adapter->PermanentAddr的值。接着是通过PrepareAndSendCommand来设置fragmentation threshold和RTS threshold。最后是通过PrepareAndSendCommand来设置对Mac的控制值,值为Adapter->CurrentMacControl(接收、发送、广播、多播)。
(C),InitSyncObjects
这个函数进一步初始化了Adapter的元素,创建了一系列的事件和时间变量。最后创建了一个Adapter->hControllerInterruptThread控制器中断线程,该线程的主体是MrvIstThread函数。在此函数体中可以看到它等待的事件是pAdapter->hControllerInterruptEvent。这个事件是在多个地方被Set的,不过主要是在SDNdisInterruptCallback中。
SDNdisInterruptCallback是在SDIOInitialization的时候被设置用来关联某个设备的:
sdStatus=SDIOConnectInterrupt(pAdapter->hDevice,(PSD_INTERRUPT_CALLBACK)SDNdisInterruptCallback);
SDIOConnectInterrupt函数是一个系统函数,它的解释是:This function specifies a function to be called when an SDIO card interrupt occurs.
MrvIstThread中处理两类中断:soft_int和host_int。soft中断包括:chipreset、auto_deep_sleep和tx_request。Host中断包括:upload和download两类。Upload包括:接收的数据包、命令包以及各事件;download包括:数据包和命令包的发送。
参考原文:http://bluefish.blog.51cto.com/214870/474656
- WIFI之三:WIN MOBILE平台上的88W8688驱动
- WIFI之三:WIN MOBILE平台上的88W8688驱动
- UART之三:PXA平台WIN MOBILE的UART底层
- linux NAND驱动之三:6410平台上的NAND驱动加载
- linux NAND驱动之三:6410平台上的NAND驱动加载
- linux NAND驱动之三:6410平台上的NAND驱动加载
- linux NAND驱动之三:6410平台上的NAND驱动加载
- 控制Windows Mobile的LED之三:SN3101芯片驱动(内核和BOOTLOADER)
- Win CE 平台上java虚拟机CrE-ME的安装
- Win CE 平台上java虚拟机CrE-ME的安装
- Win CE 平台上java虚拟机CrE-ME的安装
- 6410平台上配置WIN CE的DDR参数
- OpenCV4Android SDK在Win 8.1平台上的配置
- Windows Mobile平台上重写Back健的行为
- 2410平台上dm9000a网卡驱动分析(三)
- windows Mobile上的opengl项目移入win ce的几个问题
- win x64平台驱动测试数字签名
- WIFI之四:WINCE 500上WIFI工具的编写
- WINCE的电源管理
- TextBox文本框中如何换行
- WIFI之四:WINCE 500上WIFI工具的编写
- 计算机类核心期刊排名
- 使用DATE时注意
- WIFI之三:WIN MOBILE平台上的88W8688驱动
- 黑马程序员-java-枚举
- 基于线程的WINCE测试程序
- 【android学习之九】——数据存储1:SharedPreferences,Files,网络
- C#将文本框中的字符串导出至txt文件中
- STL中vector转数组(实际是数组的指针)(zz)
- android Launcher——拖放功能深入研究
- WINCE的RTC驱动
- oracle常用SQL语句