Know a good article or link that we're missing? Submit it!
*/
*/

View \Form1.frm

Send SMS with Mobile (PDU telegram) 1

Submitted By: Blaproductions
Rating: starstarstarstarstar (Rate It)


VERSION 5.00
Object = "{648A5603-2C6E-101B-82B6-000000000014}#1.1#0"; "MSCOMM32.OCX"
Begin VB.Form Form1
   Caption         =   "Send SMS via Mobile Phone"
   ClientHeight    =   1575
   ClientLeft      =   12105
   ClientTop       =   2535
   ClientWidth     =   3795
   LinkTopic       =   "Form1"
   ScaleHeight     =   1575
   ScaleWidth      =   3795
   Begin MSCommLib.MSComm MSComm1
      Left            =   2730
      Top             =   360
      _ExtentX        =   1005
      _ExtentY        =   1005
      _Version        =   393216
      DTREnable       =   -1  'True
   End
   Begin VB.CommandButton Command1
      Caption         =   "Send Now"
      Height          =   615
      Left            =   420
      TabIndex        =   0
      Top             =   360
      Width           =   2055
   End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit

'Tested on Siemens(19200 baud) and Bosch (9600 baud)

Private Sub Command1_Click()
   Dim sms As String
   Dim buffer$
   
   MSComm1.CommPort = 2
   MSComm1.Settings = "19200,N,8,1"
   MSComm1.InputLen = 0
   MSComm1.Handshaking = comNone
   
   MSComm1.PortOpen = True
   
   'echo off
   MSComm1.Output = "atE0" & Chr$(13)
   Do
      DoEvents
   buffer$ = buffer$ & MSComm1.Input
   Loop Until InStr(buffer$, "OK")
   buffer$ = ""
   
   'set pdu mode
   MSComm1.Output = "AT+CMGF=0" & Chr$(13)
   Do
      DoEvents
   buffer$ = buffer$ & MSComm1.Input
   Loop Until InStr(buffer$, "OK")
   buffer$ = ""
   
   sms = MakeSms("004917212345678", "Does it work?")
   
   Debug.Print sms
   
   MSComm1.Output = "AT+CMGS=" & Len(sms) / 2 & Chr$(13)
   Do
      DoEvents
   buffer$ = buffer$ & MSComm1.Input
   Loop Until InStr(buffer$, ">")
   buffer$ = ""
   
   MSComm1.Output = sms + Chr$(26)
   
   Do
      DoEvents
   buffer$ = buffer$ & MSComm1.Input
   Loop Until InStr(buffer$, "OK")
   
   MSComm1.PortOpen = False
 
End Sub


Function MakeSms(number As String, txt As String) As String
  MakeSms = "001100"
  MakeSms = MakeSms + ConvNumber(number)
  MakeSms = MakeSms + "000064"
  MakeSms = MakeSms + ConvTxt(txt)
End Function


Function ConvNumber(num As String) As String

  Dim i As Integer
  Dim numType As String
 
  'default local number
  numType = "81"
 
  'but if international number then .....
  If Left$(num, 3) = "+00" And Len(num) > 3 Then num = Mid$(num, 4): numType = "91"
  If Left$(num, 2) = "00" And Len(num) > 2 Then num = Mid$(num, 3): numType = "91"
  If Left$(num, 1) = "+" And Len(num) > 1 Then num = Mid$(num, 2): numType = "91"
 
 
  ConvNumber = Right$("00" & Hex(Len(num)), 2)
 
  ConvNumber = ConvNumber + numType
 
  For i = 1 To Len(num) Step 2
    ConvNumber = ConvNumber + Mid$(num + "F", i + 1, 1) + Mid$(num + "F", i, 1)
  Next i
 
End Function


Function ConvTxt(txt As String) As String
  Dim i As Integer
  Dim datArr1(1 To 256) As Byte
 
  Dim l As Integer
  Dim touw As String
 
 
  'no more than 160 chars
  If Len(txt) > 160 Then txt = Left$(txt, 160)
 
  l = Len(txt)
 
  ConvTxt = Right$("00" & Hex(Len(txt)), 2)
  For i = 1 To l
    datArr1(i) = Asc(Mid$(txt, i, 1))
  Next i
 
 
  'make a bit stream of septets
  touw = ""
  For i = 1 To l
    touw = ToBin7(datArr1(i)) + touw
  Next i
 
 
  'and convert it to octets
  While Len(touw) > 8
    ConvTxt = ConvTxt + Bin2Hex(Right$(touw, 8))
    touw = Mid$(touw, 1, Len(touw) - 8)
  Wend
 
  ConvTxt = ConvTxt + Bin2Hex(touw)
 
  Debug.Print ConvTxt
End Function


Function ToBin7(ByVal num As Byte) As String
  'convert to padded 7 place binary number
  While num > 0
    ToBin7 = Trim(num Mod 2) + ToBin7
    num = num  2
  Wend
   
  ToBin7 = Right$("0000000" + ToBin7, 7)
End Function

Function Bin2Hex(ByVal touw As String) As String
  'convert binary to a padded 2 place hex number
  Dim x As Integer
  Dim num As Long
 
  For x = 1 To Len(touw)
    If Mid$(touw, x, 1) = "1" Then
      num = num + 2 ^ (Len(touw) - x)
    End If
  Next x
 
  Bin2Hex = Right$("00" + Hex(num), 2)
End Function

corner
© 1996-2008 CommunityHeaven LLC. All rights reserved. Reproduction in whole or in part, in any form or medium without express written permission is prohibited.
Violators of this policy may be subject to legal action. Please read our Terms Of Use and Privacy Statement for more information.
North American business development: Nicolai Wadstrom. Publisher: Lars Hagelin.
Resource Listings