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

📄 decoder.vb

📁 通过串口发送短信的模块,采用vb.net编写
💻 VB
📖 第 1 页 / 共 2 页
字号:

        Public Class EMS_RECEIVED
            Inherits SMS_RECEIVED
            Public Structure InfoElem       'See document "How to create EMS"
                Public Identifier As Byte
                Public Length As Byte
                Public Data As String
            End Structure
            Public TP_UDHL As Byte

            Public IE() As InfoElem

            Sub New(ByVal PDUCode As String)
                MyBase.New(PDUCode)
            End Sub
            Public Overrides Sub GetOrignalData(ByVal PDUCode As String)
                SCAddressLength = GetByte(PDUCode)
                SCAddressType = GetByte(PDUCode)
                SCAddressValue = GetAddress(GetString(PDUCode, (SCAddressLength - 1) * 2))
                FirstOctet = GetByte(PDUCode)

                SrcAddressLength = GetByte(PDUCode)
                SrcAddressType = GetByte(PDUCode)
                SrcAddressLength += SrcAddressLength Mod 2
                SrcAddressValue = GetAddress((GetString(PDUCode, SrcAddressLength)))

                TP_PID = GetByte(PDUCode)
                TP_DCS = GetByte(PDUCode)
                TP_SCTS = GetDate(GetString(PDUCode, 14), TP_TIMEZONE)
                TP_UDL = GetByte(PDUCode)
                TP_UDHL = GetByte(PDUCode)

                IE = GetIE(GetString(PDUCode, TP_UDHL * 2))

                TP_UD = GetString(PDUCode, TP_UDL * 2)
            End Sub

            'Get Informat Elements 
            Shared Function GetIE(ByVal IECode As String) As InfoElem()
                Dim tmp As String = IECode, t As Integer = 0
                Dim result() As InfoElem
                result = Nothing
                Do Until IECode = ""
                    ReDim Preserve result(t)
                    With result(t)
                        .Identifier = GetByte(IECode)
                        .Length = GetByte(IECode)
                        .Data = GetString(IECode, .Length * 2)
                    End With
                    t += 1
                Loop
                Return result
            End Function
        End Class

        Public Class EMS_SUBMIT
            Inherits SMS_SUBMIT

            Sub New(ByVal PDUCode As String)
                MyBase.New(PDUCode)
                Type = SMSType.EMS_SUBMIT
            End Sub

            Public TP_UDHL As Byte

            Public IE() As EMS_RECEIVED.InfoElem


            Public Overrides Sub GetOrignalData(ByVal PDUCode As String)
                SCAddressLength = GetByte(PDUCode)
                SCAddressType = GetByte(PDUCode)
                SCAddressValue = GetAddress(GetString(PDUCode, (SCAddressLength - 1) * 2))
                FirstOctet = GetByte(PDUCode)

                TP_MR = GetByte(PDUCode)

                DesAddressLength = GetByte(PDUCode)
                DesAddressType = GetByte(PDUCode)
                DesAddressLength += DesAddressLength Mod 2
                DesAddressValue = GetAddress(GetString(PDUCode, DesAddressLength))

                TP_PID = GetByte(PDUCode)
                TP_DCS = GetByte(PDUCode)
                TP_VP = GetByte(PDUCode)
                TP_UDL = GetByte(PDUCode)

                TP_UDHL = GetByte(PDUCode)
                IE = EMS_RECEIVED.GetIE(GetString(PDUCode, TP_UDHL * 2))

                TP_UD = GetString(PDUCode, TP_UDL * 2)
            End Sub
        End Class

        Public Class SMS_STATUS_REPORT
            Inherits SMS_RECEIVED
            Public TP_MR As Byte
            Public TP_DP As Date
            Public Status As EnumStatus

            Public Enum EnumStatus
                Success = 0
                NotSend = 96
                NoResponseFromSME = 98
            End Enum

            Sub New(ByVal PDUCode As String)
                MyBase.New(PDUCode)
                Type = SMSType.SMS_STATUS_REPORT
            End Sub
            Public Overrides Sub GetOrignalData(ByVal PDUCode As String)
                SCAddressLength = GetByte(PDUCode)
                SCAddressType = GetByte(PDUCode)
                SCAddressValue = GetAddress(GetString(PDUCode, (SCAddressLength - 1) * 2))

                FirstOctet = GetByte(PDUCode)

                TP_MR = GetByte(PDUCode)

                SrcAddressLength = GetByte(PDUCode)
                SrcAddressType = GetByte(PDUCode)
                SrcAddressLength += SrcAddressLength Mod 2
                SrcAddressValue = GetAddress(GetString(PDUCode, SrcAddressLength))

                TP_SCTS = GetDate(GetString(PDUCode, 14), TP_TIMEZONE)
                TP_DP = GetDate(GetString(PDUCode, 14), TP_TIMEZONE)

                Status = GetByte(PDUCode)

                'Status report do not have content so I set it a zero length string
                TP_UD = ""
            End Sub
        End Class

        Public Class PDUDecoder
            Public Structure BaseInfo
                Public SourceNumber As String
                Public DestinationNumber As String
                Public ReceivedDate As Date
                Public TimeZone As String
                Public Text As String
                Public Type As SMS.SMSType
                Public EMSTotolPiece As Integer
                Public EMSCurrentPiece As Integer
                Public StatusFromReport As SMS_STATUS_REPORT.EnumStatus

                Public DestinationReceivedDate As Object
            End Structure

            Sub New(ByVal PDUCode As String)
                Decode(PDUCode)
            End Sub

            Public Shared Function Decode(ByVal PDUCode As String) As BaseInfo
                Dim result As BaseInfo
                result = Nothing
                Try
                    Dim s As Object = Nothing
                    Dim T As SMSType = SMSBase.GetSMSType(PDUCode)
                    result.Type = T
                    Select Case T
                        Case SMSType.EMS_RECEIVED
                            s = New EMS_RECEIVED(PDUCode)
                            result.SourceNumber = s.SrcAddressValue

                            If s.SrcAddressType = &H91 Then result.SourceNumber = "+" + result.SourceNumber

                            result.ReceivedDate = s.TP_SCTS

                            If Not (s.IE Is Nothing) Then
                                Dim Data As String = s.IE(0).Data
                                result.EMSTotolPiece = CInt(Mid(Data, 5, 2))
                                result.EMSCurrentPiece = CInt(Mid(Data, 7, 2))
                            End If

                        Case SMSType.SMS_RECEIVED
                            s = New SMS_RECEIVED(PDUCode)
                            result.SourceNumber = s.SrcAddressValue
                            If s.SrcAddressType = &H91 Then result.SourceNumber = "+" + result.SourceNumber
                            result.ReceivedDate = s.TP_SCTS

                        Case SMSType.EMS_SUBMIT
                            s = New EMS_SUBMIT(PDUCode)

                            result.DestinationNumber = s.DesAddressValue
                            If s.DesAddressType = &H91 Then result.DestinationNumber = "+" + result.DestinationNumber
                            If Not (s.IE Is Nothing) Then
                                Dim Data As String = s.IE(0).Data
                                result.EMSTotolPiece = CInt(Mid(Data, 5, 2))
                                result.EMSCurrentPiece = CInt(Mid(Data, 7, 2))
                            End If

                        Case SMSType.SMS_SUBMIT
                            s = New SMS_SUBMIT(PDUCode)
                            result.DestinationNumber = s.DesAddressValue
                            If s.DesAddressType = &H91 Then result.DestinationNumber = "+" + result.DestinationNumber

                        Case SMSType.SMS_STATUS_REPORT
                            s = New SMS_STATUS_REPORT(PDUCode)
                            result.SourceNumber = s.SrcAddressValue
                            If s.SrcAddressType = &H91 Then result.SourceNumber = "+" + result.SourceNumber
                            result.ReceivedDate = s.TP_SCTS
                            result.DestinationReceivedDate = s.TP_DP()
                            result.StatusFromReport = s.status
                        Case Else
                            Stop
                    End Select
                    '###########################
                    'Correct when s is SMS type, no TP_UDL is found.
                    'Note:Only EMS has the TP_UDHL and TP_UDH see 3GPP TS 23.040 V6.5.0 (2004-09)
                    '###########################
                    If s.tp_DCS = 0 Or _
                        s.tp_DCS = 242 Then
                        If T = SMSType.SMS_RECEIVED Or T = SMSType.SMS_STATUS_REPORT Or T = SMSType.SMS_SUBMIT Then
                            '#############################
                            'add a parameter
                            '############################
                            result.Text = s.decode7bit(s.tp_UD, s.TP_UDL)
                        End If

                        If T = SMSType.EMS_RECEIVED Or T = SMSType.EMS_SUBMIT Then
                            result.Text = s.decode7bit(s.tp_ud, s.tp_udl - 8 * (1 + s.tp_udhl) / 7)
                        End If
                    ElseIf s.tp_DCS = 246 Then
                        result.Text = s.DecodeUnicode(s.TP_UD)
                    Else
                        result.Text = s.DecodeUnicode(s.TP_UD)
                    End If
                Catch err As System.Exception
                    result.Text = "PDU decoding exception:" & PDUCode
                End Try
                Return result
            End Function
        End Class

    End Namespace
End Namespace

⌨️ 快捷键说明

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