コード例 #1
0
ファイル: screen.c プロジェクト: dab2000/rEFInd-custom
VOID DebugPause(VOID)
{
    // show console and wait for key
    SwitchToText(FALSE);
    PauseForKey();

    // reset error flag
    haveError = FALSE;
}
コード例 #2
0
ファイル: screen.c プロジェクト: dab2000/rEFInd-custom
VOID FinishTextScreen(IN BOOLEAN WaitAlways)
{
    if (haveError || WaitAlways) {
       PauseForKey();
       SwitchToText(FALSE);
    }

    // reset error flag
    haveError = FALSE;
}
コード例 #3
0
ファイル: screen.c プロジェクト: gvsurenderreddy/rEFInd
// Sets the screen resolution to the specified value, if possible.
// If the specified value is not valid, displays a warning with the valid
// modes on UEFI systems, or silently fails on EFI 1.x systems. Note that
// this function attempts to set ANY screen resolution, even 0x0 or
// ridiculously large values.
// Returns TRUE if successful, FALSE if not.
BOOLEAN egSetScreenSize(IN UINTN ScreenWidth, IN UINTN ScreenHeight) {
   EFI_STATUS Status = EFI_SUCCESS;
   EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *Info;
   UINT32 ModeNum = 0;
   UINTN Size;
   BOOLEAN ModeSet = FALSE;
   UINT32 UGAWidth, UGAHeight, UGADepth, UGARefreshRate;

   if (GraphicsOutput != NULL) { // GOP mode (UEFI)
      // Do a loop through the modes to see if the specified one is available;
      // and if so, switch to it....
      while ((Status == EFI_SUCCESS) && (!ModeSet)) {
         Status = refit_call4_wrapper(GraphicsOutput->QueryMode, GraphicsOutput, ModeNum, &Size, &Info);
         if ((Status == EFI_SUCCESS) && (Size >= sizeof(*Info)) &&
             (Info->HorizontalResolution == ScreenWidth) && (Info->VerticalResolution == ScreenHeight)) {
            Status = refit_call2_wrapper(GraphicsOutput->SetMode, GraphicsOutput, ModeNum);
            ModeSet = (Status == EFI_SUCCESS);
         } // if
         ModeNum++;
      } // while()

      if (ModeSet) {
         egScreenWidth = ScreenWidth;
         egScreenHeight = ScreenHeight;
      } else {// If unsuccessful, display an error message for the user....
         Print(L"Error setting mode %d x %d; using default mode!\nAvailable modes are:\n", ScreenWidth, ScreenHeight);
         ModeNum = 0;
         Status = EFI_SUCCESS;
         while (Status == EFI_SUCCESS) {
            Status = refit_call4_wrapper(GraphicsOutput->QueryMode, GraphicsOutput, ModeNum, &Size, &Info);
            if ((Status == EFI_SUCCESS) && (Size >= sizeof(*Info))) {
               Print(L"Mode %d: %d x %d\n", ModeNum, Info->HorizontalResolution, Info->VerticalResolution);
            } // else
            ModeNum++;
         } // while()
         PauseForKey();
      } // if()
   } else if (UgaDraw != NULL) { // UGA mode (EFI 1.x)
      // Try to use current color depth & refresh rate for new mode. Maybe not the best choice
      // in all cases, but I don't know how to probe for alternatives....
      Status = refit_call5_wrapper(UgaDraw->GetMode, UgaDraw, &UGAWidth, &UGAHeight, &UGADepth, &UGARefreshRate);
      Status = refit_call5_wrapper(UgaDraw->SetMode, UgaDraw, ScreenWidth, ScreenHeight, UGADepth, UGARefreshRate);
      if (Status == EFI_SUCCESS) {
         egScreenWidth = ScreenWidth;
         egScreenHeight = ScreenHeight;
         ModeSet = TRUE;
      } else {
         // TODO: Find a list of supported modes and display it.
         // NOTE: Below doesn't actually appear unless we explicitly switch to text mode.
         // This is just a placeholder until something better can be done....
         Print(L"Error setting mode %d x %d; unsupported mode!\n");
      } // if/else
   } // if/else if
   return (ModeSet);
} // BOOLEAN egSetScreenSize()
コード例 #4
0
ファイル: screen.c プロジェクト: dab2000/rEFInd-custom
VOID FinishExternalScreen(VOID)
{
    // make sure we clean up later
    GraphicsScreenDirty = TRUE;

    if (haveError) {
        SwitchToText(FALSE);
        PauseForKey();
    }

    // Reset the screen resolution, in case external program changed it....
    SetupScreen();

    // reset error flag
    haveError = FALSE;
}