Solved

wavein-problems

Posted on 1997-04-24
6
275 Views
Last Modified: 2013-12-04
I wrote the following Callback-Function in order to
add the filled buffer, which is returned by the driver, again to drivers queue. I don't know why it doesn't work.
The driver stopps recording when the buffer is filled.
I would be verry glad if you could help me.

stephan




void CALLBACK  __export  WaveProc(

       HWAVE  hWave,      // handle of waveform device
       UINT  uMsg,      // sent message
       DWORD  dwInstance,      // instance data
       DWORD  dwParam1,      // application-defined parameter
       DWORD  dwParam2      // application-defined parameter
       )
{

 LPWAVEHDR lpWaveHdrTemp = (LPWAVEHDR) dwParam1;

  if( uMsg == WIM_DATA)
       {

             waveInUnprepareHeader((HWAVEIN) hWave, lpWaveHdrTemp ,sizeof(WAVEHDR) ) ;
              waveInPrepareHeader((HWAVEIN)hWave, lpWaveHdrTemp, sizeof(WAVEHDR));
              waveInAddBuffer((HWAVEIN)hWave, lpWaveHdrTemp, sizeof(WAVEHDR));
             
       }
}


0
Comment
Question by:stephan papadakis
  • 3
  • 3
6 Comments
 
LVL 15

Accepted Solution

by:
NickRepin earned 30 total points
ID: 1396904
API Reference for WaveProc says:Applications should not call any system-defined functions from inside a callback function, except for EnterCriticalSection, LeaveCriticalSection, midiOutLongMsg, midiOutShortMsg, OutputDebugString, PostMessage, PostThreadMessage, SetEvent, timeGetSystemTime, timeGetTime, timeKillEvent, and timeSetEvent. Calling other wave functions will cause deadlock.

0
 
LVL 15

Expert Comment

by:NickRepin
ID: 1396905
By the way, I said it before in answer to your question Q861187135 (4/16/97). But 'this question is locked until stephan papadakis evaluates the answer'  :(.
0
 

Author Comment

by:stephan papadakis
ID: 1396906
Thank's a lot for your answere.

The only problem is, how can i solve my problem?

What should i do know. Should i create a dummy Callback -Window?

If i do so the waveinopen-function returns errorcode 11h

wich means "function is called with wrong parameters".

0
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 

Author Comment

by:stephan papadakis
ID: 1396907
Thank's a lot for your answere.

The only problem is, how can i solve my problem?

What should i do know. Should i create a dummy Callback -Window?

If i do so the waveinopen-function returns errorcode 11h

wich means "function is called with wrong parameters".

0
 
LVL 15

Expert Comment

by:NickRepin
ID: 1396908
To avoid crash, you can try to process buffers in your window procedure, not in the callback function. For example:// Define our notify message#define WMU_FINISHED   (WM_USER+1)// Fill it with handle of our windowHWND wnd;// Callback functionvoid CALLBACK WaveProc(HWAVE hWave, UINT uMsg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2)
{
  if( uMsg == WIM_DATA) {
      // Device driver is finished!      // Notify our window.      PostMessage(wnd,WMU_FINISHED,0,(LPARAM) dwParam1);   }}// Here is our window procedure... wndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam){   LPWAVEHDR lpWaveHdrTemp = (LPWAVEHDR) lParam;
  switch(uMsg) {      // ...      case WMU_FINISHED:
          waveInUnprepareHeader((HWAVEIN) hWave, lpWaveHdrTemp, sizeof(WAVEHDR));
          waveInPrepareHeader((HWAVEIN)hWave, lpWaveHdrTemp, sizeof(WAVEHDR));
          waveInAddBuffer((HWAVEIN)hWave, lpWaveHdrTemp, sizeof(WAVEHDR));
      // .....
}Also you can try to use callback window instead of callback function. May be there are no restrictions on calling wave* functions from inside of callback window.P.S. It will be nice if you can post me your source code to nick@rtzi.ru

0
 

Author Comment

by:stephan papadakis
ID: 1396909
Thank's a lot.

I got it.
The problem is solved.


stephan
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Timely operations (on order of hours) from within a VM 3 53
Visual Studio 2015 vs. Visual Studio 2010 9 64
Visual Studio Debugging 3 121
Trouble with References... 5 42
As more and more people are shifting to the latest .Net frameworks, the windows presentation framework is gaining importance by the day. Many people are now turning to WPF controls to provide a rich user experience. I have been using WPF controls fo…
For a while now I'v been searching for a circular progress control, much like the one you get when first starting your Silverlight application. I found a couple that were written in WPF and there were a few written in Silverlight, but all appeared o…
This is Part 3 in a 3-part series on Experts Exchange to discuss error handling in VBA code written for Excel. Part 1 of this series discussed basic error handling code using VBA. http://www.experts-exchange.com/videos/1478/Excel-Error-Handlin…
This video demonstrates how to create an example email signature rule for a department in a company using CodeTwo Exchange Rules. The signature will be inserted beneath users' latest emails in conversations and will be displayed in users' Sent Items…

943 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

5 Experts available now in Live!

Get 1:1 Help Now