none
关于非标准流驱动接口如何调用的问题 RRS feed

  • 问题

  • wince的应用程序和驱动之间通过标准的 ReadFile xxx_read WriteFile xxx_write ... 来进行数据交互 现在有一个项目 对方提供了bsp 他们的摄像头驱动中已经封装了标准的 xxx_read xxx_write xxx_init 另外他们还自定义了一些非标准的驱动接口 xxx_startsensor xxx_stopsensor ... 等等类似的非标准的驱动接口 那么 我在应用程序中应该用什么函数调用这些驱动接口呢?怎么让操作系统认识这些非标准的驱动接口呢 项目很紧急 麻烦各位指点指点 谢谢
    2011年8月19日 8:12

答案

  • 对于你的问题1,2我不是很清楚,因为我本身没有写过camera driver,但是有一点可以确定,DirectShow中肯定调用了CAM_open 这可能是在FindFirstDevice中,也有可能在FindNextDevice,或者别的函数中。你可以在你的DirectShow Filter中调用这些API,并且在CAM_open 中打印出debug message就可以知道了。

    对于问题3,有可能还是需要考虑这些驱动,因为vendor给你的并不一定支持所有的Camera feature,比如输出格式,frame rate之类的。另外这个camera通过什么接口接在你的板子上,也有可能和Vendor的情况不一样。所以我建议你最好先咨询一下Vendor,看看他们的driver到底支持些什么feature

    • 已标记为答案 Rain_ning 2011年8月24日 1:23
    2011年8月23日 5:53
    版主

全部回复

  • 一个办法是把这些非标准函数的调用放在XXX_IoControl函数中,然后定义一系列Io Control Code。在你的App中可以通过DeviceIoControl函数,调用这些新定义的Io Control Code,实现对这些非标准函数的调用。
    2011年8月20日 23:07
    版主
  • 请问版主 现在项目中给的BSP的 CAPTURE文件夹  他的cpp给出的接口是

    PVOID PDD_Init

    DWORD PDD_DeInit

    DWORD PDD_Open

    DWORD PDD_Close

    DWORD PDD_GetAdapterInfo( LPVOID PDDContext, PADAPTERINFO pAdapterInfo )

    DWORD PDD_HandleVidProcAmpChanges( LPVOID PDDContext, DWORD dwPropId, LONG lFlags, LONG lValue)

    DWORD PDD_HandleCamControlChanges(xxxxxxx)

    。。。

    以上省略号中都是PDD_xxxxx(xxxxx)

    像这种摄像头的驱动 我该如何在应用程序中调用这些接口呢 麻烦版主

    并没有PDD_IoControl(xxxx)

    您的意思是让我自己单独写一份IoControlCode  在App中通过DeviceIoControl函数来调用么

    对方已经给出了BSP中为什么这些

    DWORD PDD_GetAdapterInfo( LPVOID PDDContext, PADAPTERINFO pAdapterInfo )

    DWORD PDD_HandleVidProcAmpChanges( LPVOID PDDContext, DWORD dwPropId, LONG lFlags, LONG lValue)

    DWORD PDD_HandleCamControlChanges(xxxxxxx)

    函数后面会跟着从应用程序传过来得参数呢 我感觉还是像有些可以用的应用程序函数接口来对应这些驱动函数接口

    2011年8月21日 7:45
  • 哦,原来你的driver使用MDD, PDD 构架,我原本以为你拿到的是自定义的基于标准Stream driver的驱动程序。 MS在WinCE里面对一些特定的driver定义了相应的MDD (Microsoft Device Driver)和PDD(Platform dependent driver)结构。一般来说MDD代码是通用的,跟硬件无关,它负责处理一些跟特定类型设备(比如Camera)相关的逻辑。PDD代码则实际操作硬件,并向MDD提供predefined的借口函数。 具体到你的Camera,可以参考这篇文章 http://msdn.microsoft.com/en-us/library/ee482515.aspx
    2011年8月22日 5:04
    版主
  • 哦 老师 我现在才弄懂  原来我这个是MDD PDD架构 那些非标准的PDD_xxx是为了支持DirectShow写的

    那我在基于directshow写camera应用程序的时候

    是不是CreateFile ReadFile WriteFile DeviceIoControl都已经被封状到DirectShow的框架里面了 我看他们写的应用程序里好象都没有出现过CreateFile 而是FindFirstDevice

    问题1:是不是DirectShow在使用FindFirstDevice时就会去调用CreateFile 然后就传到OS调用驱动中的CAM_open 然后传到PDD_open 最终打开设备

    问题2:我查了好多资料 就是没有说这些驱动是如何被上层调用到的  我想知道这具体是怎么个过程

    问题3:是不是我不需要考虑下面的这些驱动 因为对方已经提供好驱动了 我就直接在DirectShow里的接口是么

    2011年8月22日 7:27
  • 对于你的问题1,2我不是很清楚,因为我本身没有写过camera driver,但是有一点可以确定,DirectShow中肯定调用了CAM_open 这可能是在FindFirstDevice中,也有可能在FindNextDevice,或者别的函数中。你可以在你的DirectShow Filter中调用这些API,并且在CAM_open 中打印出debug message就可以知道了。

    对于问题3,有可能还是需要考虑这些驱动,因为vendor给你的并不一定支持所有的Camera feature,比如输出格式,frame rate之类的。另外这个camera通过什么接口接在你的板子上,也有可能和Vendor的情况不一样。所以我建议你最好先咨询一下Vendor,看看他们的driver到底支持些什么feature

    • 已标记为答案 Rain_ning 2011年8月24日 1:23
    2011年8月23日 5:53
    版主
  • http://msdn.microsoft.com/en-US/library/ee486493(v=WinEmbedded.60).aspx

    这篇文章也许更有助于了解DirectShow是怎么call camera driver的。

    2011年8月23日 6:54
    版主
  • 十分感谢gyren老师的回复指导 我知道了大概的开发架构 我在问问vendor具体是怎么样的开发接口 谢谢gyren老师

    2011年8月24日 1:23
  • 据我所知,一个比较常用的接camera的接口是, ISI (Image Sensor Interface)

    2011年8月26日 5:19
    版主