2763|5

68

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

关于用DriverStudio如何开发一个USB摄象头驱动 [复制链接]

我有一部Windows Mobile手机,我想把上面的USB 摄象头变成电脑上的摄象头,自己写驱动,现在手机侧的驱动和程序已经做好,可以通过USB,端点0和1与PC机批传输通信,我在调试的时候使用的PC上的标准USBIO驱动,在PC上写了个应用可以直接预览到手机上的视频,但是我想做个PC上驱动程序的形式,这样就可以在QQ等聊天工具里调用,我看了DriverStudio相关教程,写了一个USB驱动也可以获取手机传来的USB视频流,另外我还看了DriverStudio里面的关于Stream的虚拟摄象头的例子,还有一个CAM1394的例子,但是还是不知如何把Stream和USB驱动整合在一起变成一个USB摄象头驱动,高手帮帮忙啊

我尝试在Stream例子的KStreamMinidriver类的OnCreateAdapter方法中创建一个PNP的USB传输类,但是一插入手机电脑就蓝屏了,我觉得这样开发的思路是不是有问题,请高手指点一下!   

NTSTATUS VideoCaptureDriver::OnCreateAdapter(
    PORT_CONFIGURATION_INFORMATION* pConfigInfo,
    PVOID AdapterStorage,
    PHW_STREAM_REQUEST_BLOCK pSrb   
    )
{
    NTSTATUS ReturnValue = STATUS_SUCCESS;

    T << TraceInfo << "VideoCaptureDriver::OnCreateAdapter -- Start\n";

    // -- since our test driver DOESN'T have hardware, this BETTER be 0! --
    if (pConfigInfo->NumberOfAccessRanges != 0)
    {
        T << TraceError << "VideoCaptureDriver::OnCreateAdapter -- Illegal port configuration info\n";
        return (pSrb->Status = STATUS_NO_SUCH_DEVICE);
    }

    // -- construct the adapter using the AdapterStorage memory allocated
    //        by the Class Driver --
    m_pAdapter = new (AdapterStorage) VideoCaptureAdapter(this, pConfigInfo);
   
    // -- initialize the adapter object and its member streams! --
    if (NULL != m_pAdapter)
        m_pAdapter->Initialize();
    else
    {
        T << TraceError << "VideoCaptureDriver::OnCreateAdapter -- Adapter constructor failed!\n";
        ReturnValue = STATUS_IO_DEVICE_ERROR;   
    }

    T << TraceInfo << TraceHex << "VideoCaptureDriver::OnCreateAdapter -- End. Status is " << (ULONG)ReturnValue << "\n";
    if (ReturnValue!=STATUS_SUCCESS) return ReturnValue;
    UsbTransferDevice * pDevice = new (
            NULL,
            FILE_DEVICE_UNKNOWN,
            NULL,
            0,
            DO_DIRECT_IO
            )
        UsbTransferDevice(Pdo, m_Unit);

    if (pDevice == NULL)
    {
        T << "Error creating device UsbTransferDevice" << (ULONG) m_Unit << EOL;
        return STATUS_INSUFFICIENT_RESOURCES;
    }

    NTSTATUS status = pDevice->ConstructorStatus();

    if ( !NT_SUCCESS(status) )
    {
        T << "Error constructing device UsbTransferDevice" << (ULONG) m_Unit << " status " << (ULONG) status << EOL;
        delete pDevice;
    }
    else
    {
        m_Unit++;
    }

    return status;



}

最新回复

这个得用RAPI吧?  详情 回复 发表于 2009-10-14 08:36
点赞 关注

回复
举报

68

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
这个我也不知道,呵呵,我觉得你已经是高手了,真的。支持
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
学习......
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

4
 
up
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

5
 
施主努力
 
 
 

回复

45

帖子

0

TA的资源

一粒金砂(初级)

6
 
这个得用RAPI吧?
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表