예제 #1
0
파일: DSPControl.cpp 프로젝트: g4klx/uWSDR
void CDSPControl::closeIO()
{
	setRecordOff();

	m_rxReader->close();
	m_txReader->close();
	m_rxWriter->close();
	m_txWriter->close();

	if (m_txInControl != NULL)
		m_txInControl->close();

	if (m_keyInControl != NULL)
		m_keyInControl->close();

	if (m_extHandler != NULL)
		m_extHandler->close();

	m_dttsp->close();
	m_cwKeyer->close();
	m_voiceKeyer->close();

	if (m_record != NULL) {
		m_record->disable();
		m_record->close();
	}
}
LHS_AUDIOIN_ERROR lhs_audioinClose(AUDIOIN_H *phAudioIn)
{
  int doneWaiting = 0;

  /* Validate the handle */
  if ((phAudioIn == NULL) || (*phAudioIn == NULL))
  {
    return LHS_E_AUDIOIN_NULLPOINTER;
  }

  /* stop recording audio samples */
  setRecordOff();

  /* stop reading audio samples */
  setCloseOn();

  //wait for the thread to stop reading samples.
  pthread_mutex_lock ( &gAudioMutex );

  while (!doneWaiting)
  {
    int rc = pthread_cond_wait(&gCloseCalled, &gAudioMutex);
    switch (rc)
    {
      case 0:
        if (!gCloseCalledSignaled)
        {
          // Avoid spurious wakeups
          continue;
        }
        else
        {
          gCloseCalledSignaled = 0;
          doneWaiting = 1;
          break;
        }
        break;
      default:
        PLogError ( "Audio In Error pthread_cond_wait\n" );
        pthread_mutex_unlock(&gAudioMutex);
        return ~LHS_AUDIOIN_OK;
    }
  }
  pthread_mutex_unlock(&gAudioMutex);

#ifdef FILTER_ON
  FIR_deconstruct(pFIR);
#endif

#ifdef AUDIOIN_SUPPORT_CALLBACK
  /* callback notification */
  if (gpCallback != NULL) gpCallback(*phAudioIn, AUDIOIN_MSG_CLOSE, gpCallbackInstance, NULL, NULL);
#endif

  return LHS_AUDIOIN_OK;
}
LHS_AUDIOIN_ERROR lhs_audioinStop(AUDIOIN_H hAudioIn)
{
#ifdef SAVE_RAW_AUDIO
  fclose ( audio_data );
#endif
  if (hAudioIn == NULL)
  {
    return LHS_E_AUDIOIN_NULLPOINTER;
  }
  pthread_mutex_lock ( &gAudioMutex );

  /* stop recording (discard samples) */
  setRecordOff();

#ifdef AUDIOIN_SUPPORT_CALLBACK
  /* callback notification */
  if (gpCallback != NULL) gpCallback(hAudioIn, AUDIOIN_MSG_STOP, gpCallbackInstance, NULL, NULL);
#endif
  pthread_mutex_unlock ( &gAudioMutex );

  return LHS_AUDIOIN_OK;
}