By: Muhammad Iqbal
Pengantar mukaa n Komput er dan Handphon e atau G SM/ CDMA Modem Email:
[email protected] website: http://www.creative-instrument.com
Pendahuluan Handphone (HP) saat ini memang bukan barang yang aneh untuk masyarakat Indonesia. Bahkan tak sedikit yang memiliki lebih dari satu . Di Indonesia saat ini tercatat tidak kurang dari 16 juta orang menjadi pelanggan telepon genggam. Ke depan, seiring dengan perkembangan teknologi, HP akan semakin cerdas dan melayani kebutuhan manusia. Komunikasi dengan perangkat nirkabel akan lebih dominan, baik untuk bisnis, ataupun kegiatan sehari-hari. Industri handphone, bergerak sangat cepat, setara dengan melesatnya kecepatan suaranya. Kini semakin banyak teknologi pendukung yang terintegrasi dengan produk HP, seperti radio FM, kamera digital dan pemutar MP3.
Gambar. Berbagai Macam HP
Gambar. Berbagai Macam Modem GSM/CDMA Selain HP, sebenarnya ada satu lagi peralatan lain yang biasanya digunakan untuk peralatan komunikasi yang hampir sama dengan HP, yaitu Modem GSM/CDMA. Jika HP digunakan sebagai alat komunikasi mobile, modem GSM/CDMA lebih dikhususkan bukan untuk mobile tetapi didesain Pengantarmukaan Komputer dan Handphone
By: Muhammad Iqbal
untuk sebuah server layanan berbasis komunikasi GSM/CDMA. Walaupun demikian pada dasarnya kedua peralatan ini didesain dengan kemampuan sama yaitu melakukan komunikasi menggunakan GSM/CDMA. Perbedaanya mungkin modem GSM/CDMA lebih dikhususkan untuk melakukan pengantarmukaan dengan peralatan lain (biasanya computer) dibandingkan dengan HP sehingga dalam hal komunikasi dengan peralatan lain modem GSM/CDMA memiliki fitur yang lebih dalam hal kompatibilitas dan kemampuan pengantarmukaan dibandingkan dengan HP. Semakin lama ketergantungan manusia terhadap HP semakin besar. HP telah menjadi gaya hidup baru, layanan service terhadap perangkat-perangkat ini telah menjadi sumber usaha baru bagi para developer perangkat lunak, oleh karena itu penguasaan terhadap pengantarmukaan HP ini menjadi keahlian baru yang sangat dibutuhkan. Ada banyak sekali layanan yang disediakan misalnya SMS Centre, Call Centre, Deliveri Service SMS, Pengisian pulsa elektronik dan lain-lain. AT-COMMAND Untuk melakukan komunikasi dengan HP atau Modem, ada banyak sekali cara yang bisa dilakukan tetapi yang paling terkenal dan disukai oleh para programmer dan developer mungkin menggunakan AT-COMMAND yaitu suatu standar bahasa komunikasi yang digunakan untuk komunikasi dengan modem termasuk HP. Berikut beberapa AT COMMAND yang sering dan umum digunakan dalam pengantarmukaan HP atau Modem GSM/CDMA (keterangan lebih lengkap sebaiknya anda melihat manual book dari produk yang anda gunakan (buku daftar perintah AT COMMAND selalu disertakan pada saat membeli) bila anda menggunakan modem dan jika anada menggunakan HP silahkan cari dan download di internet untuk setiap merknya). Berikut adalah beberapa daftar AT Command yang sering digunakan dan ada pada beberapa perangkat HP atau Modem GSM / CDMA. Call Commands atau perintah pemanggilan ATA ATD ATH ATL ATM ATO ATP ATT AT+CSTA
Answer Command Dial Command Hang Up Call Monitor Speaker Loudness Monitor Speaker Mode Go On-Line Set Pulse Dial as Default Set Tone Dial as Default Select Type of Address
Pengantarmukaan Komputer dan Handphone
By: Muhammad Iqbal AT+CRC
Cellular Result Codes
Data Card Control Commands ATI ATS ATZ AT&F AT&V AT&W AT&Y AT+CLCK AT+COLP AT+GCAP AT+GMI AT+GMM AT+GMR AT+GSN
Identification Select an S-register Recall Stored Profile Restore Factory Settings View Active Configuration Store Parameters in Given Profile Select Set as s Powerup Option Facility Lock Command Connected Line Identification Presentation Request Complete Capabilities List Request Manufacturer Identification Request Model Identification Request Revision Identification Request Product Serial Number Identification
Phone Control Commands AT+CBC AT+CGMI AT+CGMM AT+CGMR AT+CGSN AT+CMEE AT+CPAS AT+CPBF AT+CPBR AT+CPBS AT+CPBW AT+CSCS AT+CSQ
Battery Charge Request Manufacturer Identification Request Model Identification Request Revision Identification Request Product Serial Number Identification Report Mobile Equipment Error Phone Activity Status Find Phone Book Entries Read Phone Book Entry Select Phone Book Memory Storage Write Phone Book Entry Select TE Character Set Signal Quality
Computer Data Card Interface Commands ATE ATQ ATV ATX AT&C AT&D AT&K AT&Q AT&S AT+ICF AT+IFC AT+IPR
Command Echo Result Code Suppression Define Response Format Response Range Selection Define DCD Usage Define DTR Usage Select Flow Control Define Communications Mode Option Define DSR Option DTE-DCE Character Framing DTE-DCE Local Flow Control Fixed DTE Rate
Pengantarmukaan Komputer dan Handphone
By: Muhammad Iqbal
Service AT+CLIP AT+CR AT+DR AT+ILRR
Calling Line Identification Presentation Service Reporting Control Data Compression Reporting DTE-DCE Local Rate Reporting
Network Communication Parameter Commands ATB AT+CBST AT+CEER AT+CRLP AT+DS
Communications Standard Option Select Bearer Service Type Extended Error Report Radio Link Protocol Data Compression
Miscellaneous Commands A/ Re-Execute Command Line AT? Command Help AT*C Start SMS Interpreter AT*T Enter SMS Block Mode Protocol AT*V Activate V.25bis Mode AT*NOKIATEST Test Command AT+CESP Enter SMS Block Mode Protocol
SMS Commands SMS Text Mode AT+CSMS AT+CPMS AT+CMGF AT+CSCA AT+CSMP AT+CSDH AT+CSCB AT+CSAS AT+CRES AT+CNMI AT+CMGL AT+CMGR AT+CMGS AT+CMSS AT+CMGW AT+CMGD
Select Message Service Preferred Message Storage Message Format Service Centre Address Set Text Mode Parameters Show Text Mode Parameters Select Cell Broadcast Message Types Save Settings Restore Settings New Message Indications to TE List Messages Read Message Send Message Send Message from Storage Write Message to Memory Delete Message
SMS PDU Mode AT+CMGL AT+CMGR AT+CMGS AT+CMGW
List Messages Read Message Send Message Write Message to Memory
Pengantarmukaan Komputer dan Handphone
By: Muhammad Iqbal
Kembali lagi penulis mengingatkan bahwa sangat penting untuk anda mempunyai dokumen / Manual AT COMMAND dari perangkat yang anda gunakan dan lihatlah cocokan dengan daftar diatas mana yang support dan mana yang tidak ada pada perangkat yang anda gunakan. Koneksi Perangkat ke Komputer Ada banyak alternative yang dapat digunakan untuk menghubungkan computer kita dengan perangkat HP atau Modem GSM, beberapa alternative tersebut yaitu: •
Menggunakan kabel data. Dibutuhkan kabel data spesifik untuk setiap merk HP. Nokia mempunyai bentuk sendiri, Motorolla dan siemens juga berbeda. Kabel ini akan menancap di port COM, atau ada juga yang di USB port.
Gambar. Beberapa Kabel Data HP Untuk modem GSM biasanya menggunakan port serial atau langsung ditancapkan di port USB, kabel data ini selalu akan diikutsertakan pada saat kita membeli. •
Menggunakan IrDA (Infrared) atau Bluetooth. Pada saat kita menginstal driver dari perangkat tersebut akan tercipta port baying yang kemudian digunakan sebagi port koneksi, tentunya HP / Modem yang kita gunakan juga mempunyai perangkat yang sama.
Rutin Penting Pemrograman AT COMMAND menggunakan Delphi. Melakukan Koneksi. function TfUtama.GoKonek; begin Konek := false; If Not fUtama.XComm1.Opened then fUtama.XComm1.OpenDevice; Pengantarmukaan Komputer dan Handphone
By: Muhammad Iqbal if XComm1.SendString('ATE1'#13) and (XComm1.WaitForString(['OK'], 2000) <> -1) then Konek := True; Result := Konek; end;
Mendapatkan info Peralatan yang digunakan. function TfUtama.SendGetData; var waktu: TDateTime; begin ReadyState := False; BatasStr := Batas; Buffer := ''; waktu := now; XComm1.SendString(Teks); while (Not ReadyState) and (SecondsBetween(waktu, Now) < 10) do Application.ProcessMessages; Result := Buffer; end;
procedure TfUtama.getInfo; var c, s: string; p, n, i: integer; l: TListItem; begin List.Text := buffer; s := List.Strings[1]; if Pos('AT+CGMI', Buffer) > 0 then begin c := copy(Buffer, pos('AT+CGMI', Buffer) + 2, length(Buffer)); Item.Text := c; l := LvPhone.Items.Add; l.Caption := 'Merk HP'; l.SubItems.Add(Item.Strings[2]); end; if Pos('AT+GMM', Buffer) > 0 then begin c := copy(Buffer, pos('AT+GMM', Buffer) + 2, length(Buffer)); Item.Text := c; l := LvPhone.Items.Add; l.Caption := 'Modem'; l.SubItems.Add(Item.Strings[2]); Pengantarmukaan Komputer dan Handphone
By: Muhammad Iqbal end; if Pos('AT+CGSN', Buffer) > 0 then begin c := copy(Buffer, pos('AT+CGSN', Buffer) + 2, length(Buffer)); Item.Text := c; l := LvPhone.Items.Add; l.Caption := 'I M E I'; l.SubItems.Add(Item.Strings[2]); end; if Pos('+COPS:', Buffer) > 0 then begin c := copy(Buffer, pos('+COPS:', Buffer) + 7, length(Buffer)); c := AnsiReplaceStr(c, ',', #13); Item.Text := c; l := LvPhone.Items.Add; l.Caption := 'Network Operator'; l.SubItems.Add(TrimAll(Item.Strings[2])); end; if Pos('+CSCA:', Buffer) > 0 then begin c := copy(Buffer, pos('+CSCA:', Buffer) + 7, length(Buffer)); c := AnsiReplaceStr(c, ',', #13); Item.Text := c; l := LvPhone.Items.Add; l.Caption := 'Service Center'; SMSC := TrimAll(Item.Strings[0]); l.SubItems.Add(SMSC); end; if Pos('+CIND:', Buffer) > 0 then begin c := copy(Buffer, pos('+CIND:', Buffer) + 7, length(Buffer)); i := 0; p := pos('("', c); while p > 0 do begin n := pos('",', c); s := copy(c, p + 2, n - p - 2); PhoneInfo[i] := s; Inc(i); Delete(c, p, n + 2); p := pos('("', c); end; JumlahPhoneInfo := i; end; end;
Kirim SMS function TfUtama.KirimSMS(Tujuan, Isi: string): boolean; var PDU, udhi, smstotal, smsref, Pengantarmukaan Komputer dan Handphone
By: Muhammad Iqbal tempisi, s: string; sms: tSMS; i, p: integer; begin if not konek then begin Result := false; exit; end; sms := TSMS.Create; sms.Number := tujuan; sms.RequestReply := cbReply.Checked; sms.FlashSMS := cbFlash.Checked; sms.StatusRequest := cbReport.Checked; sms.dcs := -1; Result := true; if length(isi) <= 160 then begin sms.Text := isi; sms.UDHI := ''; pdu := sms.PDU; s := SendGetData('AT+CMGS=' + inttostr(sms.tplength) + #13, '>'); s := SendGetData(PDU + #$1A, sOK); Result := pos(sOK, s) > 0; end else begin p := 153; smstotal := IntToHex((length(isi) div p) + 1, 2); smsRef := GetNextLongSMSRefference; udhi := '050003' + smsRef + smstotal; for i := 1 to StrToInt('$' + smstotal) do begin tempisi := Copy(isi, 1, p); Delete(isi, 1, p); sms.Text := tempisi; sms.UDHI := udhi + IntToHex(i, 2); pdu := sms.PDU; s := SendGetData('AT+CMGS=' + inttostr(sms.tplength) + #13, '>'); s := SendGetData(PDU + #$1A, sOK); Result := pos(sOK, s) > 0; end; end; sms.Free; end;
Cek SMS. procedure TfUtama.CekSMS; Pengantarmukaan Komputer dan Handphone
By: Muhammad Iqbal var nomer, tgl, s : string; i,j : integer; a, l: TListItem; sms : tSMS; begin if not Konek then exit; s := sendGetData('AT+CSMS=0'#13, sOK); if Pos(sOK, s) = 0 then begin ShowMessage('Media tidak mendukung fasilitas SMS'); exit; end; s := sendGetData('AT+CPMS="' + arSumber[cbSumber.ItemIndex] +'"'#13, sOK); if Pos(sOK, s) = 0 then begin ShowMessage('Tidak dapat memilih media ' + cbSumber.Text); exit; end; s := sendGetData('AT+CMGF=0'#13, sOK); if Pos(sOK, s) = 0 then begin ShowMessage('Tidak dapat memilih format PDU'); exit; end; List.Clear; sms := TSMS.Create; for j := 3 downto 0 do begin List.Text := SendGetData('AT+CMGL=' + IntToStr(j) +#13, sOK); i := 0; while i < List.Count do begin s := List.Strings[i]; if copy(s, 1, 7) = '+CMGL: ' then begin nomer := copy(s, 8, pos(',', s) - 8); inc(i); s := List.Strings[i]; sms.PDU := s; l := ListSMS.Items.Add; l.Caption := sms.number; if sms.TimeStamp > 0 then tgl := DateTimeToStr(sms.TimeStamp) else tgl := '-'; l.SubItems.Add(tgl); l.SubItems.Add(sms.Text); l.SubItems.Add('Phone'); l.SubItems.Add(arJenisSMS[j]); l.SubItems.Add(nomer); // index di HP Pengantarmukaan Komputer dan Handphone
By: Muhammad Iqbal l.SubItems.Add(nomer);
// id SMS
a := lvSMS.Items.Add; a.Caption := rubahKeNama(l.Caption); a.SubItems := l.SubItems; end; inc(i); end; end; sms.Free; end;
Format Protokol Data Unit (PDU) Hal pertama yang saya bahas adalah, bahwa setiap pengiriman SMS, baik dari HP menuju operator, atau sebaliknya, selalu menggunakan format PDU (Protocol Data Unit), yaitu paket data dimana pesan SMS dikemas, bersama informasi tanggal, nomor tujuan, nomor pengirim, nomor operator, jenis skema SMS, masa valid SMS, dan beberapa hal lain (tergantung jenis paketnya).Berikut ini adalah contoh PDU yang diterima oleh HP (New SMS atau Inbox): 07 91 2658050000F0 04 0C 91 265836164900 00 00 506020 31133180 04 C830FB0D
Dengan keterangan sebagai berikut: Oktet / Digit Hexa
Keterangan
Panjang atau jumlah pasangan digit dari nomor SMSC (service number) yang digunakan, dalam hal ini adalah 7 pasangan (14 digit berikutnya) Jenis nomor SMSC. Angka 91 menandakan format nomor 91 internasional (misal +6281xxx). Untuk 081xxx menggunakan angka 81. Nomor SMSC yang digunakan. Karena jumlah digit nomor SMS adalah ganjil, maka digit paling belakang 2658050000F0 dipasangkan dengan huruf F. Kalau diterjemahkan, nomor SMSC yang digunakan adalah +62855000000 (IM3) 04 Oktet pertama untuk pesan SMS yang diterima 0B Panjang digit dari nomor pengirim (0C hex = 12 desimal) 91 Jenis nomor pengirim (sama dengan jenis nomor SMSC) Nomor pengirim SMS, yang jika diterjemahkan adalah 265836164900 +628563619400 07
Pengantarmukaan Komputer dan Handphone
By: Muhammad Iqbal
00 00
Pengenal protokol, dalam hal ini adalah 0 Skema pengkodean SMS, juga bernilai 0 Waktu pengiriman, yang berarti 05-06-02 (2 Juni 2005), 506020 311331 dan jam 13:31:13. Sedangkan 80 adalah Timezone yang 80 digunakan. Panjang dari pesan SMS, dalam hal ini adalah 4 huruf 04 (dalam mode 7 bit). Pesan SMS dalam mode 7 bit. Jika diterjemahkan C830FB0D kedalam 8 bit, lalu dirubah ke ASCII, maka didapat pesan 'Halo' Yah, itu adalah sekilas tentang PDU, yang sering dihadapi untuk berurusan dengan SMS. Kecuali jika HP yang anda gunakan mendukung AT+CMGF=1, yang berarti kita dapat berkomunikasi dengan HP dalam Mode Teks! seperti HP saya, SE T610 :-) Kalau menggunakan mode teks, anda tidak berurusan dengan PDU, meski antara HP dengan operator masih menggunakan PDU. Programming Ketika pertama kali masuk delphi, ada 1 komponen yang mesti kita install terlebih dahulu, yaitu MS-Comm, yang digunakan untuk berkomunikasi dengan Port COM. Cara instalasi adalah sebagai berikut: •
Dari IDE Delphi, pada menu Component, pilih menu Import Active-X Control
•
Pada pilihan obyek, silakan pilih MSCommXX.ocx, lalu tekan tombol Install
•
Akan muncul beberapa dialog berikutnya, pilih saja yes atau ok :-)
Setelah Active-X terinstall, pada Tab Palette Active-X, akan muncul sebuah tombol dengan gambar telepon. Klik dan letakkan komponen tersebut pada Form, maka akan tercipta sebuah obyek dengan nama MSComm1. unit uKirim; interface procedure KirimSMS(smsc, Tujuan, Isi: string); const sOK = 'OK'; sERROR = 'ERROR'; ProXLsmsc ='62818445009'; Simpatismsc ='6281100000'; Mentarismsc ='62816124'; Pengantarmukaan Komputer dan Handphone
By: Muhammad Iqbal IM3smsc
='62855000000';
var lkirim : integer; implementation Uses uTerimaSMS; function text2PDU(text:string):string; var PDU : string; geser,panjang,tmp,tmp2,tmp3,n:byte; begin PDU :=''; panjang :=length(text); PDU :=PDU+inttohex(panjang,2); geser :=0; for n :=1 to panjang-1 do begin tmp2 :=ord(text[n]); if geser<>0 then tmp2 :=tmp2 shr geser; tmp :=ord(text[n+1]); if geser=7 then begin geser :=0; end else begin tmp3 :=8-(geser+1); if tmp3<>0 then tmp:=tmp shl tmp3; PDU :=PDU+inttohex((tmp or tmp2),2); inc(geser); end; end; if geser<7 then begin tmp2:=ord(text[panjang]); if(geser<>0)then tmp2:=tmp2 shr geser; PDU:=PDU+inttohex(tmp2,2); end; result:=PDU; end; function ConvertText(smsc,tipe,ref,tujuan,bentuk,skema,validitas,isi:string):string; var Pengantarmukaan Komputer dan Handphone
By: Muhammad Iqbal PDU,tmp :string; p, i :byte; begin PDU := ''; If length(smsc)=0 then begin result :=''; exit; end; if length(tipe)=0 then tipe :='11'; if length(ref)=0 then ref :='00'; if length(bentuk)=0 then bentuk :='00'; if length(skema)=0 then skema :='00'; if length(validitas)=0 then validitas :='FF'; If length(isi)=0 then begin result :=''; exit; end; if smsc[1]='0' then tmp :='81'+smsc else tmp :='91'+smsc; if(length(tmp)mod 2)<>0 then tmp :=tmp+'F'; p := length(tmp); PDU :=PDU + inttohex(p div 2,2) + tmp[1] + tmp[2]; for i:= 2 to length(tmp)div 2 do begin PDU :=PDU+tmp[i*2]; PDU :=PDU+tmp[(i*2)-1]; end; PDU :=PDU+tipe; PDU :=PDU+ref; if tujuan[1]='+' then tujuan:=copy(tujuan,2,length(tujuan)-1); PDU :=PDU+inttohex(length(tujuan),2); if(length(tujuan)mod 2)<>0 then tujuan:=tujuan+'F'; if tujuan[1]='0' then PDU :=PDU+'81' else begin PDU :=PDU+'91'; end; for i :=1 to length(tujuan)div 2 do begin PDU :=PDU+tujuan[i*2]; PDU :=PDU+tujuan[(i*2)-1]; end; PDU :=PDU+bentuk; PDU :=PDU+skema; PDU :=PDU+validitas; tmp := Text2PDU(isi); PDU :=PDU+tmp; i := length(tmp); lkirim := (length(PDU) - p) div 2; result :=PDU; end; function SendGetData(teks: string; tOK: string): string; Pengantarmukaan Komputer dan Handphone
By: Muhammad Iqbal var waktu : TDateTime; buffer : string; begin waktu := now; comm.Output := teks; sleep(500); buffer := ''; repeat buffer := buffer + comm.Input; until (pos(tOK, buffer) > 0) or (pos(sERROR, buffer) > 0) or (SecondsBetween(waktu,now) > 60); result := buffer; end; procedure KirimSMS; var PDU :string; begin PDU := ConvertText(IM3smsc,'','',Tujuan,'','','',isi); SendGetData('AT+CMGS=' + inttostr(lkirim) + #13, '>'); SendGetData(PDU + #$1A, sOK); end; begin end.
Komunikasi Buat sebuah tombol (Command Button) pada Form, beri caption 'Konek'. Lalu pada event On-Click tombol tersebut, ketik program berikut ini: procedure TForm1.Button1Click(Sender: TObject); var waktu: tDateTime; buffer: string; konek: boolean; begin if MSComm1.PortOpen then MSComm1.PortOpen := false; MSComm1.CommPort := 1; // isi dengan nomor COM // yang terhubung ke HP, // misal COM1, isi dengan 1 MSComm1.Settings := '19200,N,8,1'; // sesuaikan baudrate // dengan HP anda. // kebanyakan support 19200 MSComm1.InputLen := 0; Pengantarmukaan Komputer dan Handphone
By: Muhammad Iqbal MSComm1.PortOpen := true; Sleep(800); waktu := now; repeat MSComm1.Output := 'ATE1'#13; buffer := ''; repeat buffer := buffer + MSComm1.Input; until (Pos('OK', buffer) > 0) or (Pos('ERROR', buffer) > 0) or (secondsbetween(waktu, now) > 10); until (Pos('OK', buffer) > 0) or (secondsbetween(waktu, now) > 10); Konek := (Pos('OK', buffer) > 0); If Konek Then MessageDlg('Sukses konek ke HP', mtInformation, [mbOk], 0) else MessageDlg('Tidak dapat konek ke HP', mtError, [mbOk], 0); end;
Jalankan program, semoga tidak error. Lalu tekan tombol Button1. Jika koneksi sukses, yaitu jika HP merespon perintah 'ATE1' dengan ucapan 'OK', berarti koneksi dengan HP telah berhasil. Jika tidak, mungkin terjadi kekeliruan pada kabel, nomor Port atau setting BaudRate. Silakan dicek. Membaca SMS Bagi yang sering kirim-kiriman SMS, kalo cuma mengandalkan kapasitas penyimpanan dalam handset (handphone), suatu saat pasti pernah mengalami penuhnya inbox. Hal tersebut berlaku untuk jenis manusia yang sayang untuk menghapus SMS kiriman dari someone special. Tapi tidak berlaku untuk jenis manusia yang suka menulis ulang isi SMS ke dalam MS-Word (aku pernah menemukan manusia jenis ini)., sehingga Inboxnya tidak pernah penuh. Jika anda ingin mengandalkan PC untuk menyimpan isi inbox, anda dapat menggunakan banyak aplikasi siap pakai yang dapat digunakan untuk menyimpan atau mentransfer SMS. Saya sering menggunakan aplikasi bawaan dari vendor HP (PC Suite untuk Nokia, Data Suite untuk Siemens, ada juga untuk SonyEricsson), juga ada Logo Manager buatan pihak ketiga. Selain menggunakan aplikasi siap pakai tersebut, kali ini saya membahas bagaimana cara berkomunikasi langsung dengan HP, menggunakan ATCommand, lewat port serial. Pengantarmukaan Komputer dan Handphone
By: Muhammad Iqbal
Berikutnya adalah membaca SMS. Silakan tambahkan obyek Memo pada form, dan tambahkan tombol Button2, kemudian tuliskan kode ini pada event OnClick Button2: procedure TForm1.Button2Click(Sender: TObject); var waktu: tDateTime; buffer: string; begin MSComm1.Output := 'AT+CMGL=1' + #13; Sleep(500); waktu := now; repeat buffer := MSComm1.Input; Memo1.Text := Memo1.Text + buffer; until (pos(sOK, s) > 0) or (pos(sERROR, s) > 0) or (SecondsBetween(waktu,now) > 180); end;
Jika program dijalankan, lalu ditekan tombol Button2, maka program akan mengirim perintah AT+CMGL=1 ke HP, yang berarti, 'berikan aku daftar SMS yang ada di Inbox'. Sehingga nantinya semua isi Inbox akan dikirimkan ke program, tetapi masih dalam format PDU. procedure TForm1.Button3Click(Sender: TObject); begin CekSMS(Memo1); end;
Ketika tombol Button3 ditekan, maka SMS dalam Inbox dan SMS baru, akan dimasukkan kedalam Memo1. Berikut ini ketentuan AT+CMGL, •
AT+CMGL=0 : SMS baru
•
AT+CMGL=1 : SMS dalam Inbox (yang sudah terbaca)
•
AT+CMGL=2 : SMS Draft (belum terkirim)
•
AT+CMGL=3 : SMS Outbox (terkirim)
•
AT+CMGL=4 : Seluruh SMS (semua yang ada di Inbox, Outbox, Draft)
Mengirim SMS Kita memulai pembahasan dengan bagaimana cara membentuk PDU untuk dikirim. PDU yang diterima dari HP berbeda dengan PDU yang untuk dikirim, namun tetap menggunakan aturan yang sama. Perbedaannya terutama Pengantarmukaan Komputer dan Handphone
By: Muhammad Iqbal
pada field yang dikandung, baik nilai maupun fungsinya. Untuk lebih detail mengenai PDU yang diterima, silakan membaca artikel sebelumnya. Berikut ini struktur PDU untuk dikirim: 07 91 2658050000F0 11 00 0C 91 265836164900 00 00 FF 04 C830FB0D Keterangan: Oktet / Digit Hexa
Keterangan
Panjang atau jumlah pasangan digit dari nomor SMSC (service number) yang digunakan, dalam hal ini adalah 7 pasangan (14 digit berikutnya) Jenis nomor SMSC. Angka 91 menandakan format nomor 91 internasional (misal +6281xxx). Untuk 081xxx menggunakan angka 81. Nomor SMSC yang digunakan. Karena jumlah digit nomor SMS adalah ganjil, maka digit paling belakang dipasangkan 2658050000F0 dengan huruf F. Kalau diterjemahkan, nomor SMSC yang digunakan adalah +62855000000 (IM3) 11 Oktet pertama untuk PDU SMS untuk dikirim (SMS SUBMIT). TP-Message-Reference. Diisi "00" agar diisi otomatis oleh 00 handphone. 0C Panjang digit dari nomor penerima (0C hex = 12 desimal) 91 Jenis nomor penerima (sama dengan jenis nomor SMSC) Nomor penerima SMS, yang jika diterjemahkan adalah 265836164900 +628563619400 00 Pengenal protokol, dalam hal ini adalah 0. 00 Skema pengkodean SMS, juga bernilai 0. FF Validitas waktu. FF berarti maksimum. Panjang dari pesan SMS, dalam hal ini adalah 4 huruf (dalam 04 mode 7 bit). Pesan SMS dalam mode 7 bit. Jika diterjemahkan kedalam 8 C830FB0D bit, lalu dirubah ke ASCII, maka didapat pesan 'Halo' 07
Untuk handphone tertentu, kita dapat menghilangkan pemberian nomor SMSC pada PDU, untuk kemudian akan diisi oleh handphone sesuai dengan kartu yang sedang digunakan. Tapi untuk lebih amannya, kita sebutkan nomor SMSC yang digunakan. Pengantarmukaan Komputer dan Handphone
By: Muhammad Iqbal
Ketika PDU SMS selesai dibentuk, maka langkah selanjutnya adalah melakukan pengiriman PDU tersebut melalui port serial yang digunakan. Perintah yang pertama kali digunakan adalah AT+CMGS, dengan aturan sebagai berikut: AT+CMGS=<jumlah oktet PDU> <jumlah oktet PDU> diisi dengan jumlah pasangan dalam PDU yang terbentuk, dengan dikurangi SMSC. Dengan kata lain, kita menghitung jumlah oktet mulai dari kode SMS SUBMIT (11). Untuk contoh di atas, berarti jumlah digit dalam PDU adalah 36, yang berarti terdiri dari 18 oktet. Sehingga perintah yang digunakan adalah: AT+CMGS=18 Setelah itu, tunggu respon dari handphone. Kalau gagal, dengan berbagai alasan, maka yang dikembalikan adalah ERROR. Sedangkan jika perintah tersebut diijinkan, maka yang dikembalikan adalah karakter '>' (lebih besar). Jika perintah tersebut sukses, selanjutnya adalah menuliskan semua PDU tersebut ke handphone, dan diakhiri dengan penulisan karakter ASCII 26 (CTRL+Z). Jika sukses, maka yang dikembalikan adalah OK. SMS terkirim, semoga. Yang perlu diperhatikan adalah tentang pengaturan koneksinya. Karena masing-masing proses (kirim dan terima) membutuhkan koneksi ke handphone, maka harus diatur agar tidak terjadi proses terima dan kirim secara bersamaan. 1. Nomor SMS Centre Header pertama terbagi atas 3 subheader, yaitu: a. Jumlah pasangan heksadesimal SMS-centre dalam bilangan heksa b. National/internasional kode Untuk nasional, kode subheadernya adalah 81 Untuk Internasional, kode subheadernya adalah 91 c. No SMS Centre sendiri dalam bahasa heksa dibalik-balik. Jika tertinggal satu angka heksa yang tidak memiliki pasangan, angka tersebut akan dipasangkan denga F didepanya. 2. Tipe SMS Tipe SEND =1., jadi bilangan heksanya adalah 01 3. Nomor Referensi SMS Nomor referensi dibiarkan 0. jadi heksanya adalah 00. 4. Nomor Ponsel Penerima. Pengantarmukaan Komputer dan Handphone
By: Muhammad Iqbal
a. Jumlah bilangan decimal nomor ponsel yang dituju dalam bilangan heksa. b. National/internasional kode c. Nomor pasangan dibolak-balik. 5. Bentuk SMS 0 = 00 = dikirim sebagai SMS 1= 01 = dikirim sebagai telex 2 = 02 = dikirim sebagai fax 6. Skema Encoding Data I/O Ada dua skema yaitu: 1. Skema 7 Bit -> ditandai dengan angka 00 2. Skema 8 bit -> ditandai dengan angka lebih besar dari 0 yang diubah ke heksa. 7. Jangka Waktu sebelum SMS Expired Jika bagian ini di skip, berarti kita tidak membatasi waktu berlakunya SMS. Sedangkan jika kita mengisinya dengan bilangan heksa maka bilangan decimal dari heksa tersebut akan mewakili jumlah waktu validitas SMS. 8. Isi SMS a. Panjang isi (ex: “HELLO” = 05) b. Isi berupa pasangan bilangan heksa (lihat table diatas). Kemudian rubah ke 8 bit dengan menambah satu bit dummy yang bernilai 0. 9. gabungkan 8 header (langkah diatas). b7 0
0
0
0
1
1
1
1
b6 0
0
1
1
0
0
1
1
b5 0
1
0
2
0
1
0
1
0
1
2
3
4
5
6
7
b4 b3 b2 b1 0
0
0
0
0
0
0
0
1
1
0
0
1
0
2
0
0
1
1
0
1
0
0
1
0 0
@
SP 0 !
P
p
1
A
Q
A
q
2
B
R
B
r
3
3
C
S
C
s
0
4
4
D
T
D
t
0
1
5
%
5
E
U
E
u
1
1
0
6
&
6
F
V
F
v
1
1
1
7
‘
7
G
W
G
w
$
Pengantarmukaan Komputer dan Handphone
By: Muhammad Iqbal
1
0
0
0
8
(
8
H
X
H
x
1
0
0
1
9
)
9
I
Y
I
y
1
0
1
0
10 LF
*
:
J
Z
J
z
1
0
1
1
11
+
;
K
Ä
K
ä
1
1
0
0
12
,
<
L
Ö
L
ö
1
1
0
1
13 CR
-
=
M
1
1
1
0
14
.
>
N
1
1
1
1
15
/
?
O
ß
M Ü
N
ü
O
function KirimSMS(Tujuan, Isi: string): boolean; var PDU, udhi, smstotal, smsref, tempisi, s: string; sms: tSMS; i, p: integer; begin if not konek then begin Result := false; exit; end; sms := TSMS.Create; sms.Number := tujuan; sms.RequestReply := cbReply.Checked; sms.FlashSMS := cbFlash.Checked; sms.StatusRequest := cbReport.Checked; sms.dcs := -1; Result := true;
'>');
if length(isi) <= 160 then begin sms.Text := isi; sms.UDHI := ''; pdu := sms.PDU; s := SendGetData('AT+CMGS=' + inttostr(sms.tplength) + #13,
Pengantarmukaan Komputer dan Handphone
By: Muhammad Iqbal s := SendGetData(PDU + #$1A, sOK); Result := pos(sOK, s) > 0;
end else begin p := 153; smstotal := IntToHex((length(isi) div p) + 1, 2); smsRef := GetNextLongSMSRefference; udhi := '050003' + smsRef + smstotal; for i := 1 to StrToInt('$' + smstotal) do begin tempisi := Copy(isi, 1, p); Delete(isi, 1, p); sms.Text := tempisi; sms.UDHI := udhi + IntToHex(i, 2); pdu := sms.PDU; s := SendGetData('AT+CMGS=' + inttostr(sms.tplength) + #13, '>'); s := SendGetData(PDU + #$1A, sOK); Result := pos(sOK, s) > 0; end; end; sms.Free; end; procedure CekSMS; var nomer, tgl, s : string; i,j : integer; a, l: TListItem; sms : tSMS; begin if not Konek then exit; s := sendGetData('AT+CSMS=0'#13, sOK); if Pos(sOK, s) = 0 then begin ShowMessage('Media tidak mendukung fasilitas SMS'); exit; end; s := sendGetData('AT+CPMS="' + arSumber[cbSumber.ItemIndex] +'"'#13, sOK); if Pos(sOK, s) = 0 then begin ShowMessage('Tidak dapat memilih media ' + cbSumber.Text); exit; end; Pengantarmukaan Komputer dan Handphone
By: Muhammad Iqbal s := sendGetData('AT+CMGF=0'#13, sOK); if Pos(sOK, s) = 0 then begin ShowMessage('Tidak dapat memilih format PDU'); exit; end; List.Clear; sms := TSMS.Create; for j := 4 downto 0 do begin List.Text := SendGetData('AT+CMGL=' + IntToStr(j) +#13, sOK); i := 0; while i < List.Count do begin s := List.Strings[i]; if copy(s, 1, 7) = '+CMGL: ' then begin nomer := copy(s, 8, pos(',', s) - 8); inc(i); s := List.Strings[i]; sms.PDU := s; l := ListSMS.Items.Add; l.Caption := sms.number; if sms.TimeStamp > 0 then tgl := DateTimeToStr(sms.TimeStamp) else tgl := '-'; l.SubItems.Add(tgl); l.SubItems.Add(sms.Text); l.SubItems.Add('Phone'); l.SubItems.Add(arJenisSMS[j]); l.SubItems.Add(nomer); // index di HP l.SubItems.Add(nomer); // id SMS
end;
a := lvSMS.Items.Add; a.Caption := rubahKeNama(l.Caption); a.SubItems := l.SubItems; end; inc(i); end; end; sms.Free;
Pengantarmukaan Komputer dan Handphone