Public Sub New(ByRef comx As IO.Ports.SerialPort) GSM_Port = comx End Sub Public Function Send_SMS(ByVal Message As String, ByVal Tel_No As String) As String 'Max Len of Message is 129 Char Dim Msg_Len As Byte = Message.Length Dim Tel_Len As Byte = Tel_No.Length Dim PDU_Msg As String = "000100" Dim I As Byte Dim J As Byte Dim K1 As Byte Dim K2 As Byte Dim K As Byte If Tel_Len <= 15 Then PDU_Msg = "0" PDU_Msg = Hex(Tel_Len).ToString "91" For I = 0 To Tel_Len - 2 (Tel_Len Mod 2) Step 2 J=I1 If J >= Tel_Len Then PDU_Msg = "F" Else PDU_Msg = Tel_No(J).ToString End If PDU_Msg = Tel_No(I).ToString Next PDU_Msg = "0000" I=0 J=1 If Msg_Len <= 15 Then PDU_Msg = "0" PDU_Msg = Hex(Msg_Len).ToString Do K1 = AscW(Message(I)) If J < Msg_Len Then K2 = AscW(Message(J)) K = I Mod 8 K1 = K1 >> K K=7-K K2 = K2 << K K1 = K1 K2 If K1 <= 15 Then PDU_Msg = "0" PDU_Msg = (Hex(K1)).ToString I=1 J=1 If K = 1 Then I=1 J=1 End If Loop Until I >= Msg_Len Clear_Buffer() GSM_Port.WriteLine("AT CMGS=" ((PDU_Msg.Length \ 2) - 1).ToString Chr(13)) 'Max is 163 Delay(100) GSM_Port.WriteLine(PDU_Msg Chr(26)) Delay(100) GSM_Port.ReadLine() GSM_Port.ReadLine() GSM_Port.ReadLine() Return (GSM_Port.ReadLine) End Function Public Sub Delay(ByRef W As Integer) 'one tick = 100 nanoseconds so one tick * 10,000,000 = one second Dim Now_Tick As Int64 = DateTime.Now.Ticks Do Loop Until DateTime.Now.Ticks - Now_Tick >= W End Sub
Public Function AT_Support() As Boolean
Clear_Buffer() GSM_Port.WriteLine("AT" Chr(13)) GSM_Port.ReadLine() If GSM_Port.ReadLine = "OK" Chr(13) Then Return True Else Return False End Function Public Function Modem_Company() As String Clear_Buffer() GSM_Port.WriteLine("AT CGMI" Chr(13)) GSM_Port.ReadLine() Return GSM_Port.ReadLine End Function Public Function Modem_Model() As String Clear_Buffer() GSM_Port.WriteLine("AT GMM" Chr(13)) GSM_Port.ReadLine() Return GSM_Port.ReadLine End Function Public Function Battery_Charge() As String Clear_Buffer() GSM_Port.WriteLine("AT CBC" Chr(13)) GSM_Port.ReadLine() Return GSM_Port.ReadLine End Function Public Function Get_DateTime() As String Clear_Buffer() GSM_Port.WriteLine("AT CCLK?" Chr(13)) GSM_Port.ReadLine() Return GSM_Port.ReadLine End Function Public Sub Dial(ByRef Phone_Number As String, ByRef Wait As Byte) 'ATD <Phone_Number>; Clear_Buffer() GSM_Port.WriteLine("ATD" Phone_Number ";" Chr(13)) Delay(Wait * 10000000) GSM_Port.WriteLine("ATH" Chr(13)) End Sub Public Sub Terminate_Call() Clear_Buffer() GSM_Port.WriteLine("ATH" Chr(13)) End Sub Public Sub Read_Contacts(ByRef Contacts_List As ArrayList) Clear_Buffer() Contacts_List = New ArrayList(100) Dim Index As Integer = 1 Dim Number As String = Nothing While True GSM_Port.WriteLine("AT CPBR=" Index.ToString Chr(13)) GSM_Port.ReadLine() Number = GSM_Port.ReadLine If Number = "OK" Chr(13) Then Exit While Contacts_List.Add(Number) GSM_Port.ReadLine() GSM_Port.ReadLine() Index = 1 End While 'Return GSM_Port.ReadLine End Sub Public Sub Dispose() GSM_Port.Close() End Sub
Private Sub Clear_Buffer()
GSM_Port.DiscardInBuffer() GSM_Port.DiscardOutBuffer() End Sub Public Sub Read_SMS(ByVal SMS_Index As Integer, ByRef SMS_No As String, ByRef SMS_Text As String, ByRef Status As String) Dim PDU_Msg As String = Nothing Clear_Buffer() GSM_Port.WriteLine("AT CMGR=" SMS_Index.ToString Chr(13)) GSM_Port.ReadLine() Dim Stat As Byte = Convert.ToByte(Mid(GSM_Port.ReadLine(), 8, 1)) Select Case Stat Case 0 : Status = "Received unread message." Case 1 : Status = "Received read message." Case 2 : Status = "Stored unsent message." Case 3 : Status = "Stored sent message." Case 16 : Status = "Template message." End Select PDU_Msg = GSM_Port.ReadLine Dim No_Str As String = Nothing Dim Start_Index As Integer = PDU_Msg.IndexOf("0C91") 5 No_Str = Mid(PDU_Msg, Start_Index, 12) SMS_No = Nothing For l As Byte = 0 To 11 Step 2 SMS_No = No_Str(l 1) SMS_No = No_Str(l) Next Start_Index = PDU_Msg.IndexOf("0000") 5 PDU_Msg = Mid(PDU_Msg, Start_Index) If (PDU_Msg(0) PDU_Msg(1)).ToString = "FF" Then PDU_Msg = Mid(PDU_Msg, 5) Else PDU_Msg = Mid(PDU_Msg, 17) End If Dim PDU_Len As Byte = PDU_Msg.Length - 1 '??? Dim Hex_List((PDU_Len \ 2) - 1) As Byte Dim Index As Byte = 0 For l As Byte = 0 To PDU_Len - 1 Step 2 Hex_List(Index) = Convert.ToInt32((PDU_Msg(l) PDU_Msg(l 1)).ToString, 16) Index = 1 Next Dim K1 As Byte Dim SL As Byte = 1 Dim SR As Byte = 7 Dim TMP As Byte = 0 Dim I As Byte = 0 Dim Message As String = Nothing Do K1 = Hex_List(I) K1 = K1 << SL Message = Chr((K1 >> 1) TMP).ToString TMP = Hex_List(I) >> SR I = 1 : SR -= 1 : SL = 1 If SR = 0 And SL = 8 Then Message = Chr(TMP).ToString : TMP = 0 : SR = 7 : SL = 1 Loop Until I >= Hex_List.Length SMS_Text = Message End Sub End Class