对cdc mbim装置的信息获取和操作

对cdc mbim设备的信息获取和操作

笔者最近参与研发的一个产品里使用到了cdc mbim调制解调器,需求方要求能够正常在产品里显示mbim的信号强度,由于该设备是以网卡形式存在于系统中的,并不同于传统的以串口形式接入的适配器形式,所以这里并无法使用对串口发送AT+CSQ的方式取得信号强度。


通过查找MSDN,发现:win8里增加了一个类Windows.Networking,但遗憾的是这个类只能在metro应用里使用,而我们的产品还是传统风格的,所以这个类是不符合需求的。

(PS:每当有问题查找资料的时候都先想用谷歌,可现在,谷歌压根打不开了,而百度压根是个废物,昨天也是头脑抽了风,在BING里搜索了下,竟然找到了需要的东西。。。在这里鄙视一下!)


BING里查找到时候,在MSDN上找到这么一个mbnapi的库,(参考:http://msdn.microsoft.com/en-us/library/windows/desktop/dd323166(v=vs.85).aspx )

可惜的是俺对C++仅懂个皮毛,还无法看懂这个说明,幸运的时强大的BING带着我又找到了一个interop.mbnapi.dll的文件,这个dll是将上述的mbnapi.h的文件封装成的。这么一来就能够满足我的要求了。


也不说了,直接上代码吧:

VB.NET的

    Private Class NetWorkAdapter

        'mbnapi的说明:http://msdn.microsoft.com/en-us/library/windows/desktop/dd323166(v=vs.85).aspx 

        Public Function GetSignal(guid As System.Guid) As Integer
            Dim mbnInfMgr As New MbnInterfaceManager
            Dim infMgr As IMbnInterfaceManager = DirectCast(mbnInfMgr, IMbnInterfaceManager)
            'string interfaceid = "{A9D0DFBC-C083-4EDE-B1FE-E7FC07116ACA}";
            Dim interfaceid As String = guid.ToString

            Try
                Dim inf As IMbnInterface = infMgr.GetInterface(interfaceid)

                'inf[0].InterfaceID;
                'IMbnRadio radio = (IMbnRadio)inf;
                Dim Signal As IMbnSignal = DirectCast(inf, IMbnSignal)

                GetSignal = Signal.GetSignalStrength()
            Catch ex As Exception
                GetSignal = -1 '-1表明是发生了错误,意味着并不支持cdc mbim设备
            End Try
        End Function
    End Class

本来我的代码是C#的,但VS里感觉封装COM类C#没有VB.NET方便,所以我将C#代码重写成了VB.Net的,若是需要C#的请自己去找工具转换。。。

上边的代码获取信号强度是依据本地连接的guid,在这里附上查找网络连接的guid的方法:

1、打开CMD或是powershell,推荐powershell(CMD界面太小了,复制的时候太麻烦)

2、输入getmac /v /s 127.0.0.1

3、输出的列表就是当前系统的所有网络连接(就是在本地连接文件夹里显示的),其中传输名称中的guid形式的字符串就是这个网络连接的guid值


好了,我就只提供这么多,因为我们的产品里只需要这个不需要操作,操作的话请参见api的说明文档,我连同api文件一起打包上传到csdn。。。

下载地址:http://download.csdn.net/detail/robake/8320631