关于在AF层注册的具体过程
来源:互联网 发布:spss有mac版吗 编辑:程序博客网 时间:2024/05/14 23:11
疑问:为什么每个端点描述符都需要在AF进行注册?
进行端点描述符注册的函数是 afRegister( &SampleApp_epDesc )。SampleApp_epDesc是一个
endPointDesc_t类型的结构体,endPointDesc_t结构体的具体定义如下: (AF.h)
typedef struct{ uint8 endPoint; //端口号,据说可以是1-240 uint8 *task_id; // 任务ID,就是在osalInitTasks()里面生成的taskID++的那些 SimpleDescriptionFormat_t *simpleDesc; //另一个结构体:简单描述符。没明白这里为什么要弄一个这个东西 afNetworkLatencyReq_t latencyReq; //必须赋值为noLatencyReqs } endPointDesc_t;
————————————————————————————————————————————
AF.h:
typedef struct{ uint8 EndPoint; //跟上面那个应该是一个样的 uint16 AppProfId; //配置文件id? uint16 AppDeviceId; //不懂 uint8 AppDevVer:4; //不懂 uint8 Reserved:4; uint8 AppNumInClusters; //输入簇的数量 cId_t *pAppInClusterList; // 输入簇列表 uint8 AppNumOutClusters; //输出簇数量 cId_t *pAppOutClusterList; //输出簇列表} SimpleDescriptionFormat_t;
————————————————————————————————————————————
然后在sampleapp.c中对这些结构体一通赋值之后,就开始调用了:
AF.c:
afRegister( &SampleApp_epDesc ){ if (afFindEndPointDescList(epDesc->endPoint)) // 找找这个描述符注册过没有? { return afStatus_INVALID_PARAMETER; } return ((NULL == afRegisterExtended(epDesc, NULL)) ? afStatus_MEM_FAIL : afStatus_SUCCESS); //没有的话注册一个}
————————————————————————————————————————————
AF.c:
afFindEndPointDescList(epDesc->endPoint)
{
epList_t *epSearch; //生成一个节点
for (epSearch = epList; epSearch != NULL; epSearch = epSearch->nextDesc) //遍历跨表
{
if (epSearch->epDesc->endPoint == EndPoint)
{
break;
}
}
return epSearch;//找到了就返回epSearch,找不到就返回NULL
}
————————————————————————————————————————————
在链表里没有找到这样的端点描述符,那么就生成一个
afRegisterExtended(epDesc, NULL) //这个函数返回epList_t类型的指针;NULL是一个回调函数类型,暂时不管{ epList_t *ep = osal_mem_alloc(sizeof(epList_t));//申请内存if (ep != NULL) { ep->nextDesc = epList; epList = ep; ep->epDesc = epDesc; //链表的插入操作 ep->pfnDescCB = descFn; //就是参数NULL ep->apsfCfg.frameDelay = APSF_DEFAULT_INTERFRAME_DELAY; ep->apsfCfg.windowSize = APSF_DEFAULT_WINDOW_SIZE; ep->flags = eEP_AllowMatch; // Default to allow Match Descriptor. }
————————————————————————————————————————————
现在看看epList_t长什么样:
AF.h:
typedef struct _epList_t { struct _epList_t *nextDesc; //指向下一个节点的指针 endPointDesc_t *epDesc; //端点描述符赋值给这个参数 pDescCB pfnDescCB; // Don't use if this function pointer is NULL. afAPSF_Config_t apsfCfg; eEP_Flags flags;} epList_t;
————————————————————————————————————————————这样的话就完成了端点描述符在AF层的注册,说白了就是在链表里留个名字….
后面是不是在进行什么操作的时候要检查这个链表什么的我还不了解,后面看到了回头补充….
- 关于在AF层注册的具体过程
- AF层学习总结
- AF层学习总结
- AF层学习总结
- [Agile]关于敏捷的具体实施过程的实验:初稿
- 关于将应用逻辑放在存储过程(PL/SQL)或应用层的选择
- 在Linux下安装GCC的具体过程:
- 在Linux下安装GCC的具体过程:
- 在kali下使用openVas扫描的具体过程
- 关于AF和PF
- freeradius在深信服AF中检测失败的解决方法
- cocos2d-x 3.x 将事件监听添加在层上的具体实现
- 一次渗透的具体过程
- 一次渗透的具体过程
- 宏块帧内预测的具体过程
- struts的具体执行过程
- Web service 的具体过程
- HTTP通信的具体过程
- 学习JavaScript的闭包
- LPC1768菜鸟学习之路systick
- Uva 11181
- 通过数据分析改进并达成SEO优化目标
- java环境的搭建,myeclipse的安装配置和破解
- 关于在AF层注册的具体过程
- 【C++】子类在重写虚函数时,会覆盖父类的函数
- Struts+Spring注解名词解释
- LPC1768菜鸟学习之GPIO和外部中断
- 尚硅谷 hibernate4 总结
- IO流
- 由“单独搭建Mybatis”到“Mybatis与Spring的整合/集成”
- Checkio--题目之Elementary(上)
- 2-18