void osdEraseFlash(void *ptr) { UNUSED(ptr); max7456ClearScreen(); max7456Write(5, 3, "ERASING FLASH..."); max7456RefreshAll(); flashfsEraseCompletely(); while (!flashfsIsReady()) { delay(100); } max7456ClearScreen(); max7456RefreshAll(); }
void osdInit(void) { char x, string_buffer[30]; armState = ARMING_FLAG(ARMED); max7456Init(masterConfig.osdProfile.video_system); max7456ClearScreen(); // display logo and help x = 160; for (int i = 1; i < 5; i++) { for (int j = 3; j < 27; j++) { if (x != 255) max7456WriteChar(j, i, x++); } } sprintf(string_buffer, "BF VERSION: %s", FC_VERSION_STRING); max7456Write(5, 6, string_buffer); max7456Write(7, 7, "MENU: THRT MID"); max7456Write(13, 8, "YAW RIGHT"); max7456Write(13, 9, "PITCH UP"); max7456RefreshAll(); refreshTimeout = 4 * REFRESH_1S; }
static void resync(displayPort_t *displayPort) { UNUSED(displayPort); max7456RefreshAll(); displayPort->rows = max7456GetRowsCount() + displayPortProfileMax7456()->rowAdjust; displayPort->cols = 30 + displayPortProfileMax7456()->colAdjust; }
//because MAX7456 need some time to detect video system etc. we need to wait for a while to initialize it at startup //and in case of restart we need to reinitialize chip void max7456ReInit(void) { uint8_t maxScreenRows; uint8_t srdata = 0; uint16_t x; static bool firstInit = true; //do not init MAX before camera power up correctly if (millis() < 1500) return; ENABLE_MAX7456; switch(videoSignalCfg) { case PAL: videoSignalReg = VIDEO_MODE_PAL | OSD_ENABLE; break; case NTSC: videoSignalReg = VIDEO_MODE_NTSC | OSD_ENABLE; break; default: srdata = max7456Send(MAX7456ADD_STAT, 0x00); if ((0x02 & srdata) == 0x02) videoSignalReg = VIDEO_MODE_NTSC | OSD_ENABLE; } if (videoSignalReg & VIDEO_MODE_PAL) { //PAL maxScreenSize = VIDEO_BUFFER_CHARS_PAL; maxScreenRows = VIDEO_LINES_PAL; } else { // NTSC maxScreenSize = VIDEO_BUFFER_CHARS_NTSC; maxScreenRows = VIDEO_LINES_NTSC; } // set all rows to same charactor black/white level for(x = 0; x < maxScreenRows; x++) { max7456Send(MAX7456ADD_RB0 + x, BWBRIGHTNESS); } // make sure the Max7456 is enabled max7456Send(VM0_REG, videoSignalReg); max7456Send(DMM_REG, CLEAR_DISPLAY); DISABLE_MAX7456; //clear shadow to force redraw all screen in non-dma mode memset(shadowBuffer, 0, maxScreenSize); if (firstInit) { max7456RefreshAll(); firstInit = false; } }
void osdExitMenu(void *ptr) { max7456ClearScreen(); max7456Write(5, 3, "RESTARTING IMU..."); max7456RefreshAll(); stopMotors(); stopPwmAllMotors(); delay(200); if (ptr) { // save local variables to configuration if (featureBlackbox) featureSet(FEATURE_BLACKBOX); else featureClear(FEATURE_BLACKBOX); if (featureLedstrip) featureSet(FEATURE_LED_STRIP); else featureClear(FEATURE_LED_STRIP); #if defined(VTX) || defined(USE_RTC6705) if (featureVtx) featureSet(FEATURE_VTX); else featureClear(FEATURE_VTX); #endif // VTX || USE_RTC6705 #ifdef VTX masterConfig.vtxBand = vtxBand; masterConfig.vtx_channel = vtxChannel - 1; #endif // VTX #ifdef USE_RTC6705 masterConfig.vtx_channel = vtxBand * 8 + vtxChannel - 1; #endif // USE_RTC6705 saveConfigAndNotify(); } systemReset(); }
void max7456ReInit(void) { uint8_t maxScreenRows; uint8_t srdata = 0; uint16_t x; static bool firstInit = true; ENABLE_MAX7456; switch(videoSignalCfg) { case VIDEO_SYSTEM_PAL: videoSignalReg = VIDEO_MODE_PAL | OSD_ENABLE; break; case VIDEO_SYSTEM_NTSC: videoSignalReg = VIDEO_MODE_NTSC | OSD_ENABLE; break; case VIDEO_SYSTEM_AUTO: srdata = max7456Send(MAX7456ADD_STAT, 0x00); if (VIN_IS_NTSC(srdata)) { videoSignalReg = VIDEO_MODE_NTSC | OSD_ENABLE; } else if (VIN_IS_PAL(srdata)) { videoSignalReg = VIDEO_MODE_PAL | OSD_ENABLE; } else { // No valid input signal, fallback to default (XXX NTSC for now) videoSignalReg = VIDEO_MODE_NTSC | OSD_ENABLE; } break; } if (videoSignalReg & VIDEO_MODE_PAL) { //PAL maxScreenSize = VIDEO_BUFFER_CHARS_PAL; maxScreenRows = VIDEO_LINES_PAL; } else { // NTSC maxScreenSize = VIDEO_BUFFER_CHARS_NTSC; maxScreenRows = VIDEO_LINES_NTSC; } // Set all rows to same charactor black/white level. for(x = 0; x < maxScreenRows; x++) { max7456Send(MAX7456ADD_RB0 + x, BWBRIGHTNESS); } // Make sure the Max7456 is enabled max7456Send(MAX7456ADD_VM0, videoSignalReg); max7456Send(MAX7456ADD_HOS, hosRegValue); max7456Send(MAX7456ADD_VOS, vosRegValue); max7456Send(MAX7456ADD_DMM, CLEAR_DISPLAY); DISABLE_MAX7456; // Clear shadow to force redraw all screen in non-dma mode. memset(shadowBuffer, 0, maxScreenSize); if (firstInit) { max7456RefreshAll(); firstInit = false; } }