Nah...bagaimana jika modem/HP ga support teks mode ?
AT+CMGF=1<enter>
ERROR
AT+CMGF=0<enter>
OK
Maka kita perlu merubah modenya menjadi Mode PDU. Mode ini merupakan cara pengiriman sms "Irit bit" , dimana ketika diciptakan mungkin saja resource dari system GSM masih sedikit. Mungkin jika diciptakan jaman 2000an hal ini akan tidak dilakukan. Mari kita bahas secara pelan-pelan.
Pertama kita perlu mengenal istilah "OCTET" dan "SEPTET" . Octet merupakan mode 8 bit, sedangkan Septet merupakan mode data 7bit. Data yg dikirimkan semuanya memakai mode OCTET, sedangkan SEPTET merupakan system penghematan karakter ASCII yg 8 bit menjadi 7 bit. Pola karakter 7-bit GSM hampir mirip ASCII tetapi diadakan beberapa penyesuaian untuk symbol khusus (
baca lebih lanjut disini).
sebaiknya kita bahas dulu perubahan karakter 7-bit (SEPTET) menjadi OCTET. Kita ambil contoh sebuah kalimat "hellohello"
courtesy of www.dreamfabric.com
h | e | l | l | o | h | e | l | l | o |
104 | 101 | 108 | 108 | 111 | 104 | 101 | 108 | 108 | 111 |
1101000 | 1100101 | 1101100 | 1101100 | 1101111 | 1101000 | 1100101 | 1101100 | 1101100 | 1101111 |
|
|
|
|
|
|
|
|
|
|
kalimat "hellohello" terdiri dari 10 SEPTET , dan sesuai tabel (perhatikan highlight berwarna kuning), kita ambil secara bertahap bit terakhir (warna kuning) dan kemudian ditaruh di awal dari SEPTET sebelumnya sehingga membentuk OCTET seperti berikut :
|
|
|
|
|
|
|
|
|
110111 |
E8 | 32 | 9B | FD | 46 | 97 | D9 |
| EC | 37 |
Njlimet ? ndak juga ....kalo dibuat dalam actionscript seperti ini codingnya :
function konversi(textnya:String):String
{
var textbaru:String = new String;
var hasil:Number;
var char1:Number;
var char2:Number;
for(b=0 ; b< textnya.length ; b++)
{
char1=textnya.charCodeAt(b+1);
char2=textnya.charCodeAt(b);
hasil=( ((0x7F >> (7 - septet)) & char1 ) <<(8 - septet) ) +(char2 >> (septet - 1)) ;
if(hasil< 16 ) textbaru+="0";
textbaru+=hasil.toString(16).toUpperCase();
}
return textbaru;
}
Selanjutnya kita akan menambahkan beberapa header sebagai pelengkap pengirim sms seperti berikut:
Octet | Penjelasan |
00 | Panjang dari SMSC operator, kita gunakan "00" jika menggunakan SMSC default yg ada pada modem |
11 | Artinya SMS SUBMIT / kirim sms |
00 | Nomer referensi dari SMS yg dikirim, biarkan nilainya "00" agar ditentukan oleh operator |
0B | Panjang nomer tujuan |
81 | Format nomer tujuan, untuk mode sms local indonesia gunakan nilai 81 |
8051757367F6 | Nomer telepon yg ditulis sebagai semioctet, dimana jika jumlah nomer ganjil maka tambahkan karakter F dibelakang. Semioctet yg dimaksud adalah pola membalik 2 pasang angka, jika nomer 08 15 57 37 76 6F akan menjadi 80 51 75 73 67 F6 |
00 | TP-PID. Protocol identifier , biarkan nilainya "00" |
00 | TP-DCS. Data coding scheme. Untuk kirim sms biasa gunakan 00 |
AA | TP-Validity-Period. "AA" berarti sms berlaku maksimal 4 hari |
0A | Panjang septet atau panjang karakter, jadi karena panjang "hellohello" 10 septet, jadi nilainya 0A |
E8329BFD4697D9EC37 | TP-User-Data. Octet berikut adalah hasil konversi septet yg dibahas diatas. | |
kemudian octet ini disusun dan dihitung panjangnya ( 1 octet = 2 karakter = panjang total/2) dikurangi 1 (octet "00" awal tidak dihitung), sehingga pada terminal kita inputkan seperti berikut :
AT+CMGS=23<enter>
0011000B818051757367F60000AA0AE8329BFD4697D9EC37<ctrl+z>
Mbulet ? Bingung ? ga juga ....semuanya ada pola yg pasti kok...lalu gimana jika ingin kirim long SMS (>160 char) ? kita akan bahas pada bagian berikutnya LONG SMS-PDU
SELAMAT MENCOBA
Untuk simbol apa saja yang berbeda dengan ASCII standar?
BalasHapusJadi untuk penanganan simbol seperti @ bagaimana ya?
thx
ada di link ini : http://www.dreamfabric.com/sms/default_alphabet.html
BalasHapusjadi kudu di spesifikkan satu persatu, tapi kalo ku liat yg penting hanya @ dan $ , jadi di IF ketemu @ Then code = 0 , Else code=ASCII
dah berhasil mas, cukup simbol @ sama $ aja ya....
BalasHapusthx ya..