Beispiel #1
0
void osd_run_step( void )
{
	boolean osd_on = (OSD_MODE_SWITCH_INPUT_CHANNEL == CHANNEL_UNUSED || udb_pwIn[OSD_MODE_SWITCH_INPUT_CHANNEL] >= 3000 || !udb_flags._.radio_on) ;
	
	int countdown = 0 ;
	if (!dcm_flags._.init_finished && udb_heartbeat_counter < 100)
	{
		countdown = 100 - udb_heartbeat_counter ;
	}
	
	if (countdown == 61)
	{
		osd_spi_write_byte(0xFF) ;	// Terminate sending a string, in case that was happening (Prep for reset)
	}
	else if (countdown == 60)
	{
		osd_spi_write(0x0, 0x02) ;	// VM0: Reset the OSD
	}
	else if (countdown == 48)
	{
		osd_spi_write(0x04, 0) ;	// DMM set to 0
	}
	else if (countdown < 48)
	{
		if (!osd_was_on && osd_on)
		{
#if (OSD_VIDEO_FORMAT == OSD_NTSC)
			osd_spi_write(0x0, 0x08) ;	// VM0: enable display of OSD image, NTSC
#else
			osd_spi_write(0x0, 0x48) ;	// VM0: enable display of OSD image, PAL
#endif
			osd_phase = 0 ;
			osd_setup_screen() ;
			osd_was_on = 1 ;
		}
		else if (osd_was_on && !osd_on)	// just turned off
		{
			osd_spi_write(0x04, 4) ;	// DMM set to 6 (Blank screen)
			
#if (OSD_VIDEO_FORMAT == OSD_NTSC)
			osd_spi_write(0x0, 0x00) ;	// VM0: disable display of OSD image, NTSC
#else
			osd_spi_write(0x0, 0x40) ;	// VM0: disable display of OSD image, PAL
#endif
			
			osd_was_on = 0 ;
		}
		
		if (osd_on)
		{
			osd_update_values() ;
			osd_phase = (osd_phase+1) % 4 ;
		}
	}
	
	return ;
}
Beispiel #2
0
void osd_run_step(void)
{
	boolean osd_on = (OSD_MODE_SWITCH_INPUT_CHANNEL == CHANNEL_UNUSED || udb_pwIn[OSD_MODE_SWITCH_INPUT_CHANNEL] >= 3000 || !udb_flags._.radio_on);
	
	int16_t countdown = 0;
	if (!dcm_flags._.init_finished && udb_heartbeat_counter < 100)
	{
		countdown = 100 - udb_heartbeat_counter;
	}

	if (countdown == 61)
	{
		osd_spi_write_byte(0xFF);       // Terminate sending a string, in case that was happening (Prep for reset)
	}
	else if (countdown == 60)
	{
		osd_spi_write(0x0, 0x02);       // VM0: Reset the OSD
	}
	else if (countdown == 48)
	{
		osd_spi_write(0x04, 0);         // DMM set to 0
	}
	else if (countdown < 48)
	{
		if (!osd_was_on && osd_on)
		{
#if (OSD_VIDEO_FORMAT == OSD_NTSC)
			osd_spi_write(0x0, 0x08);   // VM0: enable display of OSD image, NTSC
#else
			osd_spi_write(0x0, 0x48);   // VM0: enable display of OSD image, PAL
#endif
			osd_phase = 0;
			osd_setup_screen();
			osd_was_on = 1;
		}
		else if (osd_was_on && !osd_on) // just turned off
		{
			osd_spi_write(0x04, 4);     // DMM set to 6 (Blank screen)

#if (OSD_VIDEO_FORMAT == OSD_NTSC)
			osd_spi_write(0x0, 0x00);   // VM0: disable display of OSD image, NTSC
#else
			osd_spi_write(0x0, 0x40);   // VM0: disable display of OSD image, PAL
#endif
			osd_was_on = 0;
		}

		if (osd_on)
		{
			if (!osd_phase)
			{
				osd_reset_cnt++;
			}

			if (!osd_reset_cnt)
			{
				osd_spi_write(MAX7456_DMM, 0x04);    // DMM set to clear display memory
#if (OSD_VIDEO_FORMAT == OSD_NTSC)
				osd_spi_write(0x0, 0x08);            // VM0: enable display of OSD image, NTSC
#else
				osd_spi_write(0x0, 0x48);            // VM0: enable display of OSD image, PAL
#endif
				osd_setup_screen();
			}
			else
			{
				// work around for a bug whereby the offsets randomly get set to zero
				osd_spi_write(MAX7456_VOS, OSD_VERTICAL_OFFSET);
				osd_spi_write(MAX7456_HOS, OSD_HORIZONTAL_OFFSET);

				osd_update_values();
				osd_phase = (osd_phase+1) % 4;
			}
		}
	}
}