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 ; }
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; } } } }