65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 C# 检测 USB 调制解调器设备

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.17/5 (9投票s)

2015 年 7 月 3 日

GPL3

2分钟阅读

viewsIcon

48912

downloadIcon

5868

使用 C#.NET 检测 USB 调制解调器设备

引言

本示例演示了使用 C# 与 USB 调制解调器通信。它检测并列出 USB 调制解调器连接的端口,使用 AT 命令与 USB 调制解调器通信,并检索 USB 设备的的基本信息。您可以使用 WMI 代码生成器工具生成 VBScript、C# 和 VB.NET 中的 WMI 查询脚本。

要下载 WMI,请点击 此处

示例截图

示例中使用的命令

以下是本示例中使用的命令:

  1. AT+CGMM
    获取 USB 型号标识
    产品名称:EC122
    输入:AT+CGMM
    输出:EC122
  2. AT+CGMR:获取调制解调器的固件版本
  3. AT+CGSN:获取调制解调器的 IMEI
  4. AT+CIMI:获取 IMSI 号码
  5. AT+CGMI:获取 USB 型号的制造商
  6. AT:获取调制解调器的注意

代码段

  1. 检测并列出 USB 调制解调器连接的端口名称。这里,我们使用 WMI 查询来获取 USB 调制解调器连接的端口名称。
        ManagementObjectSearcher searcher = new ManagementObjectSearcher
        ("root\\CIMV2", "SELECT * FROM Win32_PnpEntity ");
        ManagementObjectSearcher searcher1 = new ManagementObjectSearcher
        ("root\\CIMV2", "SELECT * FROM Win32_POTSModem "); 
  2. 下面所示的代码段完成了打开适当的端口并使用 AT 命令与其通信、将数据元素排列在数组中以及显示数据的任务。这里,我们使用函数 WriteLine() 将数据写入输出缓冲区,并使用 ReadExisting() 从输入缓冲区读取数据。成功读取数据后,我们使用 Array 来排列数据元素。
        sp.PortName = (string)comboBox1.SelectedItem;
        if (!sp.IsOpen)
        {
            sp.Open();
            
            if (sp.IsOpen)
            {
                MessageBox.Show("Connected to Port" + portname);
                
                sp.WriteLine("AT");           //Get the modem's attention
                sp.WriteLine("ATI");          // Get All Manufacturer Info
                sp.WriteLine("AT+CGMM");      // Get USB Model
                sp.WriteLine("AT+CGMI");      // Manufacturer
                sp.WriteLine("AT+CIMI");      // Get SIM IMSI number
                sp.WriteLine("AT+CGSN");      //Get modem IMEI
                sp.WriteLine("AT+CGMR");      // Print firmware version of the modem                   
            }
        }
        
        t = sp.ReadExisting()).Contains("OK")
        
        string[] f = new string[100];
        string[] c = t.Split(z);
        int m = 0;
        
        for(int i = 0; i < c.Length; i++)
            {
                if (!(c[i].Equals("")))
                    {
                        f[m] = c[i];
                        m++;
                    }
            }
            
            // Display the Data
            
            if ((f[i].Equals("AT+CGMI")))
                {
                    label6.Text = f[i + 1]; // Manufacturer
                }
                if ((f[i].Equals("AT+CIMI")))
                {
                    label7.Text = f[i + 1]; // Get SIM IMSI number
                }
                if ((f[i].Equals("AT+CGSN")))
                {
                    label8.Text = f[i + 1]; //Get modem IMEI
                }
                if ((f[i].Equals("AT+CGMM")))
                {
                    label11.Text = f[i + 1]; // Get Model of USB 3G
                }
                if ((f[i].Equals("AT+CGMR")))
                {
                    label12.Text = f[i + 1]; // Print firmware version of the modem
                }

工作原理

Visual Studio 2008 用于开发此代码。

  1. 单击“查找端口”按钮后,它将列出 USB 调制解调器连接的端口名称。
  2. 从下拉列表中选择适当的端口。
  3. 然后单击“连接并获取调制解调器信息”按钮以获取来自调制解调器的信息。
  4. 它检索诸如制造商、IMSI 号码、IMEI 号码、USB 设备的型号、调制解调器连接的端口以及固件版本等信息。
  5. 单击“断开连接”按钮后,它将断开端口与调制解调器的连接。
  6. 单击“退出”按钮后,它将退出应用程序。

此代码在 EC122 CDMA USB 调制解调器上运行良好。

© . All rights reserved.