⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mavproto.h

📁 基于EP7312的MP3播放器源代码,包括MCU和PC端代码.
💻 H
字号:
//****************************************************************************
//
// MAVPROTO.H - Contains structure definitions and function prototypes for
//              the Maverick(tm) USB driver.
//
// Copyright (c) 2000 Cirrus Logic, Inc.
// Copyright (c) 1997-1998 Microsoft Corporation.  All Rights Reserved.
//   THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
//   KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
//   IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
//   PURPOSE.
//
//****************************************************************************

#ifndef MAVPROTOH_INCD
#define MAVPROTOH_INCD

//****************************************************************************
//
// A structure representing the instance information associated with
// this particular device.
//
//****************************************************************************
typedef struct _DEVICE_EXTENSION
{
    //
    // Device object we call when submitting URBs.
    //
    PDEVICE_OBJECT TopOfStackDeviceObject;

    //
    // The bus driver object
    //
    PDEVICE_OBJECT PhysicalDeviceObject;

    //
    // The current power state of the device.
    //
    DEVICE_POWER_STATE CurrentDevicePowerState;

    //
    // USB configuration handle and pointer for the configuration the device is
    // currently in.
    //
    USBD_CONFIGURATION_HANDLE UsbConfigurationHandle;
    PUSB_CONFIGURATION_DESCRIPTOR UsbConfigurationDescriptor;

    //
    // Pointer to the USB device descriptor for this device
    //
    PUSB_DEVICE_DESCRIPTOR UsbDeviceDescriptor;

    //
    // We support one interface.  This is a copy of the info structure returned
    // from select_configuration or select_interface.
    //
    PUSBD_INTERFACE_INFORMATION UsbInterface;

    //
    // Bus drivers set the appropriate values in this structure in response
    // to an IRP_MN_QUERY_CAPABILITIES IRP.  Function and filter drivers might
    // alter the capabilities set by the bus driver.
    //
    DEVICE_CAPABILITIES DeviceCapabilities;

    //
    // Used to save the currently-being-handled system-requested power IRP
    // request.
    //
    PIRP PowerIrp;

    //
    // Count of self-staged bytes read or written so far.
    //
    ULONG StagedBytesTransferred;

    //
    // Set when PendingIoCount goes to 0; flags device can be removed.
    //
    KEVENT RemoveEvent;

    //
    // Set when PendingIoCount goes to 1 (1st increment was on add device).
    // This indicates no IO requests outstanding, either user, system, or
    // self-staged.
    //
    KEVENT NoPendingIoEvent;

    //
    // Set to signal driver-generated power request is finished.
    //
    KEVENT SelfRequestedPowerIrpEvent;

    //
    // Spinlock used to protect increment/decrement IO count logic.
    //
    KSPIN_LOCK IoCountSpinLock;

    //
    // Incremented when device is added and any IO request is received;
    // decremented when any IO request is completed or passed on, and when
    // device is removed.
    //
    ULONG PendingIoCount;

    //
    // Count of open pipes.
    //
    ULONG OpenPipeCount;

    //
    // Name buffer for our named Functional device object link.  The name is
    // generated based on the driver's class GUID.
    //
    WCHAR DeviceLinkNameBuffer[MAXIMUM_FILENAME_LENGTH];

    //
    // Flag set when processing IRP_MN_REMOVE_DEVICE.
    //
    BOOLEAN DeviceRemoved;

    //
    // Flag set when driver has answered success to IRP_MN_QUERY_REMOVE_DEVICE.
    //
    BOOLEAN RemoveDeviceRequested;

    //
    // Flag set when driver has answered success to IRP_MN_QUERY_STOP_DEVICE.
    //
    BOOLEAN StopDeviceRequested;

    //
    // Flag set when device has been successfully started.
    //
    BOOLEAN DeviceStarted;

    //
    // Flag set when IRP_MN_WAIT_WAKE is received and we're in a power state
    // where we can signal a wait.
    //
    BOOLEAN EnabledForWakeup;

    //
    // Used to flag that we're currently handling a self-generated power
    // request.
    //
    BOOLEAN SelfPowerIrp;

    //
    // Used to indicate that a staged read or write operation is pending.
    //
    BOOLEAN StagedIoPending;

    //
    // Default power state to power down to on self-suspend.
    //
    ULONG PowerDownLevel;
} DEVICE_EXTENSION, *PDEVICE_EXTENSION;

//****************************************************************************
//
// Function Prototypes
//
//****************************************************************************

//
// From mavioctl.c
//
NTSTATUS MavUsb_ProcessIOCTL(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
NTSTATUS MavUsb_ResetDevice(IN PDEVICE_OBJECT DeviceObject);
NTSTATUS MavUsb_GetPortStatus(IN PDEVICE_OBJECT DeviceObject,
                              IN PULONG PortStatus);
NTSTATUS MavUsb_ResetParentPort(IN PDEVICE_OBJECT DeviceObject);
NTSTATUS MavUsb_SendVendorCommand(IN PDEVICE_OBJECT DeviceObject, IN PURB urb,
                                  IN ULONG drive, IN ULONG request,
                                  IN USHORT value, IN USHORT index,
                                  IN PUCHAR buffer, IN ULONG length);
NTSTATUS MavUsb_BulkXfer(IN PDEVICE_OBJECT DeviceObject, IN PUCHAR buffer,
                         IN ULONG length, IN BOOLEAN Read);
NTSTATUS MavUsb_VendorConnect(IN PDEVICE_OBJECT DeviceObject);
NTSTATUS MavUsb_VendorDisconnect(IN PDEVICE_OBJECT DeviceObject);
NTSTATUS MavUsb_VendorGetDescriptor(IN PDEVICE_OBJECT DeviceObject,
                                    IN PURB urb, PUCHAR buffer,
                                    MavUsb_GetDescriptorParams *pIn,
                                    MavUsb_GetDescriptorResult *pOut,
                                    PULONG result);
NTSTATUS MavUsb_VendorSetDescriptor(IN PDEVICE_OBJECT DeviceObject,
                                    IN PURB urb, PUCHAR buffer,
                                    MavUsb_SetDescriptorParams *pIn,
                                    PULONG result);
NTSTATUS MavUsb_VendorNumDrives(IN PDEVICE_OBJECT DeviceObject, IN PURB urb,
                                PUCHAR buffer, MavUsb_NumDrivesResult *pOut,
                                PULONG result);
NTSTATUS MavUsb_VendorOpen(IN PDEVICE_OBJECT DeviceObject, IN PURB urb,
                           PUCHAR buffer, MavUsb_OpenParams *pIn,
                           PULONG result);
NTSTATUS MavUsb_VendorCreate(IN PDEVICE_OBJECT DeviceObject, IN PURB urb,
                             PUCHAR buffer, MavUsb_CreateParams *pIn,
                             PULONG result);
NTSTATUS MavUsb_VendorSeek(IN PDEVICE_OBJECT DeviceObject, IN PURB urb,
                           PUCHAR buffer, MavUsb_SeekParams *pIn,
                           PULONG result);
NTSTATUS MavUsb_VendorTell(IN PDEVICE_OBJECT DeviceObject, IN PURB urb,
                           PUCHAR buffer, MavUsb_TellResult *pOut,
                           PULONG result);
NTSTATUS MavUsb_VendorLength(IN PDEVICE_OBJECT DeviceObject, IN PURB urb,
                             PUCHAR buffer, MavUsb_LengthResult *pOut,
                             PULONG result);
NTSTATUS MavUsb_VendorClose(IN PDEVICE_OBJECT DeviceObject, IN PURB urb,
                            PUCHAR buffer, PULONG result);
NTSTATUS MavUsb_VendorDelete(IN PDEVICE_OBJECT DeviceObject, IN PURB urb,
                             PUCHAR buffer, MavUsb_DeleteParams *pIn,
                             PULONG result);
NTSTATUS MavUsb_VendorOpenDir(IN PDEVICE_OBJECT DeviceObject, IN PURB urb,
                              PUCHAR buffer, MavUsb_OpenDirParams *pIn,
                              PULONG result);
NTSTATUS MavUsb_VendorReadDir(IN PDEVICE_OBJECT DeviceObject, IN PURB urb,
                              PUCHAR buffer, MavUsb_ReadDirParams *pIn,
                              MavUsb_ReadDirResult *pOut, PULONG result);
NTSTATUS MavUsb_VendorCloseDir(IN PDEVICE_OBJECT DeviceObject, IN PURB urb,
                               PUCHAR buffer, PULONG result);
NTSTATUS MavUsb_VendorMakeDir(IN PDEVICE_OBJECT DeviceObject, IN PURB urb,
                              PUCHAR buffer, MavUsb_MakeDirParams *pIn,
                              PULONG result);
NTSTATUS MavUsb_VendorRemoveDir(IN PDEVICE_OBJECT DeviceObject, IN PURB urb,
                                PUCHAR buffer, MavUsb_RemoveDirParams *pIn,
                                PULONG result);
NTSTATUS MavUsb_VendorTotalSpace(IN PDEVICE_OBJECT DeviceObject, IN PURB urb,
                                 PUCHAR buffer, MavUsb_TotalSpaceParams *pIn,
                                 MavUsb_TotalSpaceResult *pOut, PULONG result);
NTSTATUS MavUsb_VendorFreeSpace(IN PDEVICE_OBJECT DeviceObject, IN PURB urb,
                                PUCHAR buffer, MavUsb_FreeSpaceParams *pIn,
                                MavUsb_FreeSpaceResult *pOut, PULONG result);
NTSTATUS MavUsb_VendorFormat(IN PDEVICE_OBJECT DeviceObject, IN PURB urb,
                             PUCHAR buffer, MavUsb_FormatParams *pIn,
                             PULONG result);
NTSTATUS MavUsb_VendorStartUpdate(IN PDEVICE_OBJECT DeviceObject, IN PURB urb,
                                  PUCHAR buffer, PULONG result);
NTSTATUS MavUsb_VendorEndUpdate(IN PDEVICE_OBJECT DeviceObject, IN PURB urb,
                                PUCHAR buffer, PULONG result);
NTSTATUS MavUsb_VendorCommand(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp,
                              PIO_STACK_LOCATION irpStack);

//
// From mavocrw.c
//
NTSTATUS MavUsb_Create(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
NTSTATUS MavUsb_Close(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
NTSTATUS MavUsb_Read(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
NTSTATUS MavUsb_Write(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
NTSTATUS MavUsb_AbortPipes(IN PDEVICE_OBJECT DeviceObject);
BOOLEAN MavUsb_CanAcceptIoRequests(IN PDEVICE_OBJECT DeviceObject);

//
// From mavpnp.c
//
NTSTATUS MavUsb_ProcessPnPIrp(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
NTSTATUS MavUsb_PnPAddDevice(IN PDRIVER_OBJECT DriverObject,
                             IN PDEVICE_OBJECT PhysicalDeviceObject);
NTSTATUS MavUsb_StartDevice(IN PDEVICE_OBJECT DeviceObject);
NTSTATUS MavUsb_RemoveDevice(IN PDEVICE_OBJECT DeviceObject);
NTSTATUS MavUsb_StopDevice(IN PDEVICE_OBJECT DeviceObject);
NTSTATUS MavUsb_IrpCompletionRoutine(IN PDEVICE_OBJECT DeviceObject,
                                     IN PIRP Irp, IN PVOID Context);

//
// From mavpwr.c
//
NTSTATUS MavUsb_ProcessPowerIrp(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
NTSTATUS MavUsb_PoRequestCompletion(IN PDEVICE_OBJECT DeviceObject,
                                    IN UCHAR MinorFunction,
                                    IN POWER_STATE PowerState,
                                    IN PVOID Context,
                                    IN PIO_STATUS_BLOCK IoStatus);
NTSTATUS MavUsb_PowerIrp_Complete(IN PDEVICE_OBJECT NullDeviceObject,
                                  IN PIRP Irp, IN PVOID Context);
NTSTATUS MavUsb_SelfSuspendOrActivate(IN PDEVICE_OBJECT DeviceObject,
                                      IN BOOLEAN fSuspend);
NTSTATUS MavUsb_SelfRequestPowerIrp(IN PDEVICE_OBJECT DeviceObject,
                                    IN POWER_STATE PowerState);
NTSTATUS MavUsb_PoSelfRequestCompletion(IN PDEVICE_OBJECT DeviceObject,
                                        IN UCHAR MinorFunction,
                                        IN POWER_STATE PowerState,
                                        IN PVOID Context,
                                        IN PIO_STATUS_BLOCK IoStatus);
BOOLEAN MavUsb_SetDevicePowerState(IN PDEVICE_OBJECT DeviceObject,
                                   IN DEVICE_POWER_STATE DeviceState);
NTSTATUS MavUsb_QueryCapabilities(IN PDEVICE_OBJECT PdoDeviceObject,
                                  IN PDEVICE_CAPABILITIES DeviceCapabilities);

//
// From mavusb.c
//
NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,
                     IN PUNICODE_STRING RegistryPath);
NTSTATUS MavUsb_ProcessSysControlIrp(IN PDEVICE_OBJECT DeviceObject,
                                     IN PIRP Irp);
VOID MavUsb_Unload(IN PDRIVER_OBJECT DriverObject);
NTSTATUS MavUsb_SymbolicLink(IN PDEVICE_OBJECT DeviceObject,
                             IN OUT PUNICODE_STRING deviceLinkUnicodeString);
NTSTATUS MavUsb_CreateDeviceObject(IN PDRIVER_OBJECT DriverObject,
                                   IN PDEVICE_OBJECT PhysicalDeviceObject,
                                   IN PDEVICE_OBJECT *DeviceObject);
NTSTATUS MavUsb_CallUSBD(IN PDEVICE_OBJECT DeviceObject, IN PURB Urb);
NTSTATUS MavUsb_ConfigureDevice(IN PDEVICE_OBJECT DeviceObject);
NTSTATUS MavUsb_SelectInterface(IN PDEVICE_OBJECT DeviceObject,
                                IN PUSB_CONFIGURATION_DESCRIPTOR ConfigDesc);
NTSTATUS MavUsb_ResetPipe(IN PDEVICE_OBJECT DeviceObject,
                          IN PUSBD_PIPE_INFORMATION PipeInfo);
LONG MavUsb_DecrementIoCount(IN PDEVICE_OBJECT DeviceObject);
VOID MavUsb_IncrementIoCount(IN PDEVICE_OBJECT DeviceObject);

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -