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

📄 play_capture_board_specific.c

📁 1. 8623L平台
💻 C
字号:
#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 "../dcc/include/dcc_macros.h"#include "../rmcore/include/rmstatustostring.h"#include "../rmlibcw/include/rmlibcw.h"#include "../emhwlib_hal/pll/include/pll_hal.h"#include "command_ids.h"#include "get_key.h"#include "common.h"#include "cmdline_options.h"#include "play_capture_board_specific.h"#include "play_capture_TW9919.h"#define I2C_ADDR_SiI9031 0x60#define I2C_ADDR_AD9380  0x98#define I2C_ADDR_SAA7119 0x40#define I2C_ADDR_WM8775  0x34#define I2C_ADDR_MSP34x5 0x80#define I2C_ADDR_TW9919  0x88// User have to create this input map and chip info /* ******************************************************************************** * DTV8634 board set configuration  *********************************************************************************/struct capsam_video_input_map DTV8634_VideoInputMapSample[capsam_video_input_last-1] = {	{capsam_video_input_tuner1, capsam_chip_TW9919},	{capsam_video_input_tuner2, capsam_chip_none},	{capsam_video_input_cvbs1, capsam_chip_TW9919},	{capsam_video_input_cvbs2, capsam_chip_TW9919},	{capsam_video_input_svideo1, capsam_chip_TW9919},	{capsam_video_input_svideo2, capsam_chip_TW9919},	{capsam_video_input_component1, capsam_chip_AD9380},	{capsam_video_input_component2, capsam_chip_AD9380},	{capsam_video_input_scart1, capsam_chip_TW9919},	{capsam_video_input_scart2, capsam_chip_TW9919},	{capsam_video_input_vga, capsam_chip_AD9380},	{capsam_video_input_dvi, capsam_chip_AD9380},	{capsam_video_input_hdmi1, capsam_chip_AD9380},	{capsam_video_input_hdmi2, capsam_chip_AD9380},	{capsam_video_input_hdmi3, capsam_chip_AD9380},};struct capsam_audio_input_map DTV8634_AudioInputMapSample[capsam_audio_input_last-1] = {	{capsam_audio_input_tuner1,capsam_chip_MSP34x5},	{capsam_audio_input_tuner2,capsam_chip_MSP34x5},	{capsam_audio_input_stereo1,capsam_chip_MSP34x5},	{capsam_audio_input_stereo2,capsam_chip_MSP34x5},	{capsam_audio_input_stereo3,capsam_chip_MSP34x5},		{capsam_audio_input_hdmi1, capsam_chip_AD9380},	{capsam_audio_input_hdmi2, capsam_chip_AD9380},	{capsam_audio_input_hdmi3, capsam_chip_AD9380},};struct capsam_chip_info DTV8634_VideoChipInfoSample[MAX_NUMBER_OF_VIDEO_CHIPS] = {	{ 		chip: capsam_chip_AD9380,		I2CModuleID: I2C,		I2CDevice: {			APIVersion: 1,       			Clock: GPIOId_Sys_0, 			Data: GPIOId_Sys_1,  			DevAddr: I2C_ADDR_AD9380, 			Delay: 0,           			Speed: 100          		}			},	{		chip: capsam_chip_TW9919,		I2CModuleID: I2C,		I2CDevice:{			APIVersion: 1,       // set to 1			Clock: GPIOId_Sys_0, // GPIO of the I2C data line			Data: GPIOId_Sys_1,  // GPIO of the I2C clock line			DevAddr: I2C_ADDR_TW9919,       // I2C device address (write uses DevAddr, read uses DevAddr + 1)			Delay: 0,            // I2C delay, in uSec			Speed: 100  		}	},};struct capsam_chip_info DTV8634_AudioChipInfoSample[MAX_NUMBER_OF_AUDIO_CHIPS] = {	{			chip: capsam_chip_MSP34x5,		I2CModuleID: I2C,		I2CDevice:{			APIVersion: 1,       // set to 1			Clock: GPIOId_Sys_0, // GPIO of the I2C data line			Data: GPIOId_Sys_1,  // GPIO of the I2C clock line			DevAddr: I2C_ADDR_MSP34x5,       // I2C device address (write uses DevAddr, read uses DevAddr + 1)			Delay: 0,            // I2C delay, in uSec			Speed: 100  		}	},};struct capsam_board_info DTV8634_BoardInfoSample = {	board: capsam_sigmaDTV8634,	clock: 2700000,	p_video_input_map: DTV8634_VideoInputMapSample,	p_video_chip_info: DTV8634_VideoChipInfoSample,		p_audio_chip_info: DTV8634_AudioChipInfoSample,};/* ******************************************************************************** * DTV8624 board set configuration  *********************************************************************************/struct capsam_video_input_map DTV8624_VideoInputMapSample[capsam_video_input_last-1] = {	{capsam_video_input_tuner1, capsam_chip_none},	{capsam_video_input_tuner2, capsam_chip_none},	{capsam_video_input_cvbs1, capsam_chip_SAA7119},	{capsam_video_input_cvbs2, capsam_chip_none},	{capsam_video_input_svideo1, capsam_chip_SAA7119},	{capsam_video_input_svideo2, capsam_chip_none},	{capsam_video_input_component1, capsam_chip_SAA7119},	{capsam_video_input_component2, capsam_chip_none},	{capsam_video_input_scart1, capsam_chip_none},	{capsam_video_input_scart2, capsam_chip_none},	{capsam_video_input_vga, capsam_chip_AD9883},	{capsam_video_input_dvi, capsam_chip_SiI9031},	{capsam_video_input_hdmi1, capsam_chip_SiI9031},	{capsam_video_input_hdmi2, capsam_chip_SiI9031},	{capsam_video_input_hdmi3, capsam_chip_none},};struct capsam_audio_input_map DTV8624_AudioInputMapSample[capsam_audio_input_last-1] = {	{capsam_audio_input_tuner1,capsam_chip_MSP34x5},	{capsam_audio_input_tuner2,capsam_chip_MSP34x5},	{capsam_audio_input_stereo1,capsam_chip_WM8775},	{capsam_audio_input_stereo2,capsam_chip_WM8775},	{capsam_audio_input_stereo3,capsam_chip_WM8775},		{capsam_audio_input_hdmi1, capsam_chip_AD9380},	{capsam_audio_input_hdmi2, capsam_chip_AD9380},	{capsam_audio_input_hdmi3, capsam_chip_AD9380},};struct capsam_chip_info DTV8624_VideoChipInfoSample[MAX_NUMBER_OF_VIDEO_CHIPS] = {	{		chip: capsam_chip_SiI9031,// capture chip specification		I2CModuleID: I2C,        // emhwlib Module ID of the I2C bus access		I2CDevice: {			APIVersion: 1,       // set to 1			Clock: GPIOId_Sys_0, // GPIO of the I2C data line			Data: GPIOId_Sys_1,  // GPIO of the I2C clock line			DevAddr: I2C_ADDR_SiI9031,       // I2C device address (write uses DevAddr, read uses DevAddr + 1)			Delay: 0,            // I2C delay, in uSec			Speed: 100           // frequency of the I2C bit transfer, in kHz (e.g. 100 or 400)		}	},	{		chip: capsam_chip_SAA7119,		I2CModuleID: I2C,		I2CDevice:{			APIVersion: 1,       // set to 1			Clock: GPIOId_Sys_0, // GPIO of the I2C data line			Data: GPIOId_Sys_1,  // GPIO of the I2C clock line			DevAddr: I2C_ADDR_SAA7119,       // I2C device address (write uses DevAddr, read uses DevAddr + 1)			Delay: 0,            // I2C delay, in uSec			Speed: 100  		}	},};struct capsam_chip_info DTV8624_AudioChipInfoSample[MAX_NUMBER_OF_AUDIO_CHIPS] = {	{			chip: capsam_chip_MSP34x5,		I2CModuleID: I2C,		I2CDevice:{			APIVersion: 1,       // set to 1			Clock: GPIOId_Sys_0, // GPIO of the I2C data line			Data: GPIOId_Sys_1,  // GPIO of the I2C clock line			DevAddr: I2C_ADDR_MSP34x5,       // I2C device address (write uses DevAddr, read uses DevAddr + 1)			Delay: 0,            // I2C delay, in uSec			Speed: 100  		}	},	{		chip: capsam_chip_WM8775,		I2CModuleID: I2C,		I2CDevice:{			APIVersion: 1,       // set to 1			Clock: GPIOId_Sys_0, // GPIO of the I2C data line			Data: GPIOId_Sys_1,  // GPIO of the I2C clock line			DevAddr: I2C_ADDR_WM8775,       // I2C device address (write uses DevAddr, read uses DevAddr + 1)			Delay: 0,            // I2C delay, in uSec			Speed: 100  		}	},};struct capsam_board_info DTV8624_BoardInfoSample = {	board: capsam_sigma844e1dtv,	clock: 2700000,	p_video_input_map: DTV8624_VideoInputMapSample,	p_video_chip_info: DTV8624_VideoChipInfoSample,		p_audio_chip_info: DTV8624_AudioChipInfoSample,};/* ******************************************************************************** * board specific function *********************************************************************************/RMstatus capsam_board_specific_setup(struct capsam_main_instance *pCapture, 				  struct RUA* pRUA, 				  struct capsam_board_info* p_board_info,				  enum capsam_video_input current_video_input){	struct SystemBlock_GPIO_type gpio;	RMstatus err = RM_OK;	// this is board specific setting - have to figure out how to handle for multiple board.	if(p_board_info->board == capsam_sigma844e1dtv){		gpio.Bit = GPIOId_Sys_15;		gpio.Data = FALSE;  // select HDMI audio		RUASetProperty(pRUA, SystemBlock, RMSystemBlockPropertyID_GPIO, &gpio, sizeof(gpio), 0);		}	if(p_board_info->board == capsam_sigmaDTV8634){				struct SystemBlock_GPIO_type gpio;		struct SystemBlock_GPIO_type gpio_16, gpio_17, gpio_18;				// 0. power up AD9380		gpio.Bit = GPIOId_Eth_34;		gpio.Data = TRUE;  // power up 		RUASetProperty(pRUA, SystemBlock, RMSystemBlockPropertyID_GPIO, &gpio, sizeof(gpio), 0);					// 1. audio input MUX setting		gpio.Bit = GPIOId_Eth_23;		gpio.Data = FALSE;  // route HDMI audio to I2S input		RUASetProperty(pRUA, SystemBlock, RMSystemBlockPropertyID_GPIO, &gpio, sizeof(gpio), 0);					// 2. HDMI input MUX setting		gpio_16.Bit = GPIOId_Eth_18;		gpio_16.Data = FALSE;  // route analog audio to I2S input				gpio_17.Bit = GPIOId_Eth_19;		gpio_17.Data = FALSE;  // route analog audio to I2S input				gpio_18.Bit = GPIOId_Eth_20;		gpio_18.Data = FALSE;  // route analog audio to I2S input				switch(current_video_input){		case capsam_video_input_hdmi1:			gpio_16.Data = TRUE;  // route analog audio to I2S input				break;		case capsam_video_input_hdmi2:			gpio_17.Data = TRUE;  // route analog audio to I2S input					break;		case capsam_video_input_hdmi3:			gpio_18.Data = TRUE;  // route analog audio to I2S input			break;		default:			break;		}				RUASetProperty(pRUA, 			       SystemBlock, 			       RMSystemBlockPropertyID_GPIO, 			       &gpio_16, 			       sizeof(gpio_16), 			       0);				RUASetProperty(pRUA, 			       SystemBlock, 			       RMSystemBlockPropertyID_GPIO, 			       &gpio_17, 			       sizeof(gpio_17), 			       0);				RUASetProperty(pRUA, 			       SystemBlock, 			       RMSystemBlockPropertyID_GPIO, 			       &gpio_18, 			       sizeof(gpio_18), 			       0);				// DTV8634 board gets MCLK from TW9919		// analog video chip should be power on to feed MCLK		{			struct capsam_TW9919_instance* pTW9919;			pTW9919 = (struct capsam_TW9919_instance*)capsam_main_get_chip_handle(pCapture, capsam_chip_TW9919);			if(pTW9919){				capsam_TW9919_setup_audio_mclk(pTW9919);			}		}			}	return err;}/* ******************************************************************************** * helper functions *********************************************************************************/enum capsam_chip  capsam_get_video_capture_chip(enum capsam_video_input input, struct capsam_video_input_map* p_input_map)//RMuint32  capsam_get_video_capture_chip(enum capsam_video_input input, struct capsam_video_input_map* p_input_map){	int i = 0; 	if(!p_input_map){		printf("error\n");	}	for(i=0; i<(capsam_video_input_last-1); i++){		if(input == p_input_map[i].input){			return p_input_map[i].chip;			break;		}	}	return 0;}enum capsam_chip  capsam_get_audio_capture_chip(enum capsam_audio_input input, struct capsam_audio_input_map* p_input_map)//RMuint32  capsam_get_audio_capture_chip(enum capsam_audio_input input, struct capsam_audio_input_map* p_input_map){	int i = 0; 	if(!p_input_map){		printf("error\n");	}	for(i=0; i<(capsam_audio_input_last-1); i++){		if(input == p_input_map[i].input){			return p_input_map[i].chip;			break;		}	}	return 0;}struct capsam_chip_info* capsam_get_video_chip_info(enum capsam_chip chip,  struct capsam_chip_info* p_chip_info)//void* capsam_get_video_chip_info(enum capsam_chip chip,  struct capsam_chip_info* p_chip_info){	int i = 0;	if(!p_chip_info){		printf("error!\n");	}	//printf("%d %d\n", sizeof(*p_chip_info), sizeof(p_chip_info));	for(i=0; i<MAX_NUMBER_OF_VIDEO_CHIPS; i++){		if(p_chip_info[i].chip == chip){			return &p_chip_info[i];		}	}	return 0;}struct capsam_chip_info* capsam_get_audio_chip_info(enum capsam_chip chip,  struct capsam_chip_info* p_chip_info)//void* capsam_get_audio_chip_info(enum capsam_chip chip,  struct capsam_chip_info* p_chip_info){	int i = 0;	if(!p_chip_info){		printf("error!\n");	}	//printf("%d %d\n", sizeof(*p_chip_info), sizeof(p_chip_info));	for(i=0; i<MAX_NUMBER_OF_AUDIO_CHIPS; i++){		if(p_chip_info[i].chip == chip){			return &p_chip_info[i];		}	}	return p_chip_info;}RMstatus capsam_get_I2CInfo(enum capsam_chip chip,			 struct capsam_chip_info* p_chip_info,			 RMuint32 *pout_I2CModuleID, 			 struct EMhwlibI2CDeviceParameter **ppout_I2CDevice){	int i = 0;	if(!p_chip_info){		printf("error!\n");		return RM_ERROR;	}	if(!pout_I2CModuleID){		printf("error!\n");		return RM_ERROR;	}	if(!ppout_I2CDevice){		printf("error!\n");		return RM_ERROR;	}		//printf("%d %d\n", sizeof(*p_chip_info), sizeof(p_chip_info));	for(i=0; i<MAX_NUMBER_OF_VIDEO_CHIPS; i++){		if(p_chip_info[i].chip == chip){			*pout_I2CModuleID = p_chip_info[i].I2CModuleID;			*ppout_I2CDevice = &(p_chip_info[i].I2CDevice);				return RM_OK;		}	}	for(i=0; i<MAX_NUMBER_OF_AUDIO_CHIPS; i++){		if(p_chip_info[i].chip == chip){			*pout_I2CModuleID = p_chip_info[i].I2CModuleID;			*ppout_I2CDevice = &(p_chip_info[i].I2CDevice);				return RM_OK;		}	}	return RM_ERROR;	}	

⌨️ 快捷键说明

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