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

📄 analog_audio.c

📁 1. 8623L平台
💻 C
字号:
/* * * Copyright (c) 2001-2007 Sigma Designs, Inc.  * All Rights Reserved. Proprietary and Confidential. * *//**  @file   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 "common.h"#include "analog_audio.h"#include "WM8775.h"#include "MSP34x5.h"// internal state of the analog video capture portstruct cap_analog_audio_instance {	// Access	struct RUA *pRUA;	struct cap_chip_instance *pChip;};RMstatus cap_analog_audio_open(	struct RUA *pRUA, 				struct cap_analog_audio_instance **ppAnalogAudio, 				struct cap_chip_instance *pChip){	RMstatus err = RM_OK;	struct cap_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;			// Allocate and clear local instance	pAnalogAudio = (struct cap_analog_audio_instance *)RMMalloc(sizeof(struct cap_analog_audio_instance));	if (pAnalogAudio == NULL) {		RMDBGLOG((ENABLE, "FATAL! Not enough memory for struct cap_analog_audio_instance!\n"));		return RM_FATALOUTOFMEMORY;	}	RMMemset(pAnalogAudio, 0, sizeof(struct cap_analog_audio_instance));	*ppAnalogAudio = pAnalogAudio;		// Set default and non-zero startup values	pAnalogAudio->pRUA = pRUA;	pAnalogAudio->pChip = pChip;		// Open selected chip	switch (pAnalogAudio->pChip->chip) {	case cap_chip_none:		err = RM_NOT_SUPPORTED; 		break;	case cap_chip_WM8775:		err = RM_OK;		break;	case cap_chip_MSP34x5:		err = RM_OK;		break;	default:		err = RM_INVALID_PARAMETER;	}	if (RMFAILED(err)) {		RMFree(pAnalogAudio);		*ppAnalogAudio = NULL;	}	return err;}RMstatus cap_analog_audio_close(	struct cap_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->pChip->chip) {	case cap_chip_WM8775:		err = RM_OK;		break;	case cap_chip_MSP34x5:		err = RM_OK;		break;	case cap_chip_AD9883:		err = RM_NOTIMPLEMENTED;  // TODO			break;	default:		err = RM_ERROR;	}		RMFree(pAnalogAudio);		return err;}RMstatus cap_analog_audio_tristate(struct cap_analog_audio_instance *pAnalogAudio){	RMDBGLOG((FUNCNAME, "%s\n",__func__));			switch (pAnalogAudio->pChip->chip) {	case cap_chip_WM8775:		return cap_WM8775_tristate(pAnalogAudio->pChip->instance.pWM8775);		break;	case cap_chip_MSP34x5:		return cap_MSP34x5_tristate(pAnalogAudio->pChip->instance.pMSP34x5);		break;	default:		return RM_ERROR;		break;	}		return RM_OK;}RMstatus cap_analog_audio_select_input(struct cap_analog_audio_instance *pAnalogAudio,				       enum cap_board board,				       enum cap_audio_input audio_input, 				       RMuint32 audio_input_num ){	RMstatus err = RM_OK;	RMDBGLOG((FUNCNAME, "%s\n",__func__));	// Sanity checks	if (pAnalogAudio == NULL) return RM_FATALINVALIDPOINTER;	switch (pAnalogAudio->pChip->chip) {	case cap_chip_WM8775:		err = cap_WM8775_init_capture(pAnalogAudio->pChip->instance.pWM8775, board, audio_input, audio_input_num);		break;	case cap_chip_MSP34x5:		err = cap_MSP34x5_init_capture(pAnalogAudio->pChip->instance.pMSP34x5, board, audio_input, audio_input_num);		// cap_board_sigma844e1dtv8624 board tuner input use both MSP3455G and WM8775		if( (board == cap_board_sigma844e1dtv8624) && (audio_input == cap_audio_input_tuner)){			err = cap_WM8775_init_capture(pAnalogAudio->pChip->instance.pWM8775, board, audio_input, audio_input_num);		}		break;	case cap_chip_AD9883:		err = RM_NOTIMPLEMENTED;  // TODO			break;	default:		err = RM_ERROR;	}	if(RMFAILED(err)){		RMDBGLOG((FUNCNAME, "%failed for input select\n"));		}	return err;}RMstatus cap_analog_audio_setup_output(struct cap_analog_audio_instance *pAnalogAudio, 				       struct cap_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;		switch (pAnalogAudio->pChip->chip) {	case cap_chip_WM8775:		err = cap_WM8775_setup_output(pAnalogAudio->pChip->instance.pWM8775, pUpdate);		break;	case cap_chip_MSP34x5:		err = cap_MSP34x5_setup_output(pAnalogAudio->pChip->instance.pMSP34x5, pUpdate);		break;	default:		err = RM_ERROR;	}		return err;}/*** Interrupt handling functions ***//* Returns RM_OK if cap_analog_audio_handle_int() needs to be called */RMstatus cap_analog_audio_check_int(struct cap_analog_audio_instance *pAnalogAudio){	// Sanity checks	if (pAnalogAudio == NULL) return RM_FATALINVALIDPOINTER;			switch (pAnalogAudio->pChip->chip) {	case cap_chip_WM8775:		return cap_WM8775_check_int(pAnalogAudio->pChip->instance.pWM8775);		break;	case cap_chip_MSP34x5:		return cap_MSP34x5_check_int(pAnalogAudio->pChip->instance.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 cap_analog_audio_handle_int(	struct cap_analog_audio_instance *pAnalogAudio, 	struct cap_update *pUpdate){	RMstatus err = RM_OK;		// Sanity checks	if (pAnalogAudio == NULL) return RM_FATALINVALIDPOINTER;		switch (pAnalogAudio->pChip->chip) {	case cap_chip_WM8775:		err = cap_WM8775_handle_int(pAnalogAudio->pChip->instance.pWM8775, pUpdate);		break;	case cap_chip_MSP34x5:		err = cap_MSP34x5_handle_int(pAnalogAudio->pChip->instance.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 + -