Solved

wavein-problems

Posted on 1997-04-24
6
285 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 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
Creating Instructional Tutorials  

For Any Use & On Any Platform

Contextual Guidance at the moment of need helps your employees/users adopt software o& achieve even the most complex tasks instantly. Boost knowledge retention, software adoption & employee engagement with easy solution.

 

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

Creating Instructional Tutorials  

For Any Use & On Any Platform

Contextual Guidance at the moment of need helps your employees/users adopt software o& achieve even the most complex tasks instantly. Boost knowledge retention, software adoption & employee engagement with easy solution.

Question has a verified solution.

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

This article shows a few slightly more advanced techniques for Windows 7 gadget programming, including how to save and restore user settings for your gadget and how to populate the "details" panel that is displayed in the Windows 7 gadget gallery.  …
This article describes how to add a user-defined command button to the Windows 7 Explorer toolbar.  In the previous article (http://www.experts-exchange.com/A_2172.html), we saw how to put the Delete button back there where it belongs.  "Delete" is …
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…
There's a multitude of different network monitoring solutions out there, and you're probably wondering what makes NetCrunch so special. It's completely agentless, but does let you create an agent, if you desire. It offers powerful scalability …

705 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