mtkwifidriver驱动的分析
MTK_驱动总结文档

MTK_驱动总结文档G616 驱动文档总结在/mediatek/custom下会有好多重名的文件,在不同的文件夹里,最终会编译哪个文件是根据目录的优先级来判断brighter89_evdo_jb2 > mt6589 > xxmon也就是说如果brighter89_evdo_jb2 ,mt6589 , xxmon 同时存在一文件,最终编译的会是brighter89_evdo_jb2目录下的文件也可以通过/mediatek/custom/out/开判断,此文件时最终编译的文件运行/mediatek/dct/。
选择文件/mediatek/custom/brighter89_evdo_jb2/kernel/dct/dct /Edit,打开后可以修改GPIO的模式,上拉,下拉,输入,输出修改后点击“Save”和“Gen Code”重新编译:./makeMtk brighter89_evdo_jb2 codegen ./makeMtk brighter89_evdo_jb2 new pl lk kernel ./makeMtk brighter89_evdo_jb2 bootimage提交时替换bw/custom/project/g616/mediate/custom/brighter89_evdo_jb2/kernel/dct/dct修改CUSTOM_LK_LCM=hx8389b_qhd_dsi_vdoBOOT_LOGO=qhd //根据屏的分辨率CUSTOM_KERNEL_LCM=hx8389b_qhd_dsi_vdo LCM_HEIGHT=960 LCM_WIDTH=540/mediatek/custom/xxmon/kernel/lcm目录名与下hx8389b_qhd_dsi_vdo名字相同,目录下为驱动文件在/mediatek/custom/xxmon/kernel/lcm/mt65xx_lcm_下添加要添加的屏#if defined(HX8389B_QHD_DSI_VDO) &hx8389b_qhd_dsi_vdo_lcm_drv, #endif下修改CUSTOM_HAL_IMGSENSOR=ov5648_mipi_raw hi257_yuv //前后camera CUSTOM_HAL_MAIN_IMGSENSOR=ov5648_mipi_rawCUSTOM_HAL_SUB_IMGSENSOR=hi257_yuvCUSTOM_KERNEL_IMGSENSOR=ov5648_mipi_raw hi257_yuv //前后camera CUSTOM_KERNEL_MAIN_IMGSENSOR=ov5648_mipi_raw CUSTOM_KERNEL_SUB_IMGSENSOR=hi257_yuv驱动要添加的文件:/mediatek/custom/xxmon/kernel/imgsensor/ov5648_mipi _raw /mediatek/custom/xxmon/hal/imgsensor/ ov5648_mipi_raw//hi257前camera同理/mediatek/custom/xxmon/hal/imgsensor/src/ #if defined(OV5648_MIPI_RAW)RAW_INFO(OV5648MIPI_SENSOR_ID, SENSOR_DRVNAME_OV5648_MIPI_RAW, NULL), #endif /mediatek/custom/xxmon/kernel/imgsensor/src/ kd_ #if defined(OV5648_MIPI_RAW) {OV5648MIPI_SENSOR_ID,SENSOR_DRVNAME_OV5648_MIPI_RAW,OV5648MIPISensorInit}, #endifCamera电所在文件:/mediatek/custom/brighter89_evdo_jb2/kernel/camera/ camera/kd_camera_ 核心驱动文件:/mediatek/custom/xxmon/kernel/imgsensor/src /kd_ 如果修改HAL层参数编译命令如下:./makeMtk -t brighter89_evdo_jb2 mm mediatek/platform/mt6589/hardware/camera/下修改: CUSTOM_HAL_LENS=dw9714afCUSTOM_HAL_MAIN_LENS=dw9714af CUSTOM_KERNEL_LENS=dw9714afCUSTOM_KERNEL_MAIN_LENS=dw9714af添加对应的文件夹和驱动文件/G616/mediatek/custom/xxmon/kernel/lens/dw9714af/ M config/mt6589/M custom/brighter89_evdo_jb2/hal/lens/src/ M custom/xxmon/hal/inc/camera_custom_A custom/xxmon/hal/lens/dw9714af/lens_para_ M custom/xxmon/hal/lens/src/ A custom/xxmon/kernel/lens/dw9714af/ A custom/xxmon/kernel/lens/inc/M platform/mt6589/hardware/camera/core/featureio/drv/ lens/mcu_下修改:CUSTOM_KERNEL_FLASHLIGHT=constant_flashlight CUSTOM_HAL_FLASHLIGHT=constant_flashlight驱动核心:/mediatek/custom/xxmon/kernel/flashlight/src/kd_/mediatek/custom/xxmon/kernel/flashlight/constant_f lashlight/leds_G616用的bd7710gwl driver IC,leds_会有相应的更改,文件修改都放到bw目录下 HAL tunning 文件:mediatek/custom/brighter89_evdo_jb2/hal/camera/came ra/flash_tuning_下修改:CUSTOM_KERNEL_TOUCHPANEL=ft5336驱动文件:mediatek/custom/xxmon/kernel/touchpanel/ft5336/ft53 36_/home/chenjian/CJ_WORK/code/G616/mediatek/custom/br ighter89_evdo_jb2/kernel/touchpanel/ft5336/tpd_cust om_下修改:CUSTOM_KERNEL_ACCELEROMETER=lis3dh CUSTOM_KERNEL_ALSPS=tmd2772驱动文件:/mediatek/custom/xxmon/kernel/accelerometer/lis3dh/ //gsensor 配置I2c和Gsensor 的position/mediatek/custom/brighter89_evdo_jb2/kernel/acceler ometer/lis3dh/cust_ static struct acc_hw cust_acc_hw = { .i2c_num = 3,.direction = 6, //chenjian 20XX-12-26 modify gsensor position.power_id = MT65XX_POWER_NONE, /*!< LDO is not used */ .power_vol= VOL_DEFAULT, /*!< LDO is not used */.firlen = 0, //old value 16 /*!< don't enable low pass fileter */ };/mediatek/custom/xxmon/kernel/alsps/tmd2772/ //psensor light sensor 配置I2c和 light sensor上报数据/mediatek/custom/brighter89_evdo_jb2/kernel/alsps/t md2772/cust_.als_level = { 4, 40, 80, 120, 160, 240, 400, 800, 1200, 1600, 20XX, 3000, 5000, 8000, 65535}, .als_value = {0,20, 60, 100, 150, 240, 400, 600, 1000, 1500, 20XX,3000, 5000, 8000, 10000, 10000},配置xls/mediatek/build/tools/emigen/MT6589/MemoryDeviceLis t_都是MTK release的,需要添加的memory要在MemoryDeviceList_表里,且名字与/mediatek/custom/brighter89_evdo_jb2/preloader/inc/ custom_名字需一样如H9TP32A8JDBCPR_KGM 需和MemoryDeviceList_表的名字一样 #define BOARD_ID MT6589_EVB#define CS_PART_NUMBER[0] SD7DP28C_4G#define CS_PART_NUMBER[1] H9TP32A8JDBCPR_KGM Memory兼容:向下添加即可#define CS_PART_NUMBER[2] #define CS_PART_NUMBER[3] ….….9.音频参数硬件同事,通过工具修改,导出文件,替换如下目录/mediatek/custom/brighter89_evdo_jb2/cgen/inc/。
MTK软件培训课程(三)MTK驱动架构分析精品PPT课件

GDI和pixtel_UI的关系
GDI的实现
使用GDI_HANDLE,gdi_handle来操作 GDI对象,GDI的对象可以是layer,gif, jpeg等。 GDI函数返回一个GDI_RESULT GDI函数使用互斥来保护,进入GDI函数 时调用GDI_ENTER_CRITICAL_SECTION()退 出函数时调用GDI_EXIT_CRITICAL_SECTION()
Media Task线程从med_create开始创建,其实 med_create函数只是将入口地址传递给库里的 函数,由里面的函数来创建线程。
Med_create中传入了以下的函数:
med_task_main,
/* 线程入口,消息泵 */
med_init,/*源自初始化 ,指定空间分配*/NULL,
设置当前活动模块,通过stack_set_active_module_id 分发消息,通过消息号,找到对应的消息处理函数,
使用med_main函数。程序里面有很大的一个消息索 引 释放返回消息数据内存区域,free_ilm
Media Task消息
从med_maincam_main相应的消息处 理函数,这时从MDI发过来的一个消息 才被识别,并进入相应的消息处理函数。 这时,我们回过头来再来看我们前面在 MDI章节所分析的Preview实现的例子, 会更清晰一些。 原来的例子:Preview实现
Media Task
Media Task模块分成4个部分:
Camera Audio Image Video
Media Task
Media Task模块有以下的作用:
MTK驱动基本介绍

MTK驱动基本介绍MTK(Mediatek Inc.)是台湾联发科技股份有限公司的一个子公司,是一家全球领先的半导体芯片设计公司。
MTK驱动(Mediatek Driver)是联发科技开发的一款设备驱动程序,用于支持和管理MTK系列芯片的硬件设备。
MTK驱动的目的是为了提供对MTK芯片的各种硬件设备的支持,使其能够在计算机系统中正常工作。
MTK芯片广泛用于智能手机、平板电脑、智能家居、物联网等领域的设备,而MTK驱动则起到了连接和协调计算机系统和硬件设备之间的桥梁作用。
1.提供设备识别和连接:MTK驱动可以识别MTK芯片的硬件设备,并与计算机系统进行连接,完成设备的初始化和配置工作。
2.实现设备通信和数据传输:MTK驱动通过与设备之间的通信接口,实现了设备和计算机之间的数据传输和交互,包括文件的读写、音视频的传输和图像的显示等。
3.支持设备管理和控制:MTK驱动可以对MTK芯片的硬件设备进行管理和控制,包括设备的开关、功能设置、驱动安装和升级等。
4.提供系统稳定性和兼容性:MTK驱动经过严格的测试和验证,能够保证在不同的计算机系统环境下的稳定性和兼容性,确保硬件设备能够正常工作。
5.支持开发者和用户的需求:MTK驱动提供了丰富的开发工具和接口,为开发者和用户提供定制化和个性化的驱动支持,方便二次开发和扩展。
2.连接设备和计算机:使用USB数据线或其他连接方式将MTK芯片的硬件设备连接到计算机上。
3.设置设备连接模式:根据设备的不同,选择合适的连接模式,如USB存储模式、USB调试模式等。
4.等待系统安装驱动:当设备连接到计算机后,操作系统会自动检测并安装相应的MTK驱动程序,期间需要等待一段时间。
5.使用设备:一旦驱动安装完成,设备就可以在计算机上正常工作,可以进行文件传输、数据交互、驱动管理等操作。
总之,MTK驱动是一款重要的软件工具,为MTK芯片的硬件设备提供了必要的支持和管理功能,使其能够在计算机系统中正常工作。
MTK系统和驱动

驱动部分详细讲解 1 开机启动流程:
RESET Boot from BOOTROM
Receiving start- up pattern via UART1 within 150ms?
YES META Mode
NO
Switch PC to External Device Bank #0 Assign Supervisor Mode SP
Touch Panel
LCD LCD Display Display
Media IC
Camera
MTK软件分层初步解析
1、OS层:RTOS嵌入式实时操作系统。
在nucleus.h中看到操作系统的各类操作函数,其 主要作用是实时和效的去调度当前的多项任务, 合理的去管理内存,合理的管理当前资源如TIMER 等。 主模块:任务管理、定时器管理、存储器管理、 资源管理、事件管理、消息管理、队列管理、旗 语管理等。 提问:我们平常调用的kal_sleep_task函数是 如何通过OS实现的?
• 必须学会欣然面对的一种结果----被接纳
真思考如何为以后的发展开好头。
• 以具体的形式感谢招聘单位的接纳,如邮件、短信 • 考虑怎样使自己的知识能力更适应工作需要 • 把走进工作岗位当作职业生涯的重要的第一步,认
Thank you
Reserved_vector B Reserved_vector 未定义中断
IrqHandler B IrqHandler
IRQ
FiqHandler
FIQ 快速中断
…………………………. BL
C_Main 转C入口
谢谢!
求职应注意的礼仪
• 求职时最礼貌的修饰是淡妆 • 面试时最关键的神情是郑重
MTK驱动基本介绍

MTK驱动基本介绍
MTK驱动,也称为MediaTek驱动,是一种特定于联发科技(MediaTek)芯片的驱动程序。
联发科技是全球领先的半导体解决方案提
供商之一,其产品广泛应用于移动通信、家庭娱乐、无线通信和物联网等
领域。
MTK驱动的作用是连接计算机与MTK芯片设备之间的通信,使得计算
机可以与MTK芯片设备进行数据交互和控制。
这些设备包括智能手机、平
板电脑、物联网设备以及其他使用MTK芯片的电子产品。
MTK驱动是连接
计算机和这些设备之间桥梁的关键。
MTK驱动负责与芯片设备之间的通信协议,包括数据传输、设备识别、设备控制等功能。
它通过USB接口与计算机连接,并与操作系统进行交互,将设备的功能暴露给计算机使用者。
MTK驱动的正常工作对于设备的功能
和性能至关重要。
MTK驱动的开发是一个复杂而严谨的过程。
开发人员需要深入研究MTK芯片的架构和规范,并编写适配特定芯片的驱动程序。
他们还需要进
行严格的测试和验证,以确保驱动程序在各种情况下都能正常工作。
同时,开发人员还需要与MTK芯片的生产商保持密切合作,获取相关技术支持和
更新。
总之,MTK驱动是一种桥梁,将计算机与MTK芯片设备连接起来。
它
通过通信协议实现数据传输和设备控制,使得用户可以便捷地使用MTK芯
片设备。
MTK驱动的适应性和兼容性优势使得其成为移动通信和物联网领
域的重要组成部分。
同时,MTK驱动的安装和更新也是用户使用设备时需
要考虑的重要问题。
MTK_Ralink wifi开发及相关应用指南

目录1.VMware9虚拟机环境安装 (2)2.Ubuntu系统在VMware上安装 (7)3.RT5350开发环境搭建及错误处理 (40)4.编译RT5350 SDK(Uboot&&Kernel) (44)5.4M/16M和4M/32M的配置方法 (54)6.测试编译固件在开发板正常工作 (55)7.添加自己应用到SDK中 (59)8.添加驱动程序到SDK中,实现控制所有GPIO的电平 (62)9.GPIO复用功能配置说明 (67)10.项目实战---通过手机控制开发板上的LED (67)11.移植Openwrt系统到开发板上,保证无线,有线正常工作 (71)12.Apclient模式(AP+STA同时共存)实现中继功能WDS (75)13.SDK4.1 稳定性以图为证 (77)14.恢复模块出厂设置 (78)15.STA模式设置 (79)16.修改出厂默认参数 (82)17.设置终端串口为普通串口,做wifi转串口项目 (83)18.WEB升级root_uImage (83)19.量厂固件生成方法 (84)20、通过web界面,修改串口应用程序参数 (84)20.1、修改webui配置界面 (84)20.2、修改js与c语言交互 (85)20.3、添加应用程序保存在flash分区字段名 (85)20.4、添加应用程序接受更改的参数 (85)21、支持jffs2文件系统,掉电后保存用户数据 (86)21.1 配置内核 (86)21.2 添加支持jffs2的命令 (88)21.3 修改SDK默认分区,添加用户分区 (89)21.4 测试jffs2文件系统,掉电保存用户数据 (89)1.VMware9虚拟机环境安装1.1下载RT5350开发板资料后,里面有一个如下目录:这里是安装虚拟机全部软件如下图所示:进入<VMware9原版官方软件英文版>目录单击“VMware-workstation-full-9.0.0-812388”这个安装文件,会出现如下界面:选择“下一步”选择“Typical”选择“下一步”选择“下一步“后面的几个界面一直选择“下一步”就行了,然后会出现如下界面,选择“Continue”这时软件正在安装中,耐心的等待一段时间。
MTK手机设备驱动编写介绍

•
LCD_delay_HX8306A();\
•
}
•
#define LCD_DataWrite_HX8306A(_data) \
•
{\
•
*(volatile kal_uint32 *) LCD_HX8306A_DATA_ADDR=
((_data & 0xFF00)<<2)|((_data & 0xFF)<<1);\
TD_CTRL);
construct_local_para(sizeof(aux_id_struct),
aux_id_data->aux_id = AUX_ID_FLICK_OFF;
DRV_BuildPrimitive(flick_ilm, MOD_EINT_HISR, MOD_UEM, MSG_ID_AUX_ID, aux_id_data);
3. GPIO使用中需注意的问题
MTK手机设备驱动编写介绍
二.中断的配置与使用
<1>. 中断个数
8个 EINT0, EINT1为专用中断, EINT2-7 与GPIO等功能复用
<2>. 设置中断模式
通过DRV_TOOL或Gpio_init(void)来初始化,也可在程序中通过 GPIO_ModeSetup(kal_uint16 pin, kal_uint16 conf_dada)随时修改
MTK手机设备驱动编写介绍
audcoeff_default.h
#define DEFAULT_SPEECH_LOUDSPK_MODE_PARA \ {\ 128, 224, 5128, 0, 374, 0, 400, 0 \ }
starty,kal_uint16 endx,kal_uint16 endy) • void LCD_EnterSleep_ST7549T(void) • void LCD_ExitSleep_ST7549T(void) • void LCD_SetContrast_ST7549T(kal_uint8 level)
MTK驱动调试相关总结

MTK驱动调试相关总结 2010-12-14 Ver:1.11 SIM卡2 T卡3 FLASH4 按键KEY5 IO配置6 ADC配置7 EINT配置8 FM驱动9 BT驱动10 TOUCHSCEEN驱动11 LCM驱动12 Sensor驱动13 背光灯、按键灯、振动器、PWM14 跑马灯15 移动传感器、四方传感器16 MP4、3GP播放17 音量参数、EQ参数、音频功放开关18 SMS、电话本等容量设置19 耳机插入、拔出检查、耳机按键处理20 充电器或USB插入、拔出检查、识别21 RF 配置22参考文档附录默认系统平台为MT6253,code版本:09B.W10.12.MP。
版本变更记录:Andy 2010.12.10 Ver:1.0Andy 2010-12-14 Ver:1.11 SIM卡F910(MT6253)SIM卡插槽与系统SIM卡号映射关系drv\src\switchControl_al.c// andy 2010.05.31 SIM卡插槽映射 __DRV_DUAL_SIM_INVERSE__//kal_bool sim_physicalSlotChanged;#ifdef __DRV_DUAL_SIM_INVERSE__kal_bool sim_physicalSlotChanged = KAL_TRUE ;#elsekal_bool sim_physicalSlotChanged = KAL_FALSE;#endif定制支持的SIM电压:Customer_sim_voltage_support.c/* For customer define ME support voltage of SIM *//* For 1.8V Tech. ME use ME_18V_30V *//* For 3.0V ONLY ME use ME_30V_ONLY *//* For 1.8V ONLY ME use ME_18V_ONLY */#define SIM_VOLTAGE_SUPPORT ME_18V_30Vsim_env SIM_GetCurrentEnv(void){(SIM_VOLTAGE_SUPPORT);return}MT6253的“4.3 SIM Interface”,介绍了SIM卡接口的情况。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
管理篇接收到扫描完毕nicRxSDIOAggReceiveRFBssdio有两个通道,两个通道获取数据的流程是一样的,1)通过prEnhDataStr->rRxInfo.u.u2NumValidRx0Len可以获取到该通道目前存储有多少数据包,通道数据包的存储量只有16个,如果超过16个则是固件问题,跳过看下一个通道的2)然后获取当前freeswrfb空闲空间是否够用,不够用则看下一个通道的。
3)可接收的聚合报文(管理帧)长度(u4RxAvailAggLen)为23524)循环遍历某个通道的报文,读到报文长度+4 然后按照4个字节对齐从u4RxAvailAggLen 扣减掉。
如果空间不够则跳出。
5)遍历完之后用2352减去u4RxAvailAggLen 可以得到总的数据长度通过dma获取数据到prRxCtrl->pucRxCoalescingBufPtr中1)6)遍历通道中报文数,把每个报文拷贝到prSwRfb->pucRecvBuff中,并且填充prSwRfb->ucPacketType和prSwRfb->ucStaRecIdx2)nicRxSetupRFB3)如果prSwRfb->pvPacket为空,则先将prSwRfb置成0,然后按照2352分配sk_buff,prSwRfb->pucRecvBuff指向skb->data,prSwRfb->pvPacket指向skb1)同时,prSwRfb->prHifRxHdr指向skb->data首部。
2)nicRxFillRFB3)从prHifRxHdr->ucHerderLenOffset获取出header的offset和MACHeaderLen4)设置prSwRfb->pvHeader指向skb->data越过prHifRxHdr + HIF_RX_HDR_SIZE + u4HeaderOffset,指向的将是beacon帧结构5)重置prSwRfb->u2HeaderLen=u4MacHeaderLen 和prSwRfb->u2PacketLen为原来skb->data长度减去(HIF_RX_HDR_SIZE + u4HeaderOffset)MacHeader 如下图:nicAddScanResult该函数分为replace和add部分,先讲解add部分Add1)如果prAdapter->rWlanInfo.u4ScanResultNum小于63则继续往下走2)先将prAdapter->rWlanInfo.arScanResult[i]到aucIE之前的部分设置为03)设置prAdapter->rWlanInfo.arScanResult[i].u4Length为aucIE之前的部分的长度+IE的长度4)拷贝mac地址到prAdapter->rWlanInfo.arScanResult[i].arMacAddress5)拷贝ssid到prAdapter->rWlanInfo.arScanResult[i].rSsid.aucSsid6)设置u4Privacy、rRssi、eNetworkTypeInUse、eOpMode等7)拷贝prConfiguration到prAdapter->rWlanInfo.arScanResult[i].rConfiguration中8)拷贝rSupportedRates到prAdapter->rWlanInfo.arScanResult[i].rSupportedRates中9)拷贝u2IELength到prAdapter->rWlanInfo.arScanResult[i].u4IELength10)如果u2IELength大于0 则检查aucScanIEBuf是否够放下当前bssdesc的IE部分,如果可以的话,则拷贝到aucScanIEBuf[prAdapter->rWlanInfo.u4ScanIEBufferUsage],然后设置指针到apucScanResultIEs[i]中,接下来重置u4ScanIEBufferUsage的值。
如果空间不够的话,则将arScanResult[i].u4Length、u4IELength、apucScanResultIEs[i]设置为0.如果u2IELength不大于0,则设置apucScanResultIEs[i] = NULL;11)prAdapter->rWlanInfo.u4ScanResultNum++;如果当前已经没有空间存储了,则考虑替换rssi最弱的那个ap authCheckRxAuthFrameTransSeq1)该函数先判断该报文是否是正确的,评判标准就是:如果报文总长度扣掉报文头所剩下的空驾大于6(auth algorithm+auth seq num+status code)这三个字段是必备的意思。
获取auth seq num 来判断该数据包是属于auth request(1和3)还是auth response(2和4)saaFsmRunEventRxAuth(处理auth response的包函数)aaaFsmRunEventRxAuth (处理auth request的包函数aaa指authentication,authorization,and accountingservices即认证授权计费系统)kalEnqueueCommand的cmd最后会由这边来执行wlanProcessCommandQueue mboxRcvAllMsg上层下发scan指令流程分析mtk_cfg80211_scan1)首先先查看下当前是否有在扫描的请求,如果有,则直接退出,通过变量prGlueInfo->p rScanRequest来进行判断2)通过对request进行判断分解请求a.分解ssid,如果请求ssid的个数为1,则将ssid拷贝到rScanRequest的ssid中,如果大于1则直接退出,如果为0,则将rScanRequest.rSsid.u4SsidLen为0;b.分解IE,如果ie_len大于0,则将rScanRequest.pucIE指向request中的ie,并且置为u4IELength为03)通过kalioctl进行发送wlanoidSetBssidListScanExt参数为rScanRequestKalioctl 触发流程:将相关参数组装成prIoReq中,之后唤醒tx_thread来处理OID,然后等待执行结束,在tx_t hread中会调用wlanSetInformation或者wlanQueryInformation,不过这两部分的操作,最后都会调用prIoReq中的回调函数,wlanoidSetBssidListScanExt流程:1.判断参数中请求的长度参数的长度是否等于参数结构的大小2.判断射频是否关闭3.遍历prBSSDescList,将类型为BSS_TYPE_INFRASTRUCTURE的prBssDesc->aucRawBuf清空4.将scanrequest的参数解析出来5.获取ais状态机prAisFsmInfo6.启动prAisFsmInfo->rScanDoneTimer定时器时长为15s如果支持在线扫描,则直接aisFsmScanRequest,否则如果kalGetMediaStateIndicated(prAdap ter->prGlueInfo) != PARAM_MEDIA_STATE_CONNECTED则跟着aisFsmScanRequest,其他直接WLAN_STATUS_FAILURE。
aisFsmScanRequest流程1.判断prConnSettings->fgIsScanReqIssued是否为false,同一时间只能有一次scan。
2.如果有ssid、IE等获取出来,拷贝到prAisFsmInfo中对应的变量中。
3.如果当前prAisFsmInfo->eCurrentState == AIS_STATE_NORMAL_TR,如果当前是处于prAisBssInfo->eCurrentOPMode == OP_MODE_INFRASTRUCTURE并且prAisFsmInfo->fgIsInfraC hannelFinished == FALSE(802.1x 可能还没完成,pend it 等后续操作),则执行aisFsm InsertRequest(prAdapter, AIS_REQUEST_SCAN);否则,则执行开始online scan(包括wlan ClearScanningResult(prAdapter)和aisFsmSteps(prAdapter, AIS_STATE_ONLINE_SCAN))4.如果当前prAisFsmInfo->eCurrentState == AIS_STATE_IDLE,则直接进行扫描(包括wlanClearScanningResult(prAdapter)和aisFsmSteps(prAdapter, AIS_STATE_ONLINE_SCAN))。
其他情况也是直接pend it 等后续操作aisFsmInsertRequest(prAdapter, AIS_REQUEST_SCA N);wlanClearScanningResult流程1.如果当前处于连接状态,则遍历prAdapter->rWlanInfo.arScanResult,跟当前连接的ap的mac地址进行比对prAdapter->rWlanInfo.rCurrBssId.arMacAddress,如果一致,则将其搬到prAdapter->rWlanInfo.arScanResult[0]其他都清除。
如果当前不处于连接,则直接prAdapter->rWlanInfo.u4ScanResultNum = 0;prAdapter->rWlan Info.u4ScanIEBufferUsage = 0;aisFsmSteps(prAdapter, AIS_STATE_SCAN/AIS_STATE_ONLINE_SCAN/LOOK_FOR)流程:1.先将nextState保存到prAisFsmInfo->eCurrentState中。
2.Switch(nextState)就看AIS_STATE_SCAN/AIS_STATE_ONLINE_SCAN/LOOK_FOR3. A.先检测网络设备是否已经激活,如果没有激活,则进行激活操作。