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

.NET 手机通信库 (第一部分) - 获取手机设置

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.79/5 (29投票s)

2006年12月5日

CPOL

2分钟阅读

viewsIcon

165418

downloadIcon

5388

使用 AT 命令与 GSM 调制解调器手机通信

Sample Image - phoneat.jpg

引言

本文介绍了一种使用 AT 命令与手机通信的方法。通常,兼容 GSM 的手机都内置了一个调制解调器,我们可以使用 AT 命令与其通信。AT 命令集在所有手机制造商(包括诺基亚、索尼爱立信、西门子和摩托罗拉)之间应该是通用的,尽管存在细微的差异。

在本文中,我将使用一个开源的 .NET 手机通信库来向您展示与手机通信的各种方法。该库可在 此处 获取。

入门

在我们可以与 GSM 手机通信之前,必须首先建立连接。连接可以是串行、蓝牙或红外。只要我们可以连接到手机,就可以。

在本文中,我建立了与手机的蓝牙连接。首先,我在我的笔记本电脑和诺基亚手机之间建立配对关系,然后在我的手机上选择蓝牙串行端口服务。配置可能因您的蓝牙软件和调制解调器驱动程序而异。如果一切正常,您应该能够在设备管理器中看到配置的蓝牙调制解调器。 成功的配置将显示以下内容

请注意,在我的配置中,配置的 COM 端口是 COM9,波特率为 115200。这些设置将用于连接到手机。

测试配置

设置好蓝牙连接后,我们可以使用超级终端尝试发送 AT 命令,以确保连接正常。

如您所见,AT 命令以“AT”开头。例如,“ATE1”表示回显本地键入的命令,“AT+CGMM”显示手机型号,“AT+CSCA?”显示手机中配置的短信中心号码。

如果现在一切正常,您可以使用本文附带的示例代码来检索各种手机设置。结果将类似于本文顶部显示的屏幕截图。请注意,不同的手机可能支持不同的 AT 命令集。某些 AT 命令可能在某些手机上不可用。

解决方案中的代码非常简单明了。它使用了开源库 atSMS 通过发送 AT 命令来检索各种手机配置。您可以阅读文档和提供的示例中可用的 API 列表。

  If cboComPort.Text = String.Empty Then
            MsgBox("COM Port must be selected", MsgBoxStyle.Information)
            Return
        End If

        Dim oGsmModem As New GSMModem

        oGsmModem.Port = cboComPort.Text

        If cboBaudRate.Text <> String.Empty Then
            oGsmModem.BaudRate = Convert.ToInt32(cboBaudRate.Text)
        End If

        If cboDataBit.Text <> String.Empty Then
            oGsmModem.DataBits = Convert.ToInt32(cboDataBit.Text)
        End If

        If cboStopBit.Text <> String.Empty Then
            Select Case cboStopBit.Text
                Case "1"
                    oGsmModem.StopBits = Common.EnumStopBits.One
                Case "1.5"
                    oGsmModem.StopBits = Common.EnumStopBits.OnePointFive
                Case "2"
                    oGsmModem.StopBits = Common.EnumStopBits.Two
            End Select
        End If

        If cboFlowControl.Text <> String.Empty Then
            Select Case cboFlowControl.Text
                Case "None"
                    oGsmModem.FlowControl = Common.EnumFlowControl.None
                Case "Hardware"
                    oGsmModem.FlowControl = Common.EnumFlowControl.RTS_CTS
                Case "Xon/Xoff"
                    oGsmModem.FlowControl = Common.EnumFlowControl.Xon_Xoff
            End Select
        End If

        Try
            oGsmModem.Connect()
        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Critical)
            Return
        End Try

        Try
            txtRevision.Text = oGsmModem.Revision
        Catch ex As Exception
            txtRevision.Text = "Not supported"
        End Try

        Try
            txtIMSI.Text = oGsmModem.IMSI
        Catch ex As Exception
            txtIMSI.Text = "Not supported"
        End Try

        Try
            txtIMEI.Text = oGsmModem.IMEI
        Catch ex As Exception
            txtIMEI.Text = "Not supported"
        End Try

        Try
            txtModel.Text = oGsmModem.PhoneModel
        Catch ex As Exception
            txtModel.Text = "Not supported"
        End Try

        Try
            txtManufacturer.Text = oGsmModem.Manufacturer
        Catch ex As Exception
            txtManufacturer.Text = "Not supported"
        End Try

     

        Try
            txtSMSC.Text = oGsmModem.SMSC
        Catch ex As Exception
            txtSMSC.Text = "Not supported"
        End Try


        Try
            Dim rssi As Rssi = oGsmModem.GetRssi
            txtSignal.Text = rssi.Current & " of " & rssi.Maximum
        Catch ex As Exception
            txtSignal.Text = "Not supported"
        End Try

        Try
            Dim storages() As Storage = oGsmModem.GetStorageSetting
            Dim i As Integer
            txtSupportedStorage.Text = String.Empty
            For i = 0 To storages.Length - 1
                Dim storage As Storage = storages(i)
                txtSupportedStorage.Text += storage.Name & "(" &_
                    storage.Used & "/" & storage.Total & "), "
            Next
        Catch ex As Exception
            txtSupportedStorage.Text = "Not supported"
        End Try

        Try
            Dim loc As Location = oGsmModem.GetLocation
            txtLocation.Text = "Cell Id: " & loc.CellID & _
                 ", MNC: " & loc.MNC & ", MCC: " & _
                 loc.MCC & ", LAI: " & loc.LAI
        Catch ex As Exception
            txtLocation.Text = "Not supported"
        End Try

        Try
            txtPhoneNumber.Text = oGsmModem.MSISDN
        Catch ex As Exception
            txtPhoneNumber.Text = "Not supported"
        End Try

        Try
            Dim battery As Battery = oGsmModem.GetBatteryLevel
            txtBattery.Text = battery.BatteryLevel & "/" & _
                              battery.MaximumLevel & "(Charging: " &_
                              battery.BatteryCharged & ")"
        Catch ex As Exception
            txtBattery.Text = "Not supported"
        End Try

在未来的文章中,我将向您展示如何使用 AT 命令和开源库发送 ASCII 和 Unicode 短信。敬请期待...

© . All rights reserved.