Skip to main content
Email Password   helpLost your password?

Sample Image - phonesmsrecv.jpg

Introduction

In part II of the article, I showed you how to send SMS using a GSM modem which is built into your mobile phone. However, I did not show you how to detect incoming SMS. To detect new SMS received, it is a bit tricky as different mobile phones from different manufacturers may need different configurations. In this article, I am going to show you how to detect new SMS using the open source atSMS library.

How It Works

In order to detect incoming SMS, you must use the "AT+CNMI" command to set the new message indication to the terminal equipment (TE).

For the "+CNMI" command, the values are in the format of mode,mt,bm,ds,bfr. In order to receive SMS, mt must be 1. For other values, different handsets may require different values to be set. By default, the atSMS library sets mode and mt to 1 which should be sufficient for most handsets. However, you can always use the CheckATCommands function to check your phone supported values.

Take note also that during my testing, it was noticed that for certain Nokia phones only, Class 2 SMS can be detected. For newer models of Nokia phones, e.g., N70, N80, the "+CNMI" is not supported, and you have no way of detecting incoming SMS.

The Code

By setting NewMessageIndication to True, and if your phone supports "+CNMI", the NewMessageReceived event should be raised.

Imports ATSMS

Public Class MainForm

    Private WithEvents oGsmModem As New GSMModem

    Private Sub MainForm_Load(ByVal sender As System.Object, _
            ByVal e As System.EventArgs) Handles MyBase.Load
        CheckForIllegalCrossThreadCalls = False
    End Sub

    
    Private Sub btnPhone_Click(ByVal sender As System.Object, _
            ByVal e As System.EventArgs) Handles btnConnect.Click

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

        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
            oGsmModem.NewMessageIndication = True
        Catch ex As Exception

        End Try

        btnSendMsg.Enabled = True
        btnSendClass2Msg.Enabled = True
        btnCheckPhone.Enabled = True
        btnDisconnect.Enabled = True

        MsgBox("Connected to phone successfully !", MsgBoxStyle.Information)

    End Sub


    Private Sub btnDisconnect_Click(ByVal sender As System.Object, _
            ByVal e As System.EventArgs) Handles btnDisconnect.Click
        Try
            oGsmModem.Disconnect()
        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Critical)
        End Try

        btnSendMsg.Enabled = False
        btnSendClass2Msg.Enabled = False
        btnCheckPhone.Enabled = False
        btnDisconnect.Enabled = False
        btnConnect.Enabled = True

    End Sub

   
    Private Sub btnSendMsg_Click(ByVal sender As System.Object, _
            ByVal e As System.EventArgs) Handles btnSendMsg.Click
        If txtPhoneNumber.Text.Trim = String.Empty Then
            MsgBox("Phone number must not be empty", MsgBoxStyle.Critical)
            Return
        End If

        If txtMsg.Text.Trim = String.Empty Then
            MsgBox("Phone number must not be empty", MsgBoxStyle.Critical)
            Return
        End If

        Try
            Dim msg As String = txtMsg.Text.Trim
            Dim msgNo As String
            If StringUtils.IsUnicode(msg) Then
                msgNo = oGsmModem.SendSMS(txtPhoneNumber.Text, msg, _
                        Common.EnumEncoding.Unicode_16Bit)
            Else
                msgNo = oGsmModem.SendSMS(txtPhoneNumber.Text, msg, _
                        Common.EnumEncoding.GSM_Default_7Bit)
            End If
            MsgBox("Message is sent. Reference no is " & msgNo, _
                    MsgBoxStyle.Information)
        Catch ex As Exception
            MsgBox(ex.Message & ". Make sure your SIM memory" & _ 
                   " is not full.", MsgBoxStyle.Critical)
        End Try

        'Try

        '    Dim storages() As Storage = oGsmModem.GetStorageSetting

        '    Dim i As Integer

        '    txtStorage.Text = String.Empty

        '    For i = 0 To storages.Length - 1

        '        Dim storage As Storage = storages(i)

        '        txtStorage.Text += storage.Name & "(" & _

        '          storage.Used & "/" & storage.Total & "), "

        '    Next

        'Catch ex As Exception

        '    txtStorage.Text = "Not supported"

        'End Try

    End Sub

    Private Sub btnSendClass2Msg_Click(ByVal sender As System.Object, _
            ByVal e As System.EventArgs) Handles btnSendClass2Msg.Click
        If txtPhoneNumber.Text.Trim = String.Empty Then
            MsgBox("Phone number must not be empty", MsgBoxStyle.Critical)
            Return
        End If

        If txtMsg.Text.Trim = String.Empty Then
            MsgBox("Phone number must not be empty", MsgBoxStyle.Critical)
            Return
        End If

        Try
            Dim msg As String = txtMsg.Text.Trim
            Dim msgNo As String
            If StringUtils.IsUnicode(msg) Then
                msgNo = oGsmModem.SendSMS(txtPhoneNumber.Text, msg, _
                        Common.EnumEncoding.Unicode_16Bit)
            Else
                msgNo = oGsmModem.SendSMS(txtPhoneNumber.Text, msg, _
                        Common.EnumEncoding.Class2_7_Bit)
            End If
            MsgBox("Message is sent. Reference no is " & msgNo, _
                    MsgBoxStyle.Information)
        Catch ex As Exception
            MsgBox(ex.Message & ". Make sure your SIM memory is not full.", _
                   MsgBoxStyle.Critical)
        End Try

        'Try

        '    Dim storages() As Storage = oGsmModem.GetStorageSetting

        '    Dim i As Integer

        '    txtStorage.Text = String.Empty

        '    For i = 0 To storages.Length - 1

        '        Dim storage As Storage = storages(i)

        '        txtStorage.Text += storage.Name & "(" & _

        '             storage.Used & "/" & storage.Total & "), "

        '    Next

        'Catch ex As Exception

        '    txtStorage.Text = "Not supported"

        'End Try

    End Sub


    Private Sub oGsmModem_NewMessageReceived(ByVal e As _
            ATSMS.NewMessageReceivedEventArgs) Handles _
            oGsmModem.NewMessageReceived
        txtMsg.Text = "Message from " & e.MSISDN & ". Message - " & _
                      e.TextMessage & ControlChars.CrLf
    End Sub

    Private Sub btnCheckPhone_Click(ByVal sender As System.Object, _
            ByVal e As System.EventArgs) Handles btnCheckPhone.Click
        MsgBox("Going to analyze your phone. It may take a while", _
                MsgBoxStyle.Information)
        oGsmModem.CheckATCommands()
        If oGsmModem.ATCommandHandler.Is_SMS_Received_Supported Then
            MsgBox("Your phone is able to receive SMS. Message " & _ 
                   "indication command is " & _
                   oGsmModem.ATCommandHandler.MsgIndication, _
                   MsgBoxStyle.Information)
            oGsmModem.NewMessageIndication = True
        Else
            MsgBox("Sorry. Your phone cannot receive SMS", _
                   MsgBoxStyle.Information)
        End If
    End Sub
End Class

In the next article, I will show you how to send vCard, vCalendar, and WAP Push messages using the atSMS library.

You must Sign In to use this message board.
 
 
Per page   
 FirstPrevNext
Generalhow to receive sms ????? Pin
umerufm
22:16 4 Jul '09  
GeneralRe:ATSMS Lib 1.0.0.5 Pin
manyara
3:19 8 May '09  
GeneralRe:ATSMS Lib 1.0.0.5 Pin
van_walkman
18:41 16 Jun '09  
Questioni need read all sms from our ATSMS .dll if its possible Pin
Murugan_vdm
22:25 21 Nov '08  
Generalhow to read sms from sim via gsm modem Pin
raju_cuet
0:31 24 Jul '08  
Questionwant to send sms through phone memory not by sim....... [modified] Pin
hpindia
3:34 23 Jul '08  
Generalunreadable text in receive text Pin
eclkq
11:08 15 Apr '08  
Generalcode for receive sms using gsm modem that connect to com port Pin
shee_dee86
17:16 8 Apr '08  
Generaldeleting Inbox Pin
k.Daniel
18:37 22 Feb '08  
GeneralHow to refresh New messages Pin
nteng14
18:05 9 Jan '08  
Generaljust thanks Pin
vahid1
11:34 1 Jan '08  
GeneralUnknown text on received message Pin
ikkaz
20:50 18 Nov '07  
QuestionRe: Unknown text on received message Pin
reinaldoa
3:59 2 Jul '08  
GeneralError using ATSMS Pin
codeprojid
23:40 12 Oct '07  
GeneralWhich mobile support Pin
parasaniasandip
2:44 3 Oct '07  
Questionsending long messege Pin
agahii
12:47 15 Sep '07  
General3230 query Pin
A S Bhatia
4:01 11 Sep '07  
GeneralHow to Delete Sent Messages Pin
nteng14
18:41 6 Sep '07  
GeneralRe: How to Delete Sent Messages Pin
mpdesign
1:49 11 Sep '07  
GeneralRe: How to Delete Sent Messages Pin
agahii
7:11 12 Sep '07  
GeneralRe: How to Delete Sent Messages Pin
mpdesign
8:14 12 Sep '07  
GeneralRe: How to Delete Sent Messages Pin
mark duatin
21:58 11 Jul '08  
GeneralRe: How to Delete Sent Messages Pin
mpdesign
13:37 12 Jul '08  
GeneralRe: How to Delete Sent Messages Pin
kaki456
8:30 8 Feb '09  
GeneralRe: How to Delete Sent Messages Pin
mpdesign
12:45 8 Feb '09  


Last Updated 10 Dec 2006 | Advertise | Privacy | Terms of Use | Copyright © CodeProject, 1999-2009