首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

STM32的USB例程JoyStickMouse代码分析(全)(转自追风)(2)

STM32的USB例程JoyStickMouse代码分析(全)(转自追风)(2)

4USB_Init(void)

这个是main函数中调用的第四个函数,它也位于usb_init.c文件中。它初始化了三个全局指针,指向DEVICE_INFOUSER_STANDARD_REQUESTSDEVICE_PROP结构体。

后面两个是函数指针结构体,里面都是USB请求实现、功能实现的函数指针。

void USB_Init(void)

{


pInformation = &Device_Info;


pInformation->ControlState = 2;



pProperty = &Device_Property;



pUser_Standard_Requests = &User_Standard_Requests;


/* Initialize devices one by one */



pProperty->Init();

}

这三个结构体都是与具体设备枚举和功能实现相关的,定义在usb_prop.cusb_desc.c文件中。

DEVICE_PROP Device_Property =


{


Joystick_init,


Joystick_Reset,


Joystick_Status_In,


Joystick_Status_Out,


Joystick_Data_Setup,


Joystick_NoData_Setup,


Joystick_Get_Interface_Setting,


Joystick_GetDeviceDescriptor,


Joystick_GetConfigDescriptor,


Joystick_GetStringDescriptor,


0,


0x40 /*MAX PACKET SIZE*/


};

USER_STANDARD_REQUESTS User_Standard_Requests =


{


Joystick_GetConfiguration,


Joystick_SetConfiguration,


Joystick_GetInterface,


Joystick_SetInterface,


Joystick_GetStatus,


Joystick_ClearFeature,


Joystick_SetEndPointFeature,


Joystick_SetDeviceFeature,


Joystick_SetDeviceAddress


};

Usb_init()函数调用pProperty->Init()实质上就是Joystick_init)完成设备的初始化。

上层程序调用下次函数是常规性的操作。而下层函数(usb_init相对于usb_prop是输入底层操作文件)调用上层文件函数我们称之为回调。

回调函数的意义在于同一种操作模式、提供不同的回调函数则可以实现不同的功能。Windows中处理消息,好像也用到了这种模式。

回调函数的实现方法是函数指针数组。这是指针的高级应用。

继承事业,薪火相传
返回列表