亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? dalgco.c

?? 此代碼為WCE5.0下顯示器的源代碼
?? C
?? 第 1 頁 / 共 5 頁
字號(hào):
        if (  (  (ulDisplayType & HW_DISPLAY_TYPE_CRT)
               &&(lpCache->ulFlags & DALMODE_CRT_DTREGISTRYEXIST))
            ||(  (ulDisplayType & HW_DISPLAY_TYPE_DFP)
               &&(lpCache->ulFlags & DALMODE_DFP_DTREGISTRYEXIST)))
        {
          return i;
        }
      }
    }
  }

  return MAX_CACHEDDTM;
}


/****************************Private*Routine*******************************\
*
* BOOL bGetDetailedTimingFromRegistry()
*
* Retrieves detailed timing for the specified mode from the registry.  The
* detailed timing is stored under separate key for different display type.
*
\**************************************************************************/
BOOL bGetDetailedTimingFromRegistry(
LPHW_DAL_EXTENSION lpHDE,
ULONG              ulDisplayType,
LPDEVMODE_INFO     lpMI,
LPDAL_CRTC_TIMING  lpTimingInfo)
{
  ULONG                   i;
  ULONG                   ulCacheIndex;
  ULONG                   ulHasRead;
  ULONG                   ulRegExist;
  LPDAL_MODEINFO          lpDALModeInfo;

  DALASSERT((NULL != lpHDE), "bGetDetailedTimingFromRegistry - invalide DAL handle!");
  DALASSERT((NULL != lpMI), "bGetDetailedTimingFromRegistry - invalid mode handle!");
  DALASSERT((NULL != lpTimingInfo), "bGetDetailedTimingFromRegistry - invalid timing info pointer!");

  if (ulDisplayType & HW_DISPLAY_TYPE_CRT)
  {
    ulHasRead  = DALMODE_CRT_DTHASREADFROMREGISTRY;
    ulRegExist = DALMODE_CRT_DTREGISTRYEXIST;
  }
  else if (ulDisplayType & HW_DISPLAY_TYPE_DFP)
  {
    ulHasRead  = DALMODE_DFP_DTHASREADFROMREGISTRY;
    ulRegExist = DALMODE_DFP_DTREGISTRYEXIST;
  }
  else
  {
    // this function only supports CRT and DFP currently
    return FALSE;
  }

  if (!(bSearchModeTable(lpHDE, (LPDEVMODE_INFO)lpMI, (LPULONG)&i)))
  {
    // can't happen at this point - something funny is happenning here
    return FALSE;
  }
  lpDALModeInfo = &lpHDE->lpaModes[i];

  if ((ulHasRead & lpDALModeInfo->ulFlags) && !(ulRegExist & lpDALModeInfo->ulFlags))
  {
    // Queried registry before and did not find anything
    return FALSE;
  }

  lpDALModeInfo->ulFlags |= ulHasRead;
  lpDALModeInfo->ulFlags &= ~ulRegExist;

  // search for the cache anyway.  The detailed timing might be queried before for
  // different color depth.
  ulCacheIndex = bGetDetailedTimingIndexFromCache(lpHDE, ulDisplayType, lpMI);
  //DALASSERT((0 <= ulCacheIndex), "bGetDetailedTimingFromRegistry - invalid cache index!");
  if (ulCacheIndex < MAX_CACHEDDTM)
  {
    MOVEMEMORY(lpTimingInfo, 
               &lpHDE->aCachedDetailedTimings[ulCacheIndex].sDisplayDetailedTiming, 
               sizeof(DAL_CRTC_TIMING));
    lpDALModeInfo->ulFlags |= ulRegExist;
    return TRUE;
  }

  if(bGetDisplayPerModeDTFromRegistry(lpHDE, 
                                      ulDisplayType,
                                      (LPDEVMODE_INFO)lpMI,
                                      (LPDAL_CRTC_TIMING)lpTimingInfo))
  {
    LPREGDETAILEDTIMINGINFO lpCache;
    if (!(DALRULE1_READDETAILEDTIMINGPERMODE & lpHDE->ulDalRule1))
    {
      i                           = lpHDE->ulCachedDTIndex;
      lpCache                     = &lpHDE->aCachedDetailedTimings[i];
      lpCache->ulFlags           |= ulRegExist;
      lpCache->usPelsWidth        = (USHORT)lpMI->ulPelsWidth;
      lpCache->usPelsHeight       = (USHORT)lpMI->ulPelsHeight;
      lpCache->usDisplayFrequency = (USHORT)lpMI->ulDisplayFrequency;
      MOVEMEMORY(&lpCache->sDisplayDetailedTiming,
                 lpTimingInfo,
                 sizeof(DAL_CRTC_TIMING));           //Save to cache

      lpDALModeInfo->ulFlags |= ulRegExist;
      lpHDE->ulCachedDTIndex  = (i + 1) % MAX_CACHEDDTM;

      return TRUE;
    }
  }

  return FALSE;
}


/****************************Private*Routine*******************************\
*
* VOID vControllerSetMode()
*
* Performs all pre-mode, set mode, and adjustment, and post mode calls to
* the controller and displays involved in the set mode call.
*
* Notes: Function assumes the caller has already validate the mode
*        so the CRT and Displays used for the mode will all be supported.
*
\**************************************************************************/

VOID vControllerSetMode(
LPHW_DAL_EXTENSION lpHDE,
LPDEVMODE_INFO     lpMI,
LPDEVGCO           lpController,
ULONG              ulDisplays,
ULONG              ulDisplayOffset,
ULONG              ulDisplayPitch)
{
  LPDEVGCO       lpOtherController;
  LPDEVGDO       lpDisplay;
  LPDEVCLUT16    lpaGamma16;
  DEVCLUT        aGamma[256];       
  LPDEVCLUT      lpaGamma;          
  ULONG          ulDisplayTypes;
  ULONG          ulActiveDisplayCount;
  ULONG          i;
  ULONG          ulIndex;
  FIXEDPOINT     sBandwidth;
  //DEVMODE_INFO   sPanelNativeMode;
  DEVMODE_INFO   sModeInfo;
  EVENTINFO      sEventInfo;
  DAL_CRTC_TIMING sTiming;
  ULONG          ulDriverID;
  LPDRIVERDATA   lpDriverData;
  ULONG          ulGCOEventId = GCO_EVENT_DISABLEEXTDESKTOPMODE;

  // ensure the DAL does not attempt to set a bad mode to a GCO's controller,
  // this has happened before, so this code should catch failures
  // The mode parameter can be zero if there is no display connected to it (i.e. to reset controller).

  DALASSERT(((0 != lpMI->ulPelsWidth) || (0 == ulDisplays)), "vControllerSetMode - bogus mode width!");
  DALASSERT(((0 != lpMI->ulPelsHeight) || (0 == ulDisplays)), "vControllerSetMode - bogus mode height!");
  DALASSERT(((0 != lpMI->ulBitsPerPixel) || (0 == ulDisplays)), "vControllerSetMode - bogus mode bpp!");
  DALASSERT(((0 != lpMI->ulDisplayFrequency) || (0 == ulDisplays)), "vControllerSetMode - bogus mode refresh!");

  ZEROMEMORY(&sTiming, sizeof(DAL_CRTC_TIMING));
  // only call DDL when GCO_CALLDDLPPMODECHANGE is set.  This flag is set when
  // vControllerSetMode is called from DALSetMode or DALCWDDE_ControllerSetConfig.
  if (lpController->ulFlags & GCO_CALLDDLPPMODECHANGE)
  {
    // call PreModeChange
    vFillModeChangeInfo(lpHDE, lpMI, lpController, ulDisplays, &sEventInfo);
    sEventInfo.ulEvent = DAL_EVENT_CONTROLLERPREMODECHANGE;
    DDLEventNotification(lpHDE->hDDL, &sEventInfo);
  }
  //Reset the state Change flag
  lpController->ulStateChangeFlags =0;

  // Search through all the drivers to see which one owns this controller

  lpaGamma16 = NULL;    // in case no driver data is enabled
  ulDriverID = 0;       // ditto

  for (i = 0; i < MAX_NUMBER_CONTROLLERS; i++)
  {
    lpDriverData = (LPDRIVERDATA) &lpHDE->aDriverData[i];
    if (lpDriverData->ulFlags & DRIVERDATA_ENABLED)
    {
      if (lpHDE->aControllerMap[i] & VECTORFROMINDEX(lpController->ulController))
      {
        ulDriverID = i;
        if (lpDriverData->ulFlags & DRIVERDATA_USEGAMEGAMMA)
        {
          lpaGamma16 = lpDriverData->aGameGamma16;
        } else
        {
          lpaGamma16 = lpDriverData->aGamma16;
        }
      
        if((lpDriverData->ulFlags & DRIVERDATA_DDEXCLUSIVEMODE) ||
           (lpHDE->ulFlags & HDAL_INTERNALMODECHANGE))
        {
          lpMI->ulModeFlags |= DEVMODEFLAG_DDEXCLUSIVEMODE;
        }
        else
        {
          lpMI->ulModeFlags &= ~DEVMODEFLAG_DDEXCLUSIVEMODE;
        }

        break;
      }
    }
  }

  // find the pointer to the DAL's data structures for this controller
  // from it's index.

  if (lpController->lpHWED->ulFunctionHooks & GCO_HOOK_MODE_CHANGES)
  {
    // controller hooked the pre-mode, post mode callbacks, so
    // inform the controller that it's mode is about to change

    (*lpController->lpHWED->pfnPreModeChange)(lpController->hGCO,
                                              lpMI,
                                              lpController->ulController);
  }

  ulDisplayTypes = 0;
  ulActiveDisplayCount = 0;

  for (i = 0; i < lpHDE->ulDisplaysCount; i++)
  {
    // this display will be used for this mode.
    lpDisplay = (LPDEVGDO) &lpHDE->aDisplays[i];

    if (ulDisplays & VECTORFROMINDEX(i))
    {
      // get the count of displays on this controller;
      ulActiveDisplayCount++;

      // catch all displays which are participating in the mode call.

      if (lpDisplay->lpHWED->ulFunctionHooks & GDO_HOOK_MODE_CHANGES)
      {
        // display hooked notification of mode, changes, so notify
        // the display that the mode is changing.

        (*lpDisplay->lpHWED->pfnPreModeChange)(lpDisplay->hGDO, lpMI);
      }

      // for each display to be programmed in this mode, the DAL need
      // ensure the display is in a valid state for switching into the
      // new mode.

      if ((lpDisplay->ulController != lpController->ulController) &&
          (lpDisplay->ulController != GDO_WITHOUT_CONTROLLER))
      {
        // since this display will change controllers are part of the mode
        // being SET, the display need be turned off, and it's state be
        // programmed into a standard one.

        vSetBlanking(lpHDE, lpDisplay, lpDisplay->ulController, TRUE);

        // turn off the display on the controller it is being removed from

        lpOtherController = (LPDEVGCO) 
                            &lpHDE->aControllers[lpDisplay->ulController];
        lpDisplay->ulController = GDO_WITHOUT_CONTROLLER;
        lpOtherController->ulDisplays &= ~(VECTORFROMINDEX(i));

        if (lpOtherController->ulDisplays == 0)
        {
          // no displays remain active on this controller

          // I'm not completely sure this is the right thing to do, but
          // until someone proves it wrong .... it's done!  Basically taking
          // all displays away from the controller has the side effect of 
          // turning it off, and taking it away from the display driver.

          vControllerResetMode(lpHDE, lpOtherController);
        }

        // because this display changed controllers, DAL will need requery
        // it's per mode adjustment from the registry after the
        // next set mode call, so flag the display to do this. [sah]
        lpDisplay->ulFlags |= GDO_QUERYPERMODEADJUSTMENTS;
      }

      // or in each the types of displays connected to the controller
      // to inform the controller of the displays connected, hence
      // effecting how the clocks are programmed for the mode.

      ulDisplayTypes |= lpDisplay->lpHWED->ulDisplayType;
      
      vSetBlanking(lpHDE, lpDisplay, lpController->ulController, TRUE);

    } else if (lpController->ulDisplays & VECTORFROMINDEX(i))
    {
      // this display was active on the controller, but it is not longer
      // participaning on any controller hence release it's ownership.

      lpDisplay->ulController = (ULONG)GDO_WITHOUT_CONTROLLER;
      lpController->ulDisplays &= ~(VECTORFROMINDEX(i));

      // since the display is not participating in any mode blank it.

      vSetBlanking(lpHDE, lpDisplay, lpController->ulController, TRUE);

      // since the display is not participating in any mode turn it off.  

      vSetDisplayOff(lpHDE, (LPDEVGDO) lpDisplay);

    }
  }

  if ((lpController->ulFlags & GCO_EXPANSION) && 
      (ulDisplayTypes & HW_DISPLAY_TYPES_DIGITAL_MASK))
  {
    // if the controller has expansion enabled, specify this in the display
    // types flag to the GCO on SetMode function call only if an LCD
    // is connected

    ulDisplayTypes |= HW_DISPLAY_EXPANSION;
  }

  // Zero initialize the per GCO display detailed timing information
  ZEROMEMORY((LPVOID)lpController->sDisplayTimingInfo, 
              (sizeof(DAL_DISPLAY_TIMING_INFO)*MAX_NUMBER_DISPLAYS));

  for (i = 0; i < lpHDE->ulDisplaysCount; i++)
  {
    if (ulDisplays & VECTORFROMINDEX(i))
    {  
      // this display will be used for this mode.
      lpDisplay = (LPDEVGDO) &lpHDE->aDisplays[i];

      // This is a generic function that will report to GCO
      // some Display related information required to set mode.
      // For now it will be used to report wether DFP_EXPANSION
      // bit has to be set in a GCO set mode function
      // can do 
      lpDisplay->ulFlags &= ~GDO_PM_LOWREFRESHRATE_SET ; //Reset the PM flag.  
      lpDisplay->ulCurrentRefreshRate = lpDisplay->ulDefaultRefreshRate;
      ulDisplayTypes |= ulDisplaySetModeOptions(lpHDE, lpMI, lpDisplay);

      lpController->sDisplayTimingInfo[i].ulDisplayID = i;
      
      bDisplayGetExtDetailedTiming(lpHDE, lpDisplay, lpMI, (LPDAL_DISPLAY_TIMING_INFO)&lpController->sDisplayTimingInfo[i], FALSE);
      
    }
  }

  lpController->ulDisplayTypes = ulDisplayTypes;

  if (ulDisplays != 0)
  {
    if (lpHDE->bPowerPlaySupported)
    {
      ULONG ulReturnAction;
      
      // Get the current power state, BIOS or 2D might change it on resume.
      if (lpController->lpHWED->ulFunctionHooks2 & GCO_HOOK2_POWERPLAY)
      {
        (*lpController->lpHWED->pfnGetPowerState)(lpController->hGCO,
                                                  (LPULONG)&lpHDE->ulCurrentPowerState,
                                                  (LPULONG)&lpHDE->ulNumberOfPowerStates,
                                                  (LPDAL_ADAPTERPOWERSTATES)&lpHDE->sAdapterPowerStates);
      }

      MOVEMEMORY((LPDEVMODE_INFO)&sModeInfo,
                 (LPDEVMODE_INFO)lpMI,
                 sizeof(DEVMODE_INFO));

      ulSetPowerState(lpHDE, 
                      lpHDE->ulRequestedPowerState,                      
                      ulDisplayTypes,
                      sModeInfo,
                      (!(lpController->ulController == DAL_PRIMARY_CONTROLLER)),
                      (ulActiveDisplayCount > 1),
                      FALSE,
                      (LPULONG)&ulReturnAction);
    }

    // store the last mode the controller was in
    MOVEMEMORY((LPDEVMO

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色婷婷国产精品综合在线观看| 国产精品看片你懂得| 欧美主播一区二区三区美女| av一二三不卡影片| 成人app在线| 懂色中文一区二区在线播放| 国产在线视视频有精品| 激情小说亚洲一区| 久久 天天综合| 国产一区二区免费在线| 国产精品主播直播| 韩国女主播成人在线| 欧美中文字幕不卡| 久久久精品国产99久久精品芒果| 精品视频在线免费| 丁香亚洲综合激情啪啪综合| 美国毛片一区二区| 午夜欧美电影在线观看| 国产精品系列在线| 国产亚洲欧美中文| 欧美三级乱人伦电影| 成人激情视频网站| 日本不卡不码高清免费观看| 丝袜美腿亚洲一区二区图片| 亚洲成av人片一区二区| 丝袜a∨在线一区二区三区不卡| 亚洲精品五月天| 亚洲国产精品久久人人爱| 午夜影视日本亚洲欧洲精品| 日本三级亚洲精品| 精品一区二区三区在线视频| 国产一区在线不卡| 成人午夜看片网址| 在线一区二区观看| 日韩欧美国产三级电影视频| 国产欧美一区二区精品秋霞影院 | 色婷婷av久久久久久久| 欧美在线观看18| 欧美一区二区三区公司| 久久综合久久99| 亚洲三级在线看| 青青草成人在线观看| 国产99久久久精品| 在线看国产日韩| 日韩三区在线观看| 国产精品激情偷乱一区二区∴| 一区二区激情视频| 久久99国产精品久久99| 99精品在线观看视频| 正在播放亚洲一区| 国产精品日产欧美久久久久| 亚洲一区二区三区四区的| 精品一区二区久久| 色av成人天堂桃色av| 欧美va亚洲va| 一区二区三区美女| 国产麻豆9l精品三级站| 91精品办公室少妇高潮对白| www精品美女久久久tv| 亚洲综合999| 国产麻豆成人传媒免费观看| 欧美亚洲另类激情小说| 国产亚洲污的网站| 午夜激情久久久| 99久久久久免费精品国产| 日韩欧美一级二级| 一区二区三区中文字幕精品精品| 久久精品噜噜噜成人88aⅴ| 色视频成人在线观看免| 国产亚洲人成网站| 日本vs亚洲vs韩国一区三区二区| 99久久99久久综合| 久久久久久久综合日本| 伊人色综合久久天天| 国产精品一区一区三区| 欧美日韩aaaaaa| 欧美极品美女视频| 另类小说色综合网站| 精品视频1区2区| 中文字幕在线不卡一区| 国产精品一区在线观看你懂的| 欧美精品黑人性xxxx| 亚洲欧美福利一区二区| 成人丝袜18视频在线观看| 欧美成人激情免费网| 亚洲国产欧美在线人成| 精品处破学生在线二十三| 亚洲综合色在线| 97久久精品人人做人人爽 | 国产精品国产a级| 精品一区二区三区影院在线午夜 | 欧美久久久一区| 亚洲欧美另类久久久精品2019| 国产成人精品免费网站| 欧美精品一区男女天堂| 日本不卡一二三| 欧美另类z0zxhd电影| 一区二区免费在线播放| 91在线免费视频观看| 中文一区二区完整视频在线观看| 国产一区二区三区四区五区入口 | 国产精品香蕉一区二区三区| 日韩免费在线观看| 免费三级欧美电影| 日韩欧美色电影| 男男成人高潮片免费网站| 欧美另类高清zo欧美| 日韩制服丝袜av| 在线不卡免费欧美| 日韩精品成人一区二区三区| 欧美福利视频导航| 日韩激情一区二区| 日韩美女在线视频| 久久99精品国产麻豆不卡| 欧美电影免费观看高清完整版在 | 国产精品私人影院| 成人高清免费观看| 亚洲视频香蕉人妖| 在线观看网站黄不卡| 亚洲国产精品尤物yw在线观看| 欧美三级电影一区| 日本欧美在线观看| 日韩欧美区一区二| 国产精品一级片在线观看| 中文字幕不卡在线观看| av在线这里只有精品| 亚洲伦理在线免费看| 欧美色图激情小说| 蜜臂av日日欢夜夜爽一区| 久久久亚洲精品石原莉奈| 成人午夜私人影院| 男人的j进女人的j一区| 久久亚洲综合av| 不卡电影一区二区三区| 亚洲欧美电影院| 欧美二区乱c少妇| 国产精品亚洲а∨天堂免在线| 亚洲欧美在线aaa| 欧美美女黄视频| 黄色成人免费在线| 亚洲欧洲中文日韩久久av乱码| 欧美综合视频在线观看| 蜜臀久久99精品久久久久宅男| 久久精品一级爱片| 在线视频一区二区免费| 久久99九九99精品| 18欧美亚洲精品| 欧美一卡在线观看| 波多野结衣一区二区三区| 亚洲高清免费一级二级三级| 欧美电影免费观看高清完整版在| 成人夜色视频网站在线观看| 一区二区三区在线高清| 日韩你懂的在线播放| av在线一区二区三区| 日韩1区2区日韩1区2区| 国产精品国产三级国产普通话蜜臀| 欧美精品一卡两卡| 懂色av一区二区三区蜜臀 | 国产91丝袜在线观看| 亚洲一区二三区| 久久久欧美精品sm网站| 欧美性生活影院| 国产精品一区久久久久| 亚洲国产另类av| 中文字幕国产一区二区| 91精品国产91久久综合桃花 | 成人污污视频在线观看| 婷婷成人激情在线网| 国产精品你懂的| 日韩精品一区二区三区四区| 一本大道av伊人久久综合| 国产在线看一区| 午夜精品福利一区二区三区av | 中文字幕五月欧美| 日韩午夜在线观看视频| 91麻豆自制传媒国产之光| 国内精品免费**视频| 香蕉加勒比综合久久| 国产精品全国免费观看高清 | 国产精品久久久久aaaa樱花| 日韩写真欧美这视频| 在线观看网站黄不卡| 成人18视频日本| 色哟哟精品一区| 国产91清纯白嫩初高中在线观看 | 欧洲亚洲国产日韩| 成人精品免费看| 国产一区视频在线看| 蜜臀av一级做a爰片久久| 亚洲国产成人av| 亚洲日本一区二区| 国产精品少妇自拍| 欧美精品一区二区在线观看| 91精品综合久久久久久| 欧美亚洲国产一区在线观看网站| 99精品视频中文字幕| 粉嫩嫩av羞羞动漫久久久 | 欧美怡红院视频| kk眼镜猥琐国模调教系列一区二区 |