[wdmaudiodev] Re: Which type of driver

  • From: "Philip Lukidis" <pagefault0x0@xxxxxxxxxxx>
  • To: <wdmaudiodev@xxxxxxxxxxxxx>
  • Date: Tue, 16 Mar 2004 08:21:09 -0500

Oops, been very busy, missed this response.  Yes, I figured I could do this,
I just was not sure about multiple clients possibly hooking at once.  I'll
have to think this over carefully to see if I really need it (and I don't
right now, but I may in the future).

I was really wondering whether the avstream model offered an interface to do
this more cleanly, but I guess not.

Thanks,

Philip Lukidis

----- Original Message ----- 
From: Matt Gonzalez
To: wdmaudiodev@xxxxxxxxxxxxx
Sent: Wednesday, March 10, 2004 2:33 PM
Subject: [wdmaudiodev] Re: Which type of driver


Do this in DriverEntry:

    //
    // Tell the class driver to initialize the driver.
    //
    ntStatus =  PcInitializeAdapterDriver (DriverObject,
                                                  RegistryPathName,
                                                  AddDevice);

    //
    // Install handlers for various major functions so that this driver
    // can publish an ioctl interface.  This must be done *after*
    // calling PcInitializeAdapterDriver; otherwise, portclass will
    // overwrite these vectors.
    //
    // The original vectors are saved as globals so that calls that
    // are not ours may be passed on to port class.
    //
    if (NT_SUCCESS(ntStatus))
    {
        PcIoctlHandler     =
DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL];
        PcCreateHandler    = DriverObject->MajorFunction[IRP_MJ_CREATE];
        PcCloseHandler     = DriverObject->MajorFunction[IRP_MJ_CLOSE];

        DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = IoctlHandler;
        DriverObject->MajorFunction[IRP_MJ_CREATE]         = CreateHandler;
        DriverObject->MajorFunction[IRP_MJ_CLOSE]          = CloseHandler;
    }


Then, in your individual dispatch routines, determine if it's your IRP or
not.  If it's not, then call the appropriate PcXXXHandler.

Matt



Philip Lukidis wrote:
Hi.  I have a 1394 audio device for which I use a portcls style miniport.
I'm thinking of porting to avstream in order that surprise removal be
properly supported.  Question: is there any way to properly and override the
dispatch table of the parent driver (specifically, for DeviceIoControl so my
control panel can talk to me). KSDEVICE_DISPATCH is available (but not
really suitable for me) in WinXP+ only, and at the very least I have to
support Win2k also (probably Win98SE and ME as well).  I did not see any
PcDispacthIrp equivalent, like there is in portcls drivers.

Any thoughts?

Philip Lukidis

PS: So far I always have had a bus driver architecture, i.e. bus driver
enumerates the audio driver, and the control panel talked to the bus driver.
But this may not always be the case for me.

----- Original Message ----- 
From: "Waldemar Haszlakiewicz" <waldemar.haszlakiewicz@xxxxxxxx>
To: "Matt Gonzalez" <wdmaudiodev@xxxxxxxxxxxxx>
Sent: Saturday, March 06, 2004 6:29 AM
Subject: [wdmaudiodev] Re: Which type of driver



Then again AVStream has lots of stuff implemented already there is less

writing, but yes more

thinking (read breaking your head).
BUT when you figure it out everything looks very clean and simple.

Anyway if you'll write AVStream driver you'll have to read older drivers

docs also (well not

everything) as some things are just upgrades.
In short: AVStream hides a lot of stuff from you, so you don't need to

bother with them.

Waldemar


MG> This is exactly what I've been doing.

MG> If you want to talk to a 1394 device, you have to make your own

IRPsand send them to the

MG> 1394 stack. You will find examples on how to dothis in the 1394

samples. Compuware's

MG> DriverWorks also has usefulsample code for talking to 1394.

MG> To expose your hardware as an audio device, you need to create a

kernelstreaming filter.

MG> You can try using portclass miniports (like MSVAD)or AVStream. There's

also the older stream

MG> class stuff, but you'd bebetter off with AVStream.

MG> Portclass is an older model and doesn't handle surprise removal

aswell. AVStream is

MG> cleaner, but there is no good example code forbuilding an audio

driver. Portclass is perhaps

MG> quirkier, but muchbetter documented.

MG> Both AVC.sys and 61883.sys weren't useful for our purposes.

AVC.sysdoesn't support audio

MG> formats. 61883.sys didn't give me enoughcontrol over the streaming.

MG> Matt

MG> John D. Farmer wrote:




MG>       Greetings,

MG>

MG>   I'm new to Audio driver developmentand still pretty new to driver

development in

MG> general. I am working ona project that needs to stream audio data down

to the 1394 Bus,

MG> viaAVC.sys and 61883.sys. The overall propose of my project is to

supportFirewire hardware that

MG> will implement the IEC-61883-6 standard (whichMicrosoft says they were

going to support, but

MG> which I have yet to seesupported). I am guessing I am in need of a

upper filter driver totake

MG> care of the passing down audio data through the AV/C stack (inplace of

the avcaudio.sys which I

MG> cannot find on my system but found inthe documentation as: Kernel-Mode

WDM Audio Components

MG> subsection:AVCAudio Class System Driver) and another driver below

avc.sys to beable to package

MG> the audio data up into the 61883-6 standard format onits way down to

the 1394 bus (since I do

MG> not believe that 61883.sysdoes not yet support the 61883-6 standard).

MG>

MG>   I have been perusing thedocumentation and this list and there seems

to be alot of

MG> confusion tome on which way would be best to do this. I started by

trying to useMSVAD (which I

MG> believe is a Port Class driver), but then I noticed thatMSVAD does not

seem to handle IRPs or

MG> anything else that would allow meto send data down to the 1394 bus. I

looked at the MSDN docs

MG> and theysaid that Port Class drivers could not be used for this

purpose. I tooka look at

MG> this list, and it seems a number of people have been able todo this by

implementing their own

MG> IRPs and URBs (in the case of USB). I've taken note of this and

noticed that it seems to be

MG> extremelydifficult to do, and probably not the best way to handle this

problem.

MG>

MG>   I then started to lookat the AVStream and Stream class drivers. The

AVStream overview

MG> onMSDN that it is a: "multimediaclass driver that supports video-only

streaming and

MG> integratedaudio/video streaming." So does this mean that I cannot use

AVStreamto stream

MG> audio-only? My last option was the Stream class driver whichthe MSDN

docs seem to suggest that

MG> these driver are almost if nottotally deprecated.

MG>

MG>   I also looked at AV/C Client driver(which I think is a Stream

Minidriver) as a option,

MG> and it seemed to bealmost what I wanted, but the documentation says

that the avcstream.sysplays

MG> a part in the AV/C stack, my big problem with this is: I can'tfind

avcstream.sys on my system

MG> (I'm running Windows XP) see: IEC-61883Protocol Driver in a Client

Driver Stack in the MSDN

MG> documentation. AmI correct in assuming that avcstream.sys handles the

AV/C Audio subunit?

MG>

MG>   So as you can probably tell, I am alittle lost and confused on this

subject. If there is

MG> anyone out therewho could give this newbie a little guidance, I would

be in youreternal debt.

MG>

MG>   Thanks,

MG>

MG>   John Farmer


MG> ******************WDMAUDIODEV addresses:Post message:
MG> mailto:wdmaudiodev@xxxxxxxxxxxxxxxxxxxxxx:
MG> mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=subscribeUnsubscribe:
MG> mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=unsubscribeModerator:
MG> mailto:wdmaudiodev-moderators@xxxxxxxxxxxxxxxx to WDMAUDIODEV

page:http://www.wdmaudiodev.de/

******************

WDMAUDIODEV addresses:
Post message: mailto:wdmaudiodev@xxxxxxxxxxxxx
Subscribe:    mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=subscribe
Unsubscribe:  mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=unsubscribe
Moderator:    mailto:wdmaudiodev-moderators@xxxxxxxxxxxxx

URL to WDMAUDIODEV page:
http://www.wdmaudiodev.de/



******************

WDMAUDIODEV addresses:
Post message: mailto:wdmaudiodev@xxxxxxxxxxxxx
Subscribe:    mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=subscribe
Unsubscribe:  mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=unsubscribe
Moderator:    mailto:wdmaudiodev-moderators@xxxxxxxxxxxxx

URL to WDMAUDIODEV page:
http://www.wdmaudiodev.de/



****************** WDMAUDIODEV addresses: Post message:
mailto:wdmaudiodev@xxxxxxxxxxxxx Subscribe:
mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=subscribe Unsubscribe:
mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=unsubscribe Moderator:
mailto:wdmaudiodev-moderators@xxxxxxxxxxxxx URL to WDMAUDIODEV page:
http://www.wdmaudiodev.de/
******************

WDMAUDIODEV addresses:
Post message: mailto:wdmaudiodev@xxxxxxxxxxxxx
Subscribe:    mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=subscribe
Unsubscribe:  mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=unsubscribe
Moderator:    mailto:wdmaudiodev-moderators@xxxxxxxxxxxxx

URL to WDMAUDIODEV page:
http://www.wdmaudiodev.de/

Other related posts: