Anda di halaman 1dari 22

By: Muhammad Iqbal

Pengantar mukaa n
Komput er dan Handphon e
atau G SM/ CDMA Modem
Email: barcode_bima@yahoo.co.id 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 Answer Command
ATD Dial Command
ATH Hang Up Call
ATL Monitor Speaker Loudness
ATM Monitor Speaker Mode
ATO Go On-Line
ATP Set Pulse Dial as Default
ATT Set Tone Dial as Default
AT+CSTA Select Type of Address
Pengantarmukaan Komputer dan Handphone
By: Muhammad Iqbal

AT+CRC Cellular Result Codes

Data Card Control Commands


ATI Identification
ATS Select an S-register
ATZ Recall Stored Profile
AT&F Restore Factory Settings
AT&V View Active Configuration
AT&W Store Parameters in Given Profile
AT&Y Select Set as s Powerup Option
AT+CLCK Facility Lock Command
AT+COLP Connected Line Identification Presentation
AT+GCAP Request Complete Capabilities List
AT+GMI Request Manufacturer Identification
AT+GMM Request Model Identification
AT+GMR Request Revision Identification
AT+GSN Request Product Serial Number Identification
Phone Control Commands
AT+CBC Battery Charge
AT+CGMI Request Manufacturer Identification
AT+CGMM Request Model Identification
AT+CGMR Request Revision Identification
AT+CGSN Request Product Serial Number Identification
AT+CMEE Report Mobile Equipment Error
AT+CPAS Phone Activity Status
AT+CPBF Find Phone Book Entries
AT+CPBR Read Phone Book Entry
AT+CPBS Select Phone Book Memory Storage
AT+CPBW Write Phone Book Entry
AT+CSCS Select TE Character Set
AT+CSQ Signal Quality
Computer Data Card Interface Commands
ATE Command Echo
ATQ Result Code Suppression
ATV Define Response Format
ATX Response Range Selection
AT&C Define DCD Usage
AT&D Define DTR Usage
AT&K Select Flow Control
AT&Q Define Communications Mode Option
AT&S Define DSR Option
AT+ICF DTE-DCE Character Framing
AT+IFC DTE-DCE Local Flow Control
AT+IPR Fixed DTE Rate
Pengantarmukaan Komputer dan Handphone
By: Muhammad Iqbal

Service
AT+CLIP Calling Line Identification Presentation
AT+CR Service Reporting Control
AT+DR Data Compression Reporting
AT+ILRR DTE-DCE Local Rate Reporting
Network Communication Parameter Commands
ATB Communications Standard Option
AT+CBST Select Bearer Service Type
AT+CEER Extended Error Report
AT+CRLP Radio Link Protocol
AT+DS 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 Select Message Service
AT+CPMS Preferred Message Storage
AT+CMGF Message Format
AT+CSCA Service Centre Address
AT+CSMP Set Text Mode Parameters
AT+CSDH Show Text Mode Parameters
AT+CSCB Select Cell Broadcast Message Types
AT+CSAS Save Settings
AT+CRES Restore Settings
AT+CNMI New Message Indications to TE
AT+CMGL List Messages
AT+CMGR Read Message
AT+CMGS Send Message
AT+CMSS Send Message from Storage
AT+CMGW Write Message to Memory
AT+CMGD Delete Message
SMS PDU Mode
AT+CMGL List Messages
AT+CMGR Read Message
AT+CMGS Send Message
AT+CMGW 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
Keterangan
Hexa
Panjang atau jumlah pasangan digit dari nomor SMSC
07 (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
Pengantarmukaan Komputer dan Handphone
By: Muhammad Iqbal

00 Pengenal protokol, dalam hal ini adalah 0


00 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 AT-
Command, 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
Keterangan
Hexa
Panjang atau jumlah pasangan digit dari nomor SMSC (service
07 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'
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
b4 b3 b2 b1 0 1 2 3 4 5 6 7
0 0 0 0 0 @ SP 0 P p
0 0 0 1 1 ! 1 A Q A q
0 0 1 0 2 $ 2 B R B r
0 0 1 1 3 3 C S C s
0 1 0 0 4 4 D T D t
0 1 0 1 5 % 5 E U E u
0 1 1 0 6 & 6 F V F v
0 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 M
1 1 1 0 14 ß . > N Ü N ü
1 1 1 1 15 / ? O 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

a := lvSMS.Items.Add;
a.Caption := rubahKeNama(l.Caption);
a.SubItems := l.SubItems;
end;
inc(i);
end;
end;
sms.Free;
end;

Pengantarmukaan Komputer dan Handphone