[wdmaudiodev] Re: Problem on setting wavecyclc

  • From: "Sam Tertzakian" <sam@xxxxxxxxxxx>
  • To: <wdmaudiodev@xxxxxxxxxxxxx>
  • Date: Thu, 30 Jun 2005 22:56:13 -0700

Hi, 

 

I just wanted to add one thing.

 

For example in WaveCPI you don't have the idea of CopyTo()/CopyFrom().It is
a simpler idea.You get data puffers and you must program the DMA transfer
yourself. So you don't have to worry about the OS doing the DMA transfer for
you.It is nice if it works, but in your case, for some reason it is not
working. And, I am afraid that even if you get this to work, you will just
find other problems when you try to WHQL certify.at least that was my
experience. Like I said, when I switched to WavePCI all my problems went
away.

 

If I recall, one of the problems was the WaveCyclic introduced a lot of
latency that is not changeable. So, why try to solve all these problems just
to end up with a driver that has a lot of latency? Use WavePCI and you can
set your own latency.

 

  _____  

From: wdmaudiodev-bounce@xxxxxxxxxxxxx
[mailto:wdmaudiodev-bounce@xxxxxxxxxxxxx] On Behalf Of Sam Tertzakian
Sent: Thursday, June 30, 2005 10:47 PM
To: wdmaudiodev@xxxxxxxxxxxxx
Subject: [wdmaudiodev] Re: Problem on setting wavecyclc

 

Sorry, for the delay in the response.

 

What I meant was.I mananged to get audio to play/record.but, for various
reasons some of the WHQL tests would not pass.

 

It is for this reason, I switched to WavePCI. After that, the WHQL tests
passed.

 

I would be happy to provide you source code, but I just don't have it now.

 

Again, I suggest you use WavePCI instead.it is a lot easier to understand
and you have more control over the data movement in the driver.

 

  _____  

From: wdmaudiodev-bounce@xxxxxxxxxxxxx
[mailto:wdmaudiodev-bounce@xxxxxxxxxxxxx] On Behalf Of PB
Sent: Thursday, June 23, 2005 7:33 AM
To: wdmaudiodev@xxxxxxxxxxxxx
Subject: [wdmaudiodev] Re: Problem on setting wavecyclc

 

Thanks for your reply.

 

In fact, I have tried to write the driver by using WavePCI, but the IC
manufacturer suggested us to use WaveCyclic instead of WavePCI. I am very
happy to hear you getting WaveCyclic works. If it's possiblem, can you just
let me know the setting of Master Channel? or just please give us only the
part of DMA channel source code for reference? This is really thanks.

 

Regards,

Peter

----- Original Message ----- 

From: Sam Tertzakian <mailto:sam@xxxxxxxxxxx>  

To: wdmaudiodev@xxxxxxxxxxxxx 

Sent: Thursday, June 23, 2005 3:58 AM

Subject: [wdmaudiodev] Re: Problem on setting wavecyclc

 

I struggled for a long time with WaveCyclic model. I finally got it work,
but I can tell you this.even if you get it to work, you will have other
problems.

 

You should not use WaveCyclic. Use WavePCI instead. (Don't let the "pci"
bother you.you can use it for any kind of driver).

 

You will be a lot happier. 

 


  _____  


From: wdmaudiodev-bounce@xxxxxxxxxxxxx
[mailto:wdmaudiodev-bounce@xxxxxxxxxxxxx] On Behalf Of PB
Sent: Sunday, June 19, 2005 9:19 AM
To: wdmaudiodev@xxxxxxxxxxxxx
Subject: [wdmaudiodev] Problem on setting wavecyclc

 

I am writing an window audio driver by Microsoft 
Window Driver Development Kit(DDK) for window XP. 
I have followed the archecture of the driver sample
code provided under the folder SB16 which are using
WaveCyclic Interface and Slave Channel method to build
the sound card audio driver. 

 

However, since our chip on the sound card have not 
provide us the default channel, we use the Master Channel
method to create DMA channel and using allocate buffer API
similar as Slave method provided in the sample code.
------------------------------------------------------------
e.g.
       ntStatus = 
            Port->NewMasterDmaChannel 
            (  
               &MyDmaChannel,      // OutDmaChannel
               NULL,             // OuterUnknown (opt)
               NULL,             // ResourceList (opt)
               MAXLEN_DMA_BUFFER,    //Maximum Length            
               TRUE,             // Dma32BitAddresses
               FALSE,            // Dma64BitAddresses
               Width32Bits,      // DmaWidth
               Compatible
             );               // DmaPort
        if (NT_SUCCESS(ntStatus))
        {
            ULONG  lDMABufferLength = MAXLEN_DMA_BUFFER;
            
            do {
              ntStatus =
MyDmaChannel->AllocateBuffer(lDMABufferLength,NULL);
              lDMABufferLength >>= 1;
              _DbgPrintF(DEBUGLVL_TERSE, ("lDMABufferLength = 0x%x",
lDMABufferLength));
              
            } while (!NT_SUCCESS(ntStatus) && (lDMABufferLength > (PAGE_SIZE
/ 2)));
        }

 

        if (NT_SUCCESS(ntStatus))
        {
           ...
 
AdapterCommon->WriteMCControlRegister((ULONG)PLAYBACK_DMA_CURRENT_BASE_ADDR,

 
(ULONG)MyDmaChannel->PhysicalAddress().QuadPart);
           ..
------------------------------------------------------------

 

However no matter how we tried, we cannot get the audio sound out.
We have seen in the debugger that all the register of our chip is now
controllable and the
address of the allocate addressed is sured can written to our audio chip.
We have seen the sequence in the window such as:
--------------------
[ValidateFormat]
[SetNotificationFreq]
[ServiceWaveISR]
[SetState]
--------------------

 

can be runned under the testing on debugger. 
I have seen from the MSDN help menu that for master channel, user need to
use the API "copyto", "copyfrom" to copy data from and to the audio buffer.
It seems that it is not necessary in the slave channel method. Is it really
necessary in the master channel method?
And how can I know the address of where the data come from when Window Media

wave file? I have no method to fill in the parameter of the "copyto",
"copyfrom" API to use them.

Or anyone can post the reference code for masterchannel  of Driver?

 

Thans you very much

 

 

Best Regards,

Peter

Other related posts: