⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pduencoder.vb

📁 通过串口发送短信的模块,采用vb.net编写
💻 VB
📖 第 1 页 / 共 2 页
字号:
        Me.GroupBox4.Name = "GroupBox4"
        Me.GroupBox4.Size = New System.Drawing.Size(294, 145)
        Me.GroupBox4.TabIndex = 9
        Me.GroupBox4.TabStop = False
        Me.GroupBox4.Text = "PDU Code"
        '
        'txtPDU
        '
        Me.txtPDU.Dock = System.Windows.Forms.DockStyle.Fill
        Me.txtPDU.Location = New System.Drawing.Point(3, 16)
        Me.txtPDU.Multiline = True
        Me.txtPDU.Name = "txtPDU"
        Me.txtPDU.ScrollBars = System.Windows.Forms.ScrollBars.Vertical
        Me.txtPDU.Size = New System.Drawing.Size(288, 126)
        Me.txtPDU.TabIndex = 2
        '
        'cmdGetPDU
        '
        Me.cmdGetPDU.DialogResult = System.Windows.Forms.DialogResult.Cancel
        Me.cmdGetPDU.FlatStyle = System.Windows.Forms.FlatStyle.System
        Me.cmdGetPDU.Location = New System.Drawing.Point(293, 256)
        Me.cmdGetPDU.Name = "cmdGetPDU"
        Me.cmdGetPDU.Size = New System.Drawing.Size(94, 26)
        Me.cmdGetPDU.TabIndex = 11
        Me.cmdGetPDU.Text = "&Get PDU Code"
        '
        'stsBar
        '
        Me.stsBar.Location = New System.Drawing.Point(0, 309)
        Me.stsBar.Name = "stsBar"
        Me.stsBar.Panels.AddRange(New System.Windows.Forms.StatusBarPanel() {Me.stsBarCharCount, Me.stsPDULength})
        Me.stsBar.ShowPanels = True
        Me.stsBar.Size = New System.Drawing.Size(710, 19)
        Me.stsBar.TabIndex = 12
        '
        'stsBarCharCount
        '
        Me.stsBarCharCount.AutoSize = System.Windows.Forms.StatusBarPanelAutoSize.Spring
        Me.stsBarCharCount.Name = "stsBarCharCount"
        Me.stsBarCharCount.Width = 594
        '
        'stsPDULength
        '
        Me.stsPDULength.Name = "stsPDULength"
        '
        'cmdCopyToClipboard
        '
        Me.cmdCopyToClipboard.FlatStyle = System.Windows.Forms.FlatStyle.System
        Me.cmdCopyToClipboard.Location = New System.Drawing.Point(393, 256)
        Me.cmdCopyToClipboard.Name = "cmdCopyToClipboard"
        Me.cmdCopyToClipboard.Size = New System.Drawing.Size(133, 26)
        Me.cmdCopyToClipboard.TabIndex = 13
        Me.cmdCopyToClipboard.Text = "&Copy To Clipboard"
        '
        'frmPDUEncoder
        '
        Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
        Me.ClientSize = New System.Drawing.Size(710, 328)
        Me.Controls.Add(Me.cmdCopyToClipboard)
        Me.Controls.Add(Me.stsBar)
        Me.Controls.Add(Me.cmdGetPDU)
        Me.Controls.Add(Me.GroupBox4)
        Me.Controls.Add(Me.GroupBox3)
        Me.Controls.Add(Me.GroupBox2)
        Me.Controls.Add(Me.GroupBox1)
        Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle
        'Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon)
        Me.MaximizeBox = False
        Me.MinimizeBox = False
        Me.Name = "frmPDUEncoder"
        Me.Opacity = 0.95
        Me.Text = "PDU Encoder"
        Me.GroupBox2.ResumeLayout(False)
        Me.GroupBox2.PerformLayout()
        Me.GroupBox1.ResumeLayout(False)
        Me.GroupBox1.PerformLayout()
        Me.GroupBox3.ResumeLayout(False)
        Me.GroupBox3.PerformLayout()
        Me.GroupBox4.ResumeLayout(False)
        Me.GroupBox4.PerformLayout()
        CType(Me.stsBarCharCount, System.ComponentModel.ISupportInitialize).EndInit()
        CType(Me.stsPDULength, System.ComponentModel.ISupportInitialize).EndInit()
        Me.ResumeLayout(False)

    End Sub

#End Region

    Private Sub txtUserData_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtUserData.TextChanged
        'Count for number of PDUs
        Dim i As Integer
        Dim Encoding As Integer '0 for English 1 for Unicode
        Encoding = cmbDataCodingScheme.SelectedIndex
        Dim Text As String = txtUserData.Text
        For i = 0 To Text.Length - 1
            If Asc(Text.Chars(i)) < 0 Then
                Encoding = 1
                Exit For
            End If
        Next

        Dim TxtLength As Integer = txtUserData.TextLength
        With stsBarCharCount
            .Text = "CharCount:" & TxtLength
            Dim Piece As Integer

            If Encoding = 0 Then
                If TxtLength <= 160 Then
                    Piece = 1
                    .Text += "/160"
                Else
                    Piece = (TxtLength \ 152) + ((TxtLength Mod 152) = 0) + 1
                    .Text += "/152"
                End If
            End If

            If Encoding = 1 Then
                If TxtLength <= 70 Then
                    Piece = 1
                    .Text += "/70"
                Else
                    Piece = (TxtLength \ 66) + ((TxtLength Mod 66) = 0) + 1
                    .Text += "/66"
                End If
            End If

            .Text += "  Split into " & Piece & " PDUs"
        End With
    End Sub

    Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'Init Controls
        cmbDataCodingScheme.Items.Add(ENUM_TP_DCS.DefaultAlphabet & ":" & ENUM_TP_DCS.DefaultAlphabet.ToString)
        cmbDataCodingScheme.Items.Add(ENUM_TP_DCS.UCS2 & ":" & ENUM_TP_DCS.UCS2.ToString)
        cmbDataCodingScheme.Items.Add(ENUM_TP_DCS.Class2_UD_7bits & ":" & ENUM_TP_DCS.Class2_UD_7bits.ToString)
        cmbDataCodingScheme.SelectedIndex = 0

        cmbValidPeriod.Items.Add(ENUM_TP_VALID_PERIOD.Maximum & ":" & ENUM_TP_VALID_PERIOD.Maximum.ToString)
        cmbValidPeriod.Items.Add(ENUM_TP_VALID_PERIOD.OneDay & ":" & ENUM_TP_VALID_PERIOD.OneDay.ToString)
        cmbValidPeriod.Items.Add(ENUM_TP_VALID_PERIOD.OneHour & ":" & ENUM_TP_VALID_PERIOD.OneHour.ToString)
        cmbValidPeriod.Items.Add(ENUM_TP_VALID_PERIOD.OneWeek & ":" & ENUM_TP_VALID_PERIOD.OneWeek.ToString)
        cmbValidPeriod.Items.Add(ENUM_TP_VALID_PERIOD.SixHours & ":" & ENUM_TP_VALID_PERIOD.SixHours.ToString)
        cmbValidPeriod.Items.Add(ENUM_TP_VALID_PERIOD.ThreeHours & ":" & ENUM_TP_VALID_PERIOD.ThreeHours.ToString)
        cmbValidPeriod.Items.Add(ENUM_TP_VALID_PERIOD.TwelveHours & ":" & ENUM_TP_VALID_PERIOD.TwelveHours.ToString)
        cmbValidPeriod.SelectedIndex = 0

        txtMsgRef.Text = 0
    End Sub

    Private Sub cmdGetPDU_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdGetPDU.Click
        'Check all the information has input.
        If txtServiceCenterNum.TextLength = 0 Then MsgBox("Please Enter Service Center Number") : Return
        If txtDestNum.TextLength = 0 Then MsgBox("Please Enter Destination Number") : Return
        If txtUserData.Text = "" Then MsgBox("Please Enter UserData") : Return

        'Get PDU Code
        PDUCodes = GetPDU(txtServiceCenterNum.Text, txtDestNum.Text, Val(cmbDataCodingScheme.Text), Val(cmbValidPeriod.Text), Val(txtMsgRef.Text), chkStatusReport.Checked, txtUserData.Text)
        'Add PDU Codes to Text
        Dim i As Integer
        stsPDULength.Text = ""
        txtPDU.Text = ""
        For i = 0 To PDUCodes.Length - 1
            txtPDU.Text += "PDU Number:" & i + 1
            txtPDU.Text += vbTab + "Length For AT:" & (PDUCodes(i).Length - Val("&H" & Mid(PDUCodes(i), 1, 2)) * 2 - 2) / 2 & vbCrLf    'Calculate PDU Length for AT command
            txtPDU.Text += PDUCodes(i) & vbCrLf
        Next
    End Sub

    Private Function GetPDU(ByVal ServiceCenterNumber As String, _
                            ByVal DestNumber As String, _
                            ByVal DataCodingScheme As ENUM_TP_DCS, _
                            ByVal ValidPeriod As ENUM_TP_VALID_PERIOD, _
                            ByVal MsgReference As Integer, _
                            ByVal StatusReport As Boolean, _
                            ByVal UserData As String) As String()
        'Check for SMS type
        Dim Type As Integer '0 for SMS;1 For ConcatenatedShortMessage
        Dim Result() As String
        SMSObject = New ATSMS.SMS.Encoder.SMS
        Select Case DataCodingScheme
            Case ENUM_TP_DCS.DefaultAlphabet, ENUM_TP_DCS.Class2_UD_7bits
                If txtUserData.TextLength > 160 Then
                    SMSObject = New ATSMS.SMS.Encoder.ConcatenatedShortMessage
                    Type = 1
                End If
            Case ENUM_TP_DCS.UCS2
                If txtUserData.TextLength > 70 Then
                    SMSObject = New ATSMS.SMS.Encoder.ConcatenatedShortMessage
                    Type = 1
                End If
        End Select

        With SMSObject
            .ServiceCenterNumber = ServiceCenterNumber
            If StatusReport = True Then
                .TP_Status_Report_Request = ATSMS.SMS.ENUM_TP_SRI.Request_SMS_Report
            Else
                .TP_Status_Report_Request = ATSMS.SMS.ENUM_TP_SRI.No_SMS_Report
            End If
            .TP_Destination_Address = DestNumber
            .TP_Data_Coding_Scheme = DataCodingScheme
            .TP_Message_Reference = CInt(txtMsgRef.Text)
            .TP_Validity_Period = ValidPeriod
            .TP_User_Data = UserData
        End With

        If Type = 0 Then
            ReDim Result(0)
            Result(0) = SMSObject.GetSMSPDUCode
        Else
            Result = SMSObject.GetEMSPDUCode            'Note here must use GetEMSPDUCode to get right PDU codes
        End If
        Return Result
    End Function

    Private Sub cmdCopyToClipboard_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdCopyToClipboard.Click
        Try
            Dim Data As String = String.Empty, i As Integer
            For i = 0 To PDUCodes.Length - 1
                Data += PDUCodes(i) & vbCrLf
            Next
            Data = Data.Remove(Data.Length - 2, 2) 'Remove the last vbCrLf
            Clipboard.SetDataObject(Data)
        Catch ex As System.Exception
            MsgBox(ex.ToString)
        End Try
    End Sub

    Private Sub cmdReset_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdReset.Click
        txtServiceCenterNum.Text = ""
        txtDestNum.Text = ""
        cmbDataCodingScheme.SelectedIndex = 0
        cmbValidPeriod.SelectedIndex = 0
        txtMsgRef.Text = 0
        chkStatusReport.Checked = False
        txtUserData.Text = ""
    End Sub

    Private Sub cmbDataCodingScheme_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmbDataCodingScheme.SelectedIndexChanged
        txtUserData_TextChanged(Nothing, Nothing)
    End Sub


End Class

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -