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

📄 ad9380.c

📁 1. 8623L平台
💻 C
📖 第 1 页 / 共 2 页
字号:
	if(0) cap_AD9380_detect_sync(pAD9380);	pHDMIUpdate->AVIInfoFrameUpdate = pAD9380->AVI_InfoFrameDetected;	pHDMIUpdate->AudioInfoFrameUpdate = pAD9380->Audio_InfoFrameDetected;	pHDMIUpdate->SPDInfoFrameUpdate = pAD9380->SPD_InfoFrameDetected;	pHDMIUpdate->MPEGInfoFrameUpdate = pAD9380->MPEG_InfoFrameDetected;	pHDMIUpdate->AudioCPPacketUpdate = pAD9380->ACP_InfoFrameDetected;	pHDMIUpdate->ISRC1PacketUpdate = pAD9380->ISRC1_InfoFrameDetected;	pHDMIUpdate->ISRC2PacketUpdate = pAD9380->ISRC2_InfoFrameDetected;	pAD9380->AVI_InfoFrameDetected = FALSE;	pAD9380->Audio_InfoFrameDetected = FALSE;	pAD9380->SPD_InfoFrameDetected = FALSE;	pAD9380->MPEG_InfoFrameDetected = FALSE;	pAD9380->ACP_InfoFrameDetected = FALSE;	pAD9380->ISRC1_InfoFrameDetected = FALSE;	pAD9380->ISRC2_InfoFrameDetected = FALSE;	return RM_OK;}static RMstatus cap_AD9380_read_avi_infoframe(struct cap_AD9380_instance *pAD9380,RMuint8 *pHeader,  RMuint8 *pData, RMuint32 size ){	RMDBGLOG((FUNCNAME, "%s\n",__func__));	if( (pData == NULL) || (size < 14) ){ // TODO define macro for size 14		return RM_ERROR;	}	RMMemset(pData, 0x0, size);	cap_i2c_read_dev(pAD9380, pAD9380->BaseDevice, 0x81, pData+1);	cap_i2c_read_dev(pAD9380, pAD9380->BaseDevice, 0x82, pData+2);		cap_i2c_read_dev(pAD9380, pAD9380->BaseDevice, 0x83, pData+3);		cap_i2c_read_dev(pAD9380, pAD9380->BaseDevice, 0x84, pData+4);	cap_i2c_read_dev(pAD9380, pAD9380->BaseDevice, 0x85, pData+5);	cap_i2c_read_dev(pAD9380, pAD9380->BaseDevice, 0x86, pData+6); // active line start LSB	cap_i2c_read_dev(pAD9380, pAD9380->BaseDevice, 0x88, pData+7); // active line start MSB	cap_i2c_read_dev(pAD9380, pAD9380->BaseDevice, 0x89, pData+8); // active line end LSB	cap_i2c_read_dev(pAD9380, pAD9380->BaseDevice, 0x8a, pData+9); // active line end MSB	cap_i2c_read_dev(pAD9380, pAD9380->BaseDevice, 0x86, pData+10); // active pixel start LSB	cap_i2c_read_dev(pAD9380, pAD9380->BaseDevice, 0x88, pData+11); // active pixel start MSB	cap_i2c_read_dev(pAD9380, pAD9380->BaseDevice, 0x86, pData+12); // active pixel end LSB	cap_i2c_read_dev(pAD9380, pAD9380->BaseDevice, 0x88, pData+13); // active pixel end MSB	return RM_OK;}static RMstatus cap_AD9380_read_spd_infoframe(struct cap_AD9380_instance *pAD9380,RMuint8 *pHeader, RMuint8 *pData, RMuint32 size ){	RMuint32 i = 0;		RMDBGLOG((FUNCNAME, "%s\n",__func__));	if( (pData == NULL) || (size < 26) ){ // TODO define macro for size 		return RM_ERROR;	}	RMMemset(pData, 0x0, size);	for(i=0; i<6; i++){		// 0x99 - 0x9e (VN1 - VN6) : data[1] - data[6]		cap_i2c_read_dev(pAD9380, pAD9380->BaseDevice, 0x99+i, pData+1+i);			}	for(i=0; i<7; i++){		// 0xa0 - 0xa6 (VN7 - PD5) : data[7] - data[13]		cap_i2c_read_dev(pAD9380, pAD9380->BaseDevice, 0xa0+i, pData+7+i);			}	for(i=0; i<7; i++){		// 0xa8 - 0xae (PD6 - PD12) : data[14] - data[20]		cap_i2c_read_dev(pAD9380, pAD9380->BaseDevice, 0xa8+i, pData+14+i);			}	for(i=0; i<5; i++){		// 0xb0 - 0xb4 (PD13 - SDI) : data[21] - data[25]		cap_i2c_read_dev(pAD9380, pAD9380->BaseDevice, 0xb0+i, pData+21+i);			}			return RM_OK;}static RMstatus cap_AD9380_read_audio_infoframe(struct cap_AD9380_instance *pAD9380, RMuint8 *pHeader, RMuint8 *pData, RMuint32 size ){	RMuint32 i = 0;		RMDBGLOG((FUNCNAME, "%s\n",__func__));	if( (pData == NULL) || (size < 6) ){ // TODO define macro for size 		return RM_ERROR;	}	RMMemset(pData, 0x0, size);	for(i=0; i<5; i++){		// 0x91 - 0x95  : data[1] - data[5]		cap_i2c_read_dev(pAD9380, pAD9380->BaseDevice, 0x91+i, pData+1+i);			}	return RM_OK;}static RMstatus cap_AD9380_read_mpeg_infoframe(struct cap_AD9380_instance *pAD9380,RMuint8 *pHeader, RMuint8 *pData, RMuint32 size ){	RMuint32 i = 0;		RMDBGLOG((FUNCNAME, "%s\n",__func__));	if( (pData == NULL) || (size < 6) ){ // TODO define macro for size 		return RM_ERROR;	}	RMMemset(pData, 0x0, size);	for(i=0; i<5; i++){		// 0xb9 - 0xbd  : data[1] - data[5]		cap_i2c_read_dev(pAD9380, pAD9380->BaseDevice, 0xb9+i, pData+1+i);			}	return RM_OK;}static RMstatus cap_AD9380_read_acp_infoframe(struct cap_AD9380_instance *pAD9380, RMuint8 *pHeader, RMuint8 *pData, RMuint32 size ){	RMuint32 i = 0;		RMDBGLOG((FUNCNAME, "%s\n",__func__));	if( (pHeader == NULL) || (pData == NULL) || (size < 6) ){ // TODO define macro for size 		return RM_ERROR;	}	RMMemset(pHeader, 0x0, 3); // TODO headersize macro	// only header[1] is meaningfull	cap_i2c_read_dev(pAD9380, pAD9380->BaseDevice, 0xc0, pHeader+1);			RMMemset(pData, 0x0, size);	for(i=0; i<6; i++){		// 0xc1 - 0xc7  : data[1] - data[6]		cap_i2c_read_dev(pAD9380, pAD9380->BaseDevice, 0xc1+i, pData+1+i);			}	RMDBGLOG((FUNCNAME, "%s return OK !\n",__func__));	return RM_OK;}static RMstatus cap_AD9380_read_isrc1_infoframe(struct cap_AD9380_instance *pAD9380, RMuint8 *pHeader, RMuint8 *pData, RMuint32 size ){	RMuint32 i = 0;		RMDBGLOG((FUNCNAME, "%s\n",__func__));	if( (pHeader == NULL) || (pData == NULL) || (size < 20) ){ // TODO define macro for size 		return RM_ERROR;	}	RMMemset(pHeader, 0x0, 3); // TODO headersize macro	// only header[1] is meaningfull	cap_i2c_read_dev(pAD9380, pAD9380->BaseDevice, 0xc8, pHeader+1);			RMMemset(pData, 0x0, size);	// be careful! play_capture_hdmi will treat data from data[0] 	for(i=0; i<6; i++){		// 0xc9 - 0xce  : data[0] - data[5]		cap_i2c_read_dev(pAD9380, pAD9380->BaseDevice, 0xc9+i, pData+i);			}	for(i=0; i<7; i++){		// 0xd0 - 0xd6  : data[6] - data[12]		cap_i2c_read_dev(pAD9380, pAD9380->BaseDevice, 0xd0+i, pData+i);			}	for(i=0; i<4; i++){		// 0xd8 - 0xdb  : data[13] - data[16]		cap_i2c_read_dev(pAD9380, pAD9380->BaseDevice, 0xc1+i, pData+i);			}	return RM_OK;}static RMstatus cap_AD9380_read_isrc2_infoframe(struct cap_AD9380_instance *pAD9380, RMuint8 *pHeader, RMuint8 *pData, RMuint32 size ){	RMuint32 i = 0;		RMDBGLOG((FUNCNAME, "%s\n",__func__));	if( (pHeader == NULL) || (pData == NULL) || (size < 20) ){ // TODO define macro for size 		return RM_ERROR;	}	RMMemset(pData, 0x0, size);	// be careful! play_capture_hdmi will treat data from data[0] 	for(i=0; i<3; i++){		// 0xdc - 0xce  : data[0] - data[2]		cap_i2c_read_dev(pAD9380, pAD9380->BaseDevice, 0xdc+i, pData+i);			}	for(i=0; i<7; i++){		// 0xe0 - 0xe6  : data[3] - data[9]		cap_i2c_read_dev(pAD9380, pAD9380->BaseDevice, 0xe0+i, pData+i);			}	for(i=0; i<7; i++){		// 0xe8 - 0xee  : data[10] - data[16]		cap_i2c_read_dev(pAD9380, pAD9380->BaseDevice, 0xe8+i, pData+i);			}	return RM_OK;}RMstatus cap_AD9380_read_info_frame(struct cap_AD9380_instance *pAD9380, 				    RMuint8 type, 				    RMuint8 *header, 				    RMuint8 *data, 				    RMuint32 size){		RMDBGLOG((FUNCNAME, "%s\n",__func__));	switch (type) {	case 0x04:  // Audio CP		cap_AD9380_read_acp_infoframe(pAD9380, header, data, size);			break;	case 0x05:  // ISRC1		cap_AD9380_read_isrc1_infoframe(pAD9380, header, data, size);		break;	case 0x06:  // ISRC2		cap_AD9380_read_isrc2_infoframe(pAD9380, header, data, size);		break;	case 0x0A:  // Gamut Metadata		//cap_AD9380_read_avi_infoframe(pAD9380, header, data, size);		break;	case 0x81:  // Vendor Specific		//cap_AD9380_read_avi_infoframe(pAD9380, header, data, size);		break;	case 0x83:  // SPD		cap_AD9380_read_spd_infoframe(pAD9380, header, data, size);		break;	case 0x82:  // AVI		cap_AD9380_read_avi_infoframe(pAD9380, header, data, size);		/*		{			RMuint32 i = 0;			for(i=0; i< size; i++){				RMDBGLOG((LOCALDBG, " data[%ld] : 0x%x\n", i, data[i]));			}		}		*/		break;	case 0x84:  // Audio		cap_AD9380_read_audio_infoframe(pAD9380, header, data, size);		break;	case 0x85:  // MPEG		cap_AD9380_read_mpeg_infoframe(pAD9380, header, data, size);		break;	}		return RM_OK;}/* * Analog Video Functions*/ // have to expand api to add input type and input port numberRMstatus cap_AD9380_init_analog_capture(struct cap_AD9380_instance *pAD9380,					RMuint32 input){	/*	 * Input Port Setting	 */	RMuint8 AD9380_RGB_I2CDATA[][2] = {		//	{ 0x5 , 0x80 },		//	{ 0x6 , 0x80 },		//	{ 0x7 , 0x80 },				{ 0x5 , 0x80 },		{ 0x6 , 0x45 },		{ 0x7 , 0x80 },				{ 0x8 , 0x0 },		{ 0x9 , 0x80 },		{ 0xa , 0x0 },		{ 0xb , 0x08 },		{ 0xc , 0x0 },		{ 0xd , 0x80 },		};	RMDBGLOG((FUNCNAME, "%s\n",__func__));	// Input Port Setting	if(1) cap_i2c_write_dev(pAD9380, pAD9380->BaseDevice, 0x11, 0x00); //interface select - digital interface#if 1	 	switch (input) {	case cap_video_input_component:		// YUV input set up		//cap_i2c_write_dev(pAD9380, pAD9380->BaseDevice, 0x11, 0xfd);		cap_i2c_init(pAD9380, pAD9380->BaseDevice, AD9380_RGB_I2CDATA);		break;	case cap_video_input_vga:		// VGA input set up		cap_i2c_write_dev(pAD9380, pAD9380->BaseDevice, 0x11, 0x55);		cap_i2c_init(pAD9380, pAD9380->BaseDevice, AD9380_RGB_I2CDATA);		break; 	default:		// defualt to YUV 		cap_i2c_write_dev(pAD9380, pAD9380->BaseDevice, 0x11, 0xfd);		break;	}#endif	return RM_OK;}#if 0RMstatus cap_AD9380_setup_audio_mclk(struct cap_AD9380_instance *pAD9380){		RMDBGLOG((FUNCNAME, "%s\n",__func__));	return RM_OK;}RMstatus cap_AD9380_setup_output(struct cap_AD9380_instance *pAD9380, 				 struct cap_update *pUpdate){	if (pUpdate->VideoOff == TRUE) {		return RM_ERROR;	}	if (pUpdate->TVStandardValid && pUpdate->TVStandardUpdate) {		RMbool isNTSC;		IsNTSC(pUpdate->TVStandard, isNTSC);		if (isNTSC) {			/*			 * when NTSC			 * 0x07			 * 0x08			 * 0x09			 * 0x0b			 */				}else{			/*			 * PAL			 */				}	}		if (pUpdate->TVFormatValid && pUpdate->TVFormatUpdate) {			}	if (pUpdate->PictureAspectRatioValid && pUpdate->PictureAspectRatioUpdate) {	}	if (pUpdate->InputColorSpaceValid && pUpdate->InputColorSpaceUpdate) {	}	if (pUpdate->InputColorFormatValid && pUpdate->InputColorFormatUpdate) {		if(pUpdate->InputColorFormat == 1){		}	}	return RM_OK;}#endif#if 1static RMstatus IsSyncDetected(struct cap_AD9380_instance *pAD9380){	RMuint8 reg = 0;	//RMDBGLOG((FUNCNAME, "%s\n",__func__));	cap_i2c_read_dev(pAD9380, pAD9380->BaseDevice, 0x15, &reg);		//RMDBGLOG((LOCALDBG, "%d\n", reg));	if(reg & 0x80){		RMDBGLOG((LOCALDBG, "HSYNC0 detected\n"));	}	if(reg & 0x40){		RMDBGLOG((LOCALDBG, "HSYNC1 detected\n"));	}	if(reg & 0x20){		RMDBGLOG((LOCALDBG, "VSYNC0 detected\n"));	}	if(reg & 0x10){		RMDBGLOG((LOCALDBG, "VSYNC1 detected\n"));	}	if(reg & 0x8){		RMDBGLOG((LOCALDBG, "SOG0 detected\n"));	}	if(reg & 0x4){		RMDBGLOG((LOCALDBG, "SOG1 detected\n"));	}	if(reg & 0x2){		RMDBGLOG((LOCALDBG, "Coast detected\n"));	}		return RM_OK;		}static RMstatus IsSyncFilterLocked(struct cap_AD9380_instance *pAD9380){	RMuint8 reg = 0;	//RMDBGLOG((FUNCNAME, "%s\n",__func__));	cap_i2c_read_dev(pAD9380, pAD9380->BaseDevice, 0x16, &reg);		//RMDBGLOG((LOCALDBG, "%d\n", reg));	if(reg & 0x2){		RMDBGLOG((LOCALDBG, "Sync Filter Locked\n"));	}	if(reg & 0x1){		RMDBGLOG((LOCALDBG, "Bad Sync Detected\n"));	}			return RM_OK;}RMstatus cap_AD9380_analog_check_int(struct cap_AD9380_instance *pAD9380){	/*	 AD9380 is not interrupt driven	 This will be polled by main_loop	*/	IsSyncDetected(pAD9380);	IsSyncFilterLocked(pAD9380);	return RM_OK;}RMstatus cap_AD9380_analog_handle_int(struct cap_AD9380_instance *pAD9380, 				      struct cap_update *pUpdate){	return RM_OK;}#endif

⌨️ 快捷键说明

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