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

DriverStudio的KUsbLowerDevice类(1)

DriverStudio的KUsbLowerDevice类(1)

DriverWorks提供了三个类:KUsbLowerDeviceKUsbInterfaceKUsbPipe类,用于实现USB设备操作。KUsbLowerDevice类用于逻辑设备的编程,KUsbInterface类用于借口的编程,KUsbPipe类用于管道的编程。

1KUsbLowerDevice


KUsbLowerDevice
类是KPnpLowerDevice类的继承,它继承类KPnpLowerDevice类的成员函数。


KUsbLowerDevice
类实例代表端点0,允许USB驱动程序通过默认控制管道控制USB设备,如配置USB设备,传输各种控制和状态请求。


成员函数如下:


NTSTATUS Initialize (
KDevice* AttachingDevice,
PDEVICE_OBJECT PhysicalDeviceObject);

初始化一个用默认构造函数定义的KUsbLowerDevice类实例,必须在PASSIVE_LEVEL中断级别上调用该函数。如下所示:


KUsbLowerDevice m_Lower;


M_Lower.Initialize (this, Pdo);


AC_STATUS ActiveConfiguration (
UCHAR ConfigurationValue,
ULONG MaxConfigSize = 1024);
激活指定的USB设备配置,在PnP开始例程中使用。

ConfigurationValue为配置号,第1个配置号为1.
MaxConfigSize为声明存放设备配置描述符的最大存储空间字节数。

返回AC_SUCCESS表示成功,还有七种错误代码。


NTSTATUS DeActivateConfiguration (
PIO_COMPLETION_ROUTINE pfnCompletionRoutine = NULL,
PVOID pContext = NULL);
终止USB设备当前活动配置,在PnP停止例程中使用。若完成例程为NULL,应在passive_level中断级别上调用该函数。

pfnCompletionRoutine为完成例程,默认为NULL

pContext为传递给完成例程的环境变量参数,默认为NULL


void ReleaseResources (void);
释放动态分配的USB资源,在PnP删除例程中使用。


NTSTATUS GetDeviceDescriptor (PUSB_DEVICE_DESCRIPTOR pDevDesc);
获取设备描述符,必须在PASSIVE_LEVEL中断级别上调用该函数。

pDevDesc存放设备描述符变量的地址。


NTSTATUS GetStringDescroptor (
UCHAR Index,
PSTR pStr,
LONG MaxLen,
SHORT LangId);
获取字符串描述符,必须在PASSIVE_LEVEL中断级别上调用该函数。

Index为字符串索引号。

pStr为存放字符串地址。

MaxLen为字符串的最大字节数。

LangId为语言ID号,默认为English/American


ULONG GetCurrentFrameNumber (void);
从系统USB总线驱动程序返回当前USB帧号,在同步传输中可以用作起始帧号。


PUSB_INTERFACE_DESCRIPTOR LocateInterface (
PVOID* pStart,
PUSB_ENDPOINT_DESCRIPTOR* ppEndpoints,
LONG InterfaceNumber = -1,
LONG AlternateSetting = -1,
LONG InterfaceClass = -1,
LONG InterfaceSubClass = -1,
LONG InterfaceProtocal = -1);

返回接口描述符,必须在PASSIVE_LEVEL中断级别上调用该函数。

pStart为地址指针。初次调用或重新开始搜索时,置为NULL。调用者不能改变指针数值,仅作为内部重复搜索接口的标志。

ppEndpoints为存放属于该接口的端点阵列。

InterfaceNumber为接口索引号,-1表示非标准值。

InterfaceSetting为要选择的接口设置值,-1表示非标准值。

InterfaceClass为接口类值,-1表示非标准值。

InterfaceSubClass为接口子类值,-1表示非标准值。

InterfaceProtocol为接口协议值,-1表示非标准值。


NTSTATUS PreconfigureInterface (
PUSB_INTERFACE_DESCRIPTOR pInterfaceDesc);
返回列表