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

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

?? camera.c

?? au1200的在wince5.0下的攝像頭驅(qū)動(dòng).
?? C
?? 第 1 頁 / 共 4 頁
字號(hào):
    return 0;
}

////////////////////////////////////////////////////////////////////////
//              Deinitialize Device
////////////////////////////////////////////////////////////////////////

BOOL
CAM_Deinit(
    DWORD hDeviceContext
    )
{
    DEVICE_CONTEXT *pDevice = (DEVICE_CONTEXT *) hDeviceContext;
    
    DEBUGMSG(ZONE_TRACE, (TEXT("CAM: CAM_Deinit\r\n")));

    if ( pDevice )
    {
        CAM_Cleanup(&pDevice->cam_base);
        Camera_pwr_down(pDevice);

        if (pDevice->hInterruptEvent != 0)
        {
            if (pDevice->dwSysintr != SYSINTR_NOP)
            {
                InterruptDisable(pDevice->dwSysintr);    // dissociate from the intr event
                InterruptDisconnect(pDevice->dwSysintr); // dissociate from the hwintr
            }
            CloseHandle(pDevice->hInterruptEvent);
        }

        if ( pCim )
        {
            MmUnmapIoSpace((PVOID) pCim, sizeof(AU1200_CIM));
            pCim = NULL;
        }

        if ( pBcsr )
        {
            MmUnmapIoSpace((PVOID) pBcsr, sizeof(BCSR));
            pBcsr = NULL;
        }

        // Free the device context.
        LocalFree(pDevice);
        pDevice = NULL;
    }

    return TRUE;
}

////////////////////////////////////////////////////////////////////////
//              Open Device
////////////////////////////////////////////////////////////////////////

DWORD
CAM_Open(
    DWORD hDeviceContext,
    DWORD AccessCode,
    DWORD Sharemode
    )
{
    DEBUGMSG(ZONE_TRACE, (TEXT("CAM: CAM_Open\r\n")));

    // **** TBD: Increment read/write access counts?
    // **** TBD: Enforce 1 write access?

    return(hDeviceContext);
}

////////////////////////////////////////////////////////////////////////
//              Close Device
////////////////////////////////////////////////////////////////////////

BOOL
CAM_Close(
    DWORD hOpenContext
    )
{
    DEBUGMSG(ZONE_TRACE, (TEXT("CAM: CAM_Close\r\n")));

    // **** TBD: Decrement read/write access counts?
    // **** TBD: If write access goes to 0, stop in-progress activity and
    //           power down camera?

    return(TRUE);
}

////////////////////////////////////////////////////////////////////////
//              Power Up
////////////////////////////////////////////////////////////////////////

void 
CAM_PowerUp(
    DWORD hDeviceContext
    )
{
    // **** TBD: Skip if camera not powered up?
    // **** TBD: Restart paused activity?

    bInPowerHandler = TRUE;
    Camera_pwr_up((DEVICE_CONTEXT*)hDeviceContext);
    bInPowerHandler = FALSE;
}

////////////////////////////////////////////////////////////////////////
//              Power Down
////////////////////////////////////////////////////////////////////////

void
CAM_PowerDown(
    DWORD hDeviceContext
    )
{
    // **** TBD: Pause any activity?

    bInPowerHandler = TRUE;
    Camera_pwr_down((DEVICE_CONTEXT*)hDeviceContext);
    bInPowerHandler = FALSE;
}

////////////////////////////////////////////////////////////////////////
//              I/O Control Device
////////////////////////////////////////////////////////////////////////

BOOL
CAM_IOControl(
    DWORD hOpenContext,
    DWORD dwCode,
    PBYTE pBufIn,
    DWORD dwLenIn,
    PBYTE pBufOut,
    DWORD dwLenOut,
    PDWORD pdwActualOut
    )
{
    DWORD actual = 0;
    DWORD result = ERROR_SUCCESS;

    DEVICE_CONTEXT *pDevice = (DEVICE_CONTEXT *) hOpenContext;

    if ( ! pDevice )
    {
        RETAILMSG(1, (TEXT("CAM_IOControl - Device context not allocated\r\n")));
        result = ERROR_GEN_FAILURE;
        goto error_exit;
    }

    DEBUGMSG(ZONE_TRACE,
              (TEXT("CAM: CAM_IOControl(0x%X, 0x%X, %d, 0x%X, %d, 0x%X)\r\n"),
                    dwCode, pBufIn, dwLenIn, pBufOut, dwLenOut, pdwActualOut));

    //////////////////////////
    // Process request.
    //////////////////////////

    switch ( dwCode )
    {
      case IOCTL_CAMERA_QUERY:
        // **** TBD: Define parameters
        // **** TBD: Verify parameters
        // **** TBD: Return whatever we are returning
        DEBUGMSG(ZONE_TRACE, (L" CAM QUERY Mode\r\n"));
        if (dwLenOut < sizeof(CameraMode)) {
            result = ERROR_INSUFFICIENT_BUFFER;
            goto error_exit;
        } else {
            CAMERA *pcam = pDevice->cam_base.cmos_camera;
            if (pcam) {
                CameraMode *pmode = (CameraMode*) pBufOut;
                pmode->mode = pcam->camera_resformat;
                memcpy(pmode->modename, pcam->camera_mode, sizeof(pcam->camera_mode));
                pmode->width = pcam->frame_width;
                pmode->height = pcam->frame_height;
                pmode->nPlanes = pcam->dbdma_channel;
                actual = sizeof(*pmode);
            } else {
                // no configuration has been set so there's nothing to report
                result = ERROR_NOT_CONNECTED; // for lack of a better choice
                goto error_exit;
            }
        }
        break;

      case IOCTL_CAMERA_CONFIGURE:
      {
          int resmode, mode_index;

          // BufIn is an int, identifying the camera mode to configure.
          // A list of modes is enumerated in camera.h.
          // Only modes 1 through 7 are known to work yet.
          if (dwLenIn != sizeof(int)) {
              result = ERROR_INVALID_DATA;
              goto error_exit;
          }
          memcpy(&resmode, pBufIn, sizeof(int));
          for (mode_index=0; mode_index<NUM_CAMERA_MODES; ++mode_index)
              if (resmode == CameraModes[mode_index].camera_resformat)
                  break;
          if (mode_index == NUM_CAMERA_MODES) {
              result = ERROR_INVALID_INDEX;
              goto error_exit;
          }
          DEBUGMSG(ZONE_TRACE, (L" CAM CONFIGURE Mode %d => Index %d\n", resmode, mode_index));

          pDevice->dwCurrentMode = mode_index;
          pDevice->cam_base.cmos_camera = &CameraModes[mode_index];

          /* Configure CMOS Camera*/
          if (!pDevice->bPowerIsOn) {
              DEBUGMSG(ZONE_TRACE, (L" CAM CONFIGURE turning camera power on\n"));
              Camera_pwr_up(pDevice);
          }
          pCim->enable &= ~CIM_ENABLE_EN;
          if (Camera_Config(&pDevice->cam_base) == 0) {
              Camera_pwr_down(pDevice);
              Sleep(1);
              Camera_pwr_up(pDevice);
              Sleep(6);
          }  else {
              result = ERROR_GEN_FAILURE;
          }
      }
      break;

      case IOCTL_CAMERA_CAPTURE:
      {
          CAMERA* pcam = pDevice->cam_base.cmos_camera;
          DWORD camera_status;
          PMDL mdl[MAX_DBDMA_CHANNEL]; // hold the MDLs until the capture completes

          if (pcam == 0) {
              // unconfigured cameras cannot take snapshots!
              result = ERROR_NOT_CONNECTED; // would prefer NOT_CONFIGURED if it existed.
              goto error_exit;
          }
          DEBUGMSG(ZONE_TRACE, (L"CAM CAPTURE: Camera Array Index # %d : %s (%d x %d = %d)\r\n",
                               pDevice->dwCurrentMode,
                               pcam->camera_mode,
                               pcam->frame_width,
                               pcam->frame_height,
                               pcam->frame_width * pcam->frame_height));

          // Fetch and validate parameters
          if (((DWORD)pBufOut & 3) != 0) {
              // bad buffer alignment!
              result = ERROR_INVALID_DATA;
          }
          if (dwLenOut < pcam->frame_width*pcam->frame_height) {
              result = ERROR_INSUFFICIENT_BUFFER;
          }
          if (result != ERROR_SUCCESS)
              goto error_exit;

          // Make sure there is no stray interrupt pending
          while (WaitForSingleObject(pDevice->hInterruptEvent, 0) == WAIT_OBJECT_0)
          {
              pCim->instat = 0x1ff; // ack all intrs; don't care what they are.
              InterruptDone(pDevice->dwSysintr);
          }

          // Setup the DMA engine so we point directly to the user's buffer
          {
              int i;
              DWORD count = 0;
              for (i=0; i<pcam->dbdma_channel; ++i) {
                  mdl[i] = MmCreateMdl(NULL, pBufOut+count, pDevice->cam_base.nTransferSize[i]);
                  if (mdl[i] == NULL) {
                      RETAILMSG(1, (L"CAM CAPTURE: Cannot allocate a memory descriptor list\r\n"));
                      while (i > 0) {
                          MmFreeMdl(mdl[--i]);
                      }
                      goto error_exit;
                  }
                  count += pDevice->cam_base.nTransferSize[i];
                  mdl[i]->Next = 0;  // necessary? (copied from sample code)
                  HalSetupMdlDMA(pDevice->cam_base.ChannelArray[i], mdl[i], TRUE);
              }
              for (i=0; i<pcam->dbdma_channel; ++i) {
                  HalStartMdlDMA(pDevice->cam_base.ChannelArray[i]);
              }
          }
#ifdef BLANKSCREEN // this alleviates memory bus contention while streaming from the camera
          { DWORD oldlcd = *(DWORD*)0xb5000024; *(DWORD*)0xb5000024 = 0;
#endif

          Capture_Image(); // trigger the snapshot
          DEBUGMSG(ZONE_TRACE, (L"CAM CAPTURE:Status Reg %x Capture Reg %x IntStat %x\r\n",
                               pCim->stat, pCim->capture, pCim->instat));

          // wait for the snapshot to complete.
          camera_status = 0;
          do {
              DWORD t;
              WaitForSingleObject(pDevice->hInterruptEvent, INFINITE);
              t = pCim->instat; // perform only one read
              camera_status |= t; // and remember that the condition occurred
              pCim->instat = t; // ack the interrupt/s
              InterruptDone(pDevice->dwSysintr);
          } while ( ! (camera_status & CIM_INTEN_CD) ); // repeat until done

          DEBUGMSG(ZONE_TRACE, (L"CAM CAPTURE: cleaning\r\n"));
#ifdef BLANKSCREEN
          *(DWORD*)0xb5000024 = oldlcd; }
#endif

          {
              int i;
              DWORD count;
              for (i=0; i<pcam->dbdma_channel; ++i) {
                  HalStopMdlDMA(pDevice->cam_base.ChannelArray[i], &count);
                  DEBUGMSG(ZONE_TRACE, (L"CAM CAPTURE: got %d bytes on channel %d\r\n", count, i));
                  HalCompleteMdlDMA(pDevice->cam_base.ChannelArray[i], mdl[i]);
                  MmFreeMdl(mdl[i]);
                  actual += count;
              }
          }

          DEBUGMSG(ZONE_TRACE, (L"CAM CAPTURE:Status Reg %x Capture Reg %x IntStat %x\r\n",
                                   pCim->stat, pCim->capture, camera_status));
          DEBUGMSG(ZONE_TRACE, (L"CAM CAPTURE: Snapped %d bytes\r\n", actual));
      }
      break;

      default:
        result = ERROR_NOT_SUPPORTED;
        break;
    }

error_exit:

    if ( pdwActualOut )
    {
        *pdwActualOut = actual;
    }
    if ( result != ERROR_SUCCESS )
    {
        SetLastError(result);
    }

    return(result == ERROR_SUCCESS);
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲视频在线一区二区| 欧美日韩精品一区二区三区蜜桃 | 日韩视频在线一区二区| 亚洲成a人v欧美综合天堂下载| 色久综合一二码| 亚洲国产视频a| 91精品黄色片免费大全| 久久99国产精品尤物| 欧美精品一区二区三区蜜桃| 国产成人av在线影院| 国产精品国产三级国产| 欧洲一区在线观看| 日本成人中文字幕在线视频| 亚洲精品一区二区在线观看| 粉嫩高潮美女一区二区三区| 亚洲精品国产精华液| 欧美日本视频在线| 国产又黄又大久久| 亚洲天堂精品在线观看| 欧美精品1区2区3区| 精品写真视频在线观看| 国产精品久久久久国产精品日日| 99re热这里只有精品视频| 午夜精品一区二区三区三上悠亚| 欧美mv日韩mv亚洲| 99久久精品国产麻豆演员表| 日韩高清在线不卡| 国产婷婷精品av在线| 欧美影院精品一区| 国产成人在线看| 亚洲午夜久久久久| 久久久国际精品| 欧美在线视频你懂得| 国产美女av一区二区三区| 一区二区三区在线视频观看58| 日韩丝袜情趣美女图片| 色综合久久久久综合体| 国产在线不卡一卡二卡三卡四卡| 亚洲精品视频一区| 精品精品欲导航| 欧洲国产伦久久久久久久| 狠狠色丁香久久婷婷综| 亚洲成av人片在线| 椎名由奈av一区二区三区| 精品国产一区二区三区久久久蜜月| 色国产精品一区在线观看| 韩国成人福利片在线播放| 亚洲一区二区三区三| 国产精品美女久久久久高潮| 日韩一区二区免费在线观看| 色激情天天射综合网| 国产精品资源在线观看| 日本欧美一区二区三区乱码| 一区二区在线观看视频在线观看| 欧美国产禁国产网站cc| 日韩女同互慰一区二区| 欧美日韩国产高清一区| 91网页版在线| 豆国产96在线|亚洲| 久久国产婷婷国产香蕉| 婷婷激情综合网| 亚洲免费色视频| 欧美激情在线观看视频免费| 精品久久久久99| 欧美成人一级视频| 91精品国产综合久久久蜜臀粉嫩| 色婷婷av久久久久久久| av影院午夜一区| 欧美日韩二区三区| 99免费精品视频| 成人精品国产福利| 盗摄精品av一区二区三区| 国产在线精品一区二区夜色| 麻豆91免费看| 男女男精品网站| 免费在线观看一区| 日产国产欧美视频一区精品| 男女激情视频一区| 美女一区二区在线观看| 蜜臀精品久久久久久蜜臀| 日本va欧美va欧美va精品| 三级精品在线观看| 青椒成人免费视频| 麻豆精品视频在线| 精品一区二区影视| 国产精品香蕉一区二区三区| 国产福利视频一区二区三区| 国产91清纯白嫩初高中在线观看| 福利电影一区二区| 成a人片国产精品| 91一区二区三区在线观看| 在线一区二区三区四区五区| 精品视频在线免费看| 7777精品伊人久久久大香线蕉的| 欧美一区二区精美| 久久综合成人精品亚洲另类欧美 | 欧美三级日韩在线| 欧美色综合影院| 欧美一卡2卡三卡4卡5免费| 日韩视频免费观看高清完整版在线观看 | 国产精品女主播av| 亚洲免费观看高清完整| 亚洲午夜一区二区三区| 日韩av一级片| 国产精品一级黄| 色综合咪咪久久| 欧美日韩电影一区| 欧美精品一区二区久久久| 国产欧美一区视频| 一区二区视频在线| 欧美a级理论片| 成人午夜在线播放| 欧美日韩国产精选| 国产日韩欧美亚洲| 亚洲一区二区中文在线| 久久国产剧场电影| jizzjizzjizz欧美| 欧美一区二区福利在线| 国产精品超碰97尤物18| 视频一区视频二区中文| 国产91对白在线观看九色| 欧美在线制服丝袜| 国产色产综合产在线视频| 一区二区三区在线观看视频| 理论片日本一区| 91国偷自产一区二区三区观看| 欧美变态口味重另类| 亚洲精品五月天| 国产精品资源站在线| 欧美日韩视频一区二区| 国产丝袜欧美中文另类| 日本怡春院一区二区| 99re这里只有精品首页| www国产成人免费观看视频 深夜成人网| 亚洲人123区| 精品系列免费在线观看| 欧美日韩高清影院| 国产精品女同互慰在线看| 蜜桃精品视频在线| 欧美三日本三级三级在线播放| 国产日韩精品一区二区浪潮av| 日日骚欧美日韩| 91传媒视频在线播放| 国产精品每日更新在线播放网址 | caoporen国产精品视频| 欧美大白屁股肥臀xxxxxx| 亚洲曰韩产成在线| av一区二区三区在线| 国产偷v国产偷v亚洲高清| 欧美在线你懂得| 国产精品狼人久久影院观看方式| 免费日韩伦理电影| 欧美日韩激情一区| 一区二区三区资源| 91麻豆国产福利精品| 国产精品萝li| 高清av一区二区| 欧美精品一区二区三区高清aⅴ | 亚洲人成网站影音先锋播放| 国产69精品一区二区亚洲孕妇| 久久综合五月天婷婷伊人| 视频一区二区中文字幕| 欧美日韩电影在线| 午夜视频一区二区三区| 91黄色免费网站| 亚洲综合免费观看高清完整版| 91亚洲国产成人精品一区二区三| 国产精品水嫩水嫩| 99久久婷婷国产综合精品| 国产精品久久影院| a美女胸又www黄视频久久| 国产精品久久久久久福利一牛影视 | 成人综合激情网| 日本一区二区三区dvd视频在线| 国产乱理伦片在线观看夜一区| 久久精品亚洲麻豆av一区二区| 国内欧美视频一区二区| 久久久另类综合| 国产黄色91视频| 国产精品久久久久久亚洲毛片 | 日本韩国欧美三级| 亚洲综合免费观看高清完整版在线| 欧美影院一区二区三区| 午夜久久久影院| 欧美一区二区播放| 国模冰冰炮一区二区| 国产亚洲欧美日韩日本| 成人免费黄色在线| 亚洲同性同志一二三专区| 欧美伊人精品成人久久综合97| 午夜电影网亚洲视频| 日韩精品一区二| 福利一区二区在线| 亚洲久草在线视频| 777色狠狠一区二区三区| 久久99精品国产麻豆婷婷洗澡| 国产日韩欧美电影| 色综合视频一区二区三区高清| 亚洲va在线va天堂| 久久久久青草大香线综合精品|