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

📄 mpu401.h

📁 ReactOS是一些高手根据Windows XP的内核编写出的类XP。内核实现机理和API函数调用几乎相同。甚至可以兼容XP的程序。喜欢研究系统内核的人可以看一看。
💻 H
字号:
/* * * COPYRIGHT:            See COPYING in the top level directory * PROJECT:              ReactOS kernel * FILE:                 services/dd/mpu401/mpu401.h * PURPOSE:              MPU-401 MIDI device driver header * PROGRAMMER:           Andrew Greenwood * UPDATE HISTORY: *                       Sept 26, 2003: Created */#ifndef __INCLUDES_MPU401_H__#define __INCLUDES_MPU401_H__//#include <mmsystem.h>//#include <mmddk.h>//#include <winioctl.h>#include "../../../dll/win32/mmdrv/mmdef.h"#define DEFAULT_PORT    0x330#define DEFAULT_IRQ     9#define DEVICE_SUBKEY   L"Devices"#define PARMS_SUBKEY    L"Parameters"#define REGISTRY_PORT   L"Port"// At the moment, we just support a single device with fixed parameters:#define MPU401_PORT     DEFAULT_PORT#define MPU401_IRQ      DEFAULT_IRQ#define MPU401_TIMEOUT  10000/* OBSOLETE - see mmdef.h instead:#define IOCTL_SOUND_BASE FILE_DEVICE_SOUND// wave base 0#define IOCTL_MIDI_BASE  0x0080#define IOCTL_MIDI_GET_CAPABILITIES CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0001, METHOD_BUFFERED, FILE_READ_ACCESS)#define IOCTL_MIDI_SET_STATE CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0002, METHOD_BUFFERED, FILE_WRITE_ACCESS)#define IOCTL_MIDI_GET_STATE CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0003, METHOD_BUFFERED, FILE_WRITE_ACCESS)#define IOCTL_MIDI_SET_VOLUME CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0004, METHOD_BUFFERED, FILE_READ_ACCESS)#define IOCTL_MIDI_GET_VOLUME CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0005, METHOD_BUFFERED, FILE_READ_ACCESS)#define IOCTL_MIDI_PLAY CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0006, METHOD_BUFFERED, FILE_WRITE_ACCESS)#define IOCTL_MIDI_RECORD CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0007, METHOD_BUFFERED, FILE_WRITE_ACCESS)#define IOCTL_MIDI_CACHE_PATCHES CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0008, METHOD_BUFFERED, FILE_WRITE_ACCESS)#define IOCTL_MIDI_CACHE_DRUM_PATCHES CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0009, METHOD_BUFFERED, FILE_WRITE_ACCESS)*/// The MPU-401 has 2 ports, usually 0x330 and 0x331, which are known as// "data" and "status/command", respectively. These macros deal with// reading from and writing to these ports:#define MPU401_WRITE_DATA(bp, x)    WRITE_PORT_UCHAR((PUCHAR) bp, x)#define MPU401_READ_DATA(bp)        READ_PORT_UCHAR((PUCHAR) bp)#define MPU401_WRITE_COMMAND(bp, x) WRITE_PORT_UCHAR((PUCHAR) bp+1, x)#define MPU401_READ_STATUS(bp)      READ_PORT_UCHAR((PUCHAR) bp+1)// Flow control#define MPU401_READY_TO_SEND(bp) \    MPU401_READ_STATUS(bp) & 0x80#define MPU401_READY_TO_RECEIVE(bp) \    MPU401_READ_STATUS(bp) & 0x40#define MPU401_WRITE_BYTE(bp, x) \    if (WaitToSend(bp)) MPU401_WRITE_DATA(bp, x)#define MPU401_WRITE_MESSAGE(bp, status, da, db) \    MPU401_WRITE(bp, status); \    MPU401_WRITE(bp, da); \    MPU401_WRITE(bp, db)//#define MPU401_READ(bp)//    if (WaitToRead(bp)) ... ???/*    DEVICE_EXTENSION contains the settings for each individual device*/typedef struct _DEVICE_EXTENSION{    PUNICODE_STRING RegistryPath;    PDRIVER_OBJECT DriverObject;    ULONG Port;    ULONG IRQ;//  KDPC Dpc;//  KTIMER Timer;//  KEVENT Event;//  BOOLEAN BeepOn;} DEVICE_EXTENSION, *PDEVICE_EXTENSION;/*    DEVICE_INSTANCE contains ???*/typedef struct _DEVICE_INSTANCE{    // pPrevGDI    PDRIVER_OBJECT DriverObject;} DEVICE_INSTANCE, *PDEVICE_INSTANCE;/*    CONFIG contains device parameters (port/IRQ)    THIS STRUCTURE IS REDUNDANT*///typedef struct _CONFIG//{//    ULONG Port;//    ULONG IRQ;//} CONFIG, *PCONFIG;/*    Some callback typedefs*/typedef NTSTATUS REGISTRY_CALLBACK_ROUTINE(PWSTR RegistryPath, PVOID Context);typedef REGISTRY_CALLBACK_ROUTINE *PREGISTRY_CALLBACK_ROUTINE;/*    Prototypes for functions in portio.c :*/BOOLEAN WaitToSend(ULONG BasePort);BOOLEAN WaitToReceive(ULONG BasePort);BOOLEAN InitUARTMode(ULONG BasePort);/*    Prototypes for functions in settings.c :*/NTSTATUS STDCALL EnumDeviceKeys(    IN PUNICODE_STRING RegistryPath,    IN PWSTR SubKey,    IN PREGISTRY_CALLBACK_ROUTINE Callback,    IN PVOID Context);NTSTATUS STDCALL LoadSettings(    IN  PWSTR ValueName,    IN  ULONG ValueType,    IN  PVOID ValueData,    IN  ULONG ValueLength,    IN  PVOID Context,    IN  PVOID EntryContext);NTSTATUS STDCALLDriverEntry(PDRIVER_OBJECT DriverObject,	    PUNICODE_STRING RegistryPath);#endif

⌨️ 快捷键说明

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