You are on page 1of 3

Public Class AT_Commands

Private GSM_Port As IO.Ports.SerialPort


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

You might also like