⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 play_capture_analog_audio.c

📁 1. 8623L平台
💻 C
字号:
/* * * Copyright (c) 2001-2007 Sigma Designs, Inc.  * All Rights Reserved. Proprietary and Confidential. * *//**  @file   play_capture_analog_audio.c  @brief  Interface to access an analog video capture port    @author Christian Wolff, Sean.Sekwon.Choi  @date   2007-07-18*/// to enable or disable the debug messages of this source file, put 1 or 0 below#if 1#define LOCALDBG ENABLE#else#define LOCALDBG DISABLE#endif#include "sample_os.h"#define ALLOW_OS_CODE 1#include "../rua/include/rua.h"#include "../rua/include/rua_property.h"#include "../dcc/include/dcc.h"#include "../rmcore/include/rmstatustostring.h"#include "../rmlibcw/include/rmlibcw.h"#include "play_capture_common.h"#include "play_capture_analog_audio.h"#include "play_capture_WM8775.h"#include "play_capture_MSP34x5.h"// internal state of the analog video capture portstruct capsam_analog_audio_instance {	// Access	struct RUA *pRUA;       	RMuint32 I2CModuleID;  // emhwlib Module ID of the I2C bus access	struct EMhwlibI2CDeviceParameter I2CDevice;	RMuint8 BaseDevice;  // base device address of the device	enum capsam_chip chip;	// handle for specific input device	struct capsam_WM8775_instance *pWM8775;	struct capsam_MSP34x5_instance *pMSP34x5;};RMstatus capsam_analog_audio_open(	struct RUA *pRUA, 	struct capsam_analog_audio_instance **ppAnalogAudio, 	struct capsam_access *pAudioChip){	RMstatus err = RM_OK;	struct capsam_analog_audio_instance *pAnalogAudio = NULL;	RMDBGLOG((FUNCNAME, "%s\n",__func__));		// Sanity checks	if (ppAnalogAudio == NULL) return RM_FATALINVALIDPOINTER;	//*ppAnalogAudio = NULL;	if (pRUA == NULL) return RM_FATALINVALIDPOINTER;	// when there is no analog audio object, create it	if(*ppAnalogAudio == NULL){				// Allocate and clear local instance		pAnalogAudio = (struct capsam_analog_audio_instance *)RMMalloc(sizeof(struct capsam_analog_audio_instance));		if (pAnalogAudio == NULL) {			fprintf(stderr, "FATAL! Not enough memory for struct capsam_analog_audio_instance!\n");			return RM_FATALOUTOFMEMORY;		}		RMMemset(pAnalogAudio, 0, sizeof(struct capsam_analog_audio_instance));		*ppAnalogAudio = pAnalogAudio;				// Set default and non-zero startup values		pAnalogAudio->pRUA = pRUA;	}		// Open selected chip	switch (pAudioChip->chip) {	case capsam_chip_none:		err = RM_NOT_SUPPORTED; 		break;	case capsam_chip_WM8775:		if(((struct capsam_analog_audio_instance *)*ppAnalogAudio)->pWM8775){			break;		}		err = capsam_WM8775_open(pRUA, &((struct capsam_analog_audio_instance *)*ppAnalogAudio)->pWM8775, pAudioChip);		break;	case capsam_chip_MSP34x5:		if(((struct capsam_analog_audio_instance *)*ppAnalogAudio)->pMSP34x5){			break;		}		err = capsam_MSP34x5_open(pRUA, &((struct capsam_analog_audio_instance *)*ppAnalogAudio)->pMSP34x5, pAudioChip);		break;	default:		err = RM_INVALID_PARAMETER;	}	//printf("%p \n",((struct capsam_analog_audio_instance *)*ppAnalogAudio)->pWM8775 );	//printf("%p \n",((struct capsam_analog_audio_instance *)*ppAnalogAudio)->pMSP34x5 );	if (RMFAILED(err)) {		// SC. better close underlying object first		RMFree(pAnalogAudio);		*ppAnalogAudio = NULL;	}	return err;}RMstatus capsam_analog_audio_close(	struct capsam_analog_audio_instance *pAnalogAudio){	RMstatus err = RM_OK;	RMDBGLOG((FUNCNAME, "%s\n",__func__));			// Sanity checks	if (pAnalogAudio == NULL) return RM_FATALINVALIDPOINTER;		/*	// Free all ressources	switch (pAnalogAudio->chip) {	case capsam_chip_WM8775:		err = capsam_WM8775_close(pAnalogAudio->pWM8775);		break;	case capsam_chip_MSP34x5:		err = capsam_MSP34x5_close(pAnalogAudio->pMSP34x5);		break;	case capsam_chip_AD9883:		err = RM_NOTIMPLEMENTED;  // TODO			break;	default:		err = RM_ERROR;	}	*/		//printf("%p \n",pAnalogAudio->pWM8775 );	//printf("%p \n",pAnalogAudio->pMSP34x5 );	if(pAnalogAudio->pWM8775){		err = capsam_WM8775_close(pAnalogAudio->pWM8775);		}	if(pAnalogAudio->pMSP34x5){		err = capsam_MSP34x5_close(pAnalogAudio->pMSP34x5);		}	RMFree(pAnalogAudio);		return err;}RMstatus capsam_analog_audio_tristate(struct capsam_analog_audio_instance *pAnalogAudio){	/*	switch (pAnalogAudio->chip) {	case capsam_chip_WM8775:		return capsam_WM8775_tristate(pAnalogAudio->pWM8775);		break;	case capsam_chip_MSP34x5:		return capsam_MSP34x5_tristate(pAnalogAudio->pMSP34x5);		break;	default:		return RM_ERROR;		break;	}	*/	RMDBGLOG((FUNCNAME, "%s\n",__func__));			if(pAnalogAudio->pWM8775){		capsam_WM8775_tristate(pAnalogAudio->pWM8775);	}	if(pAnalogAudio->pMSP34x5){		capsam_MSP34x5_tristate(pAnalogAudio->pMSP34x5);	}	return RM_OK;}RMstatus capsam_analog_audio_select_input(struct capsam_analog_audio_instance *pAnalogAudio,				       const struct capsam_access *pInput){	RMstatus err = RM_OK;	RMDBGLOG((FUNCNAME, "%s\n",__func__));	// Sanity checks	if (pAnalogAudio == NULL) return RM_FATALINVALIDPOINTER;	switch (pInput->chip) {	case capsam_chip_WM8775:		err = capsam_WM8775_init_capture(pAnalogAudio->pWM8775, pInput);		break;	case capsam_chip_MSP34x5:		err = capsam_MSP34x5_init_capture(pAnalogAudio->pMSP34x5, pInput);		break;	case capsam_chip_AD9883:		err = RM_NOTIMPLEMENTED;  // TODO			break;	default:		err = RM_ERROR;	}	if(RMFAILED(err)){		RMDBGLOG((FUNCNAME, "%failed for input select\n"));		}	return err;}RMstatus capsam_analog_audio_setup_output(struct capsam_analog_audio_instance *pAnalogAudio, 				       struct capsam_update *pUpdate){	RMstatus err = RM_OK;	RMDBGLOG((FUNCNAME, "%s\n",__func__));	// Sanity checks	if (pAnalogAudio == NULL) return RM_FATALINVALIDPOINTER;	if (pUpdate == NULL) return RM_FATALINVALIDPOINTER;		// Free all ressources	switch (pAnalogAudio->chip) {	case capsam_chip_WM8775:		err = capsam_WM8775_setup_output(pAnalogAudio->pWM8775, pUpdate);		break;	case capsam_chip_MSP34x5:		err = capsam_MSP34x5_setup_output(pAnalogAudio->pMSP34x5, pUpdate);		break;	default:		err = RM_ERROR;	}		return err;}/*** Interrupt handling functions ***//* Returns RM_OK if capsam_analog_audio_handle_int() needs to be called */RMstatus capsam_analog_audio_check_int(struct capsam_analog_audio_instance *pAnalogAudio){	// Sanity checks	if (pAnalogAudio == NULL) return RM_FATALINVALIDPOINTER;		switch (pAnalogAudio->chip) {	case capsam_chip_WM8775:		return capsam_WM8775_check_int(pAnalogAudio->pWM8775);		break;	case capsam_chip_MSP34x5:		return capsam_MSP34x5_check_int(pAnalogAudio->pMSP34x5);	default:		return RM_ERROR;	}	return RM_OK;}/* check and handle interrupts and/or other changes on the chip,    fill in update information to pUpdate */RMstatus capsam_analog_audio_handle_int(	struct capsam_analog_audio_instance *pAnalogAudio, 	struct capsam_update *pUpdate){	RMstatus err = RM_OK;		// Sanity checks	if (pAnalogAudio == NULL) return RM_FATALINVALIDPOINTER;		switch (pAnalogAudio->chip) {	case capsam_chip_WM8775:		err = capsam_WM8775_handle_int(pAnalogAudio->pWM8775, pUpdate);		break;	case capsam_chip_MSP34x5:		err = capsam_MSP34x5_handle_int(pAnalogAudio->pMSP34x5, pUpdate);		break;	default:		err = RM_ERROR;		break;	}	if (RMFAILED(err)) return err;	return err;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -