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

📄 main.c

📁 Sensor Stream for BF561
💻 C
📖 第 1 页 / 共 2 页
字号:
					InputBuffer=OutputBuffer=NULL;
					InputType=DEVICE_UNKNOWN;
					
					gfx_init(&Overlay,Mode,OverlayData,0,0,0,0);
					Transparent=gfx_getcolour(&Overlay,16,16,16);
					gfx_frame(&Overlay,Transparent);
					OverlayColour=gfx_getcolour(&Overlay,0,64,255);
					switch (Overlay.Mode)
					{
						case GFX_MODE_VGA:
							gfx_init(&Header,Overlay.Mode,OverlayData,10,10,Overlay.Width/2,40);
							break;
						
						case GFX_MODE_PALI:
						case GFX_MODE_NTSCI:
							gfx_init(&Header,Overlay.Mode,OverlayData,30,20,-60,40);
					}
					
					gfx_init(&Info,Overlay.Mode,OverlayData,Header.Left,Header.Top+Header.Height+10,Header.Width,75);
					gfx_boxf(&Info,0,0,Info.Width-1,Info.Height-1,OverlayColour,Transparent);
					gfx_line(&Info,1,15,Info.Width-2,15,OverlayColour);
					
					gfx_init(&Info,Overlay.Mode,OverlayData,Info.Left+5,Info.Top+5,Info.Width-10,10);
					gfx_setfont(&Info,3);
					gfx_setcolour(&Info,OverlayColour);
					gfx_printf(&Info,"Hardware Status");
					
					gfx_init(&Info,Overlay.Mode,OverlayData,Info.Left,Info.Top+15,Info.Width,50);
					
					gfx_boxf(&Header,0,0,Header.Width-1,Header.Height-1,OverlayColour,Transparent);
					gfx_line(&Header,1,15,Header.Width-2,15,OverlayColour);
					
					gfx_init(&Header,Overlay.Mode,OverlayData,Header.Left+5,Header.Top+5,Header.Width-10,10);
					gfx_setfont(&Header,3);
					gfx_setcolour(&Header,OverlayColour);
					gfx_printf(&Header,"%s",VERSION);
					
					gfx_init(&Header,Overlay.Mode,OverlayData,Header.Left,Header.Top+15,Header.Width,20);
					gfx_setfont(&Header,2);
					gfx_setcolour(&Header,OverlayColour);
					gfx_printf(&Header,"This is a sensor input to %s output test with overlay.",
						(char *)(Overlay.Mode==GFX_MODE_VGA?"VGA LCD":
						Overlay.Mode==GFX_MODE_PAL||Overlay.Mode==GFX_MODE_PALI?"PAL video":
						"NTSC video"));
					
					gfx_init(&Header,Overlay.Mode,OverlayData,0,Overlay.Height-40,Overlay.Width,40);
					gfx_setfont(&Header,4);
					gfx_setcolour(&Header,OverlayColour);
					gfx_setjustify(&Header,GFX_JUSTIFY_CENTER);
					gfx_goto(&Header,Header.Width/2,0);
					gfx_printf(&Header,"www.analog.com/blackfin");
				}
				Retry=10;
				State=STATE_OUTPUT_OPEN;
			}
			
			
			case STATE_OUTPUT_OPEN:
			{
				ADI_DEV_CMD_VALUE_PAIR *Config=NULL;
				u32 Refresh=1;
				
				switch (Mode)
				{
					case GFX_MODE_VGA:
					{
						static ADI_DEV_CMD_VALUE_PAIR Args[]={
							{ADI_DEV_CMD_END,NULL}
						};
						Type=DEVICE_NL6448BC33;
						Refresh=VIDEO_REFRESH_VGA;
						Config=Args;
						Mask=1;
						break;
					}
				
					case GFX_MODE_PALI:
					{
						static ADI_DEV_CMD_VALUE_PAIR Args[]={
							{ENCODER_CMD_SET_MODE,(void *)GFX_MODE_PALI},
							{ADI_DEV_CMD_END,NULL}
						};
						Type=DEVICE_ADV7179;
						Refresh=VIDEO_REFRESH_PAL;
						Config=Args;
						Mask=3;
						break;
					}
					
					default: //default mode is NTSC
					{
						static ADI_DEV_CMD_VALUE_PAIR Args[]={
							{ENCODER_CMD_SET_MODE,(void *)GFX_MODE_NTSCI},
							{ADI_DEV_CMD_END,NULL}
						};
						Mode=GFX_MODE_NTSCI;
						Type=DEVICE_ADV7179;
						Refresh=VIDEO_REFRESH_NTSC;
						Config=Args;
						Mask=3;
						break;
					}
				}
				ModeOld=Mode;
				TypeOld=Type;
				
				FrameCount=OutputFrame+(InputType==DEVICE_UNKNOWN?1:4*Refresh);
				if (Output==NULL) Output=device_open(Type,OUTPUT_PPI,(u16 *)OutputData,sizeof(OutputData[0]),CallbackOutput,Config);
				
				if (Output) State=STATE_OUTPUT_FRAME;
				else if (Retry--<=0) State=STATE_OUTPUT; // if cant open output then try again
				break;
			}
			
			
			case STATE_OUTPUT_FRAME:
			{
				if (Frame!=OutputFrame)
				{
					u32 NotFound,Found,Running;
					
					// copy the overlay/input image to the output buffer
					ImageCopy(Mask==0?3:Mask,InputType,Mode,InputBuffer,OutputBuffer,&Overlay,Transparent);
					
					NotFound=gfx_getcolour(&Info,128,128,128);
					Found=gfx_getcolour(&Info,0,128,0);
					Running=gfx_getcolour(&Info,0,160,0);
					
					// update the hardware status window only
					gfx_fill(&Info,Transparent);
					gfx_setfont(&Info,2);
					gfx_setcolour(&Info,Running);
					gfx_goto(&Info,0,0);
					gfx_printf(&Info,"Input frames %lu",InputFrame);
					gfx_goto(&Info,0,10);
					gfx_printf(&Info,"Output frames %lu",OutputFrame);
					
					
					gfx_goto(&Info,0,20);
					switch (device_detect(DEVICE_ADV7179))
					{
						case ADI_DEV_RESULT_SUCCESS:
							gfx_setcolour(&Info,Found);
							gfx_printf(&Info,"Analog device ADV7179 detected");
							break;
						
						case ADI_DEV_RESULT_DEVICE_IN_USE:
							gfx_setcolour(&Info,Running);
							gfx_printf(&Info,"Analog device ADV7179 in use");
							break;
						
						default:
							gfx_setcolour(&Info,NotFound);
							gfx_printf(&Info,"Analog device ADV7179 not found");
					}
					
					
					gfx_goto(&Info,0,30);
					switch (device_detect(DEVICE_OV7648))
					{
						case ADI_DEV_RESULT_SUCCESS:
							gfx_setcolour(&Info,Found);
							gfx_printf(&Info,"Omnivision OV7X48 detected");
							break;
						
						case ADI_DEV_RESULT_DEVICE_IN_USE:
							gfx_setcolour(&Info,Running);
							gfx_printf(&Info,"Omnivision OV7X48 in use");
							break;
						
						default:
							gfx_setcolour(&Info,NotFound);
							gfx_printf(&Info,"Omnivision OV7X48 not found");
					}
					
					
					gfx_goto(&Info,0,40);
					switch (device_detect(DEVICE_MT9V022M))
					{
						case ADI_DEV_RESULT_SUCCESS:
							gfx_setcolour(&Info,Found);
							gfx_printf(&Info,"Micron MT9V022 detected");
							break;
						
						case ADI_DEV_RESULT_DEVICE_IN_USE:
							gfx_setcolour(&Info,Running);
							gfx_printf(&Info,"Micron MT9V022 in use");
							break;
						
						default:
							gfx_setcolour(&Info,NotFound);
							gfx_printf(&Info,"Micron MT9V022 not found");
					}
					
					
					Frame=OutputFrame;
					Mask^=3;
				}
				if ((OutputFrame-FrameCount)&0x80000000) break;
				State=INPUT_PPI==OUTPUT_PPI?STATE_OUTPUT_CLOSE:STATE_INPUT;
				break;
			}
			
			case STATE_OUTPUT_CLOSE:
				State=STATE_INPUT;
				device_close(Output);
				Output=NULL;
				break;
			
			
			default:
				State=STATE_OUTPUT;
		}
	}
	
	
	// all done, so input and output devices
	device_close(Input);
	device_close(Output);
	
	
	// close the Device 
	adi_ssl_Terminate();
	
	WAIL();
	return Code;
}




/******************************************************************************

Exception interrupt handlers

Note: should never get an exception or hardware error...

******************************************************************************/

static ADI_INT_HANDLER(ExceptionHandler)
{
	WAIL();
	return ADI_INT_RESULT_PROCESSED;
}


static ADI_INT_HANDLER(HWErrorHandler)
{
	WAIL();
	return ADI_INT_RESULT_PROCESSED;
}




/******************************************************************************

	Function: CallbackInput
	
	Description: The default callback for input devices

******************************************************************************/

void CallbackInput(void *Handle,u32 Event,void *pArg)
{
	switch (Event)
	{
		case ADI_DEV_EVENT_BUFFER_PROCESSED:
		{
			if (Handle&&pArg&&((ADI_DEV_BUFFER *)pArg)->TwoD.pAdditionalInfo!=ADI_DEV_BUFFER_UNDEFINED)
				adi_dev_Read(
					*((ADI_DEV_DEVICE_HANDLE *)Handle),
					(ADI_DEV_BUFFER_TYPE)((ADI_DEV_BUFFER *)pArg)->TwoD.pAdditionalInfo,
					((ADI_DEV_BUFFER *)pArg));
			
			
			InputBuffer=(ADI_DEV_BUFFER *)pArg;
			InputFrame++;
			break;
		}
	}
}




/******************************************************************************

	Function: CallbackOutput
	
	Description: The output device callback routine

******************************************************************************/

void CallbackOutput(void *Handle,u32 Event,void *pArg)
{
	switch (Event)
	{
		case ADI_DEV_EVENT_BUFFER_PROCESSED:
			if (Handle&&pArg&&((ADI_DEV_BUFFER *)pArg)->TwoD.pAdditionalInfo!=ADI_DEV_BUFFER_UNDEFINED)
				adi_dev_Write(
					*((ADI_DEV_DEVICE_HANDLE *)Handle),
					(ADI_DEV_BUFFER_TYPE)((ADI_DEV_BUFFER *)pArg)->TwoD.pAdditionalInfo,
					((ADI_DEV_BUFFER *)pArg));
			
			
			OutputBuffer=(ADI_DEV_BUFFER *)pArg;
			OutputFrame++;
			break;
	}
}

/*****************************************************************************/

⌨️ 快捷键说明

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