📄 play_capture_analog_audio.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 + -