[wdmaudiodev] Re: Problem on setting wavecyclc

  • From: "PB" <peterbla@xxxxxxxxxxx>
  • To: <wdmaudiodev@xxxxxxxxxxxxx>
  • Date: Thu, 23 Jun 2005 22:32:34 +0800

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 
  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: