Transmisi Citra Pada Perangkat Jaringan Sensor Visual Nirkabel Platform Imote2 Berbasis IEEE 802.15.4 ZigBee Embedded Linux 2

in #indonesian3 years ago

sebelumnya

BAB 3 Metode Penelitian

3.1 Lokasi dan Waktu Penelitian

Pengamatan dan pengambilan data dilakukan di Laboratorium Sistem Komunikasi, Jurusan Teknik Elektro, Fakultas, Universitas Udayana, Jimbaran dan di ruang konferensi, GDLN, Kampus Sudirman, Universitas Udayana. Rencana jadwal penelitian dimulai dari akhir bulan Mei 2014 dan harus selesai sebelum akhir Nopember 2014 lebih detail terdapat di bagian Lampiran.

3.2 Sumber dan Jenis Data Penelitian

Sumber data dapat dikelompokkan 2 jenis:

  1. Data Primer: Berupa nilai konsumsi daya listrik, memory, dan waktu dari perangkat JSN Imote2.
  2. Data Sekunder: Berupa skema penelitian, spesifikasi perangkat, dan prosedur implementasi IEEE 802.15.4 Zigbee pada JSVN Imote2 dalam transmisi citra.

Jenis data juga dikelompokkan menjadi 2 jenis:

  1. Data Kuantitatif: Merupakan data yang berbentuk angka, pada penelitian ini adalah nilai daya listrik, memory, dan waktu, ataupun perhitungan suatu nilai yang diturunkan dari data primer.
  2. Data Kualitatif: Merupakan data yang tidak berbentuk angka, pada penelitian ini adalah pernyataan kinerja perangkat JSVN Imote2 dari berbagai kondisi yang diterapkan.Selain itu adalah data berupa grafik, dan pengimplementasian IEEE 802.15.4 Zigbee dalam transmisi citra.

3.3 Instrumen dan Bahan Penelitian

Instrumen penelitian dapat dilihat pada Tabel 3.1 – Tabel 3.5. Perangkat JSVN Imote2 dapat dilihat pada Gambar 2.10.

Tabel 3.1 – Tabel 3.5 Spesifikasi Instrumen
NO Instrumen Spesifikasi Fungsi
1 Laptop Intel® Pentium® dual – core processor T4200 (2.0 GHz, 800 MHz FSB, 1 MB L2 cache) Sebagai pemberi perintah dalam transmisi.
Mobile Intel® Graphics Media Accelerator 4500MHD
1GB DDR2
128 WXGA Acer CrystalBriteTM LCD
250GB HDD
Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet Controller
Atheros Communications Inc. AR928X Wireless Network Adapter
Operating System Kali Linux 1 32 bit
2 Perangkat JSVN Imote2 Radio board (IPR2400/IPR2410). Tranceiver sebagai pengirim citra, receiver sebagai penerima citra.
Multimedia Sensor board (IMB400).
Interface board (IIB400).
Power Supply Board (IBB2400).
Sistem operasi Embedded Linux 2.6.29.1 RC 1.1 untuk ARM
Radio board (IPR2400/IPR2410). PXA271 XScale® processor @ [13–416] Mhz. Sebagai perangkat yang melakukan komputasi dan penyedia media komunikasi radio untuk transmisi nirkabel.
Wireless MMX coprocessor.
256kB SRAM, 32MB FLASH, 32MB SDRAM.
Integrated 802.15.4 radio, support for external radios through SDIO and UART. Max data rate 250 Kbps point-to-point.
Integrated 2.4GHz antenna.
Multicolor status indicator LED.
Basic and advanced expansion connectors supporting : 3xUART, I2C, 2xSPI, SDIO, I2S, AC97, USB host, Camera I/F, GPIO.
Mini-USB port for direct PC connection.
Size: 48 mm x 36 mm. PCB thickness 1.75 mm
Multimedia Sensor board (IMB400). Camera
Image resolution up to 640x480 pixels, 30 fps max. RGB, YcbCr or YUV formats.
Hardware image scaling and filtering – automatic exposure, gain, white balance, black level.
Image controls include saturation, hue, gamma, sharpness.
Audio Codec
Sampling rates up to 48kHz, mono.
SNR > 94dB, THD < -80dB
Programmable filters for noise suppression.
PIR Sensor
Maximum range ~ 5m. Detection Angles 80-100 degrees
Interface board (IIB400). Mote connectors 2x Advanced (male/female). Sebagai penghubung antar radio processor board dengan sensor board atau perangkat lainnya.
USB connector mini-B female.
Serial port A virtual UART with RTS/CTS flow control.
Sertial port B virtual UART without hardware flow control.
JTAG port standard 20-pin connector.
Size 48mm x 36mm x 14m. Weight 11g
3 Kabel USB Sebagai penghubung PC dengan JSVNplatform Imote2.
4 Multimeter Sebagai pengukur konsumsi daya listrik.

Bahan penelitian merupakan citra yang ditangkap dari sensor kamera perangkat JSVN Imote2 pada tanggal 9 Mei 2014 di Laboratorium Sistem Komunikasi, Jurusan Teknik Elektro, Universitas Udayana dengan format Portable Pixelmap Graphic (.ppm), resolusi 480 x 640 pixel pada Gambar 3.1, dengan besar file 921.6 KB, dan media transmisi berbasis IEEE 802.15.4 Zigbee.

Gambar 3.1 Bahan penelitian.png

Gambar 3.1 Bahan penelitian

3.4 Tahapan Penelitian

Secara keseluruhan tahap penelitian terdiri dari 2 tahap. Tahap pertama adalah tahap prosedur pengimplementasian transmisi citra menggunakan media transmisi IEEE 802.15.4 Zigbee pada JSVN platform Imote2 dengan sistem operasi embedded Linux. Dijelaskan mekanisme agar dapat mentransmisikan citra. Tahap kedua adalah testbed menguji kinerja JSVN dalam transmisi citra. Kinerja ditentukan oleh konsumsi daya listrik, waktu yang dibutuhkan untuk transmisi, dan besar memory yang digunakan. Secara umum gambaran tahapan dapat dilihat pada Gambar 3.2.

Gambar 3.2 Skema dasar penelitian.PNG

Gambar 3.2 Skema dasar penelitian

3.4.1 Implementasi IEEE 802.15.4 Zigbee untuk transmisi citra

Radio di Imote2 dengan OS Linux dijalankan menggunakan driver Tosmac. Disediakan script oleh Tosmac untuk transmit dan receive yang akan disesuaikan untuk transmisi citra, dapat dilihat sebagai berikut:

//************************************************************ 
// 
// blocking.c 
// 
// Gefan Zhang 
// 
//************************************************************* 
#include <stdio.h> 
#include <fcntl.h> 
#include <unistd.h> 
#include <sys/ioctl.h> 
#include "tosmac.h" 

void msg_init(TOS_Msg* pMsg) 
{ 
   pMsg->length = 0; 
   pMsg->fcfhi = 0; 
   pMsg->fcflo = 0; 
   pMsg->dsn = 0; 
   pMsg->destpan = 0; 
   pMsg->addr = 0; 
   pMsg->type = 0; 
   pMsg->group = 0; 
   memset(pMsg->data, 0, TOSH_DATA_LENGTH); 
   pMsg->strength = 0; 
   pMsg->lqi = 0; 
   pMsg->crc = 0; 
   pMsg->ack = 0; 
   pMsg->time = 0; 
} 

//--------------------- main ------------------------------- 

int main(int argc, char* argv[]) 
{ 
  int tosmac_dev; 
  TOS_Msg recv_pkt; 
  TOS_Msg send_pkt; 
  // open as blocking mode 
  tosmac_dev = open(TOSMAC_DEVICE, O_RDWR); 
  if (tosmac_dev < 0) 
  { 
    fprintf(stderr, "Open error: %s\n", TOSMAC_DEVICE); 
    return 1; 
  } 
  msg_init(&send_pkt); 
  send_pkt.addr = 99; 
//  memcpy(send_pkt.data, "DATA for test", 14); 
  memcpy(send_pkt.data, "0000000000000", 14); 
  send_pkt.length = 14; 
  printf("User write to driver\n");  
  write(tosmac_dev, (TOS_Msg*)&send_pkt, sizeof(TOS_Msg)); 
  // close device 
  close (tosmac_dev); 
  return 0; 
}
//************************************************************ 
// 
// blocking.c 
// 
// Gefan Zhang 
// 
//************************************************************* 
#include <stdio.h> 
#include <fcntl.h> 
#include <unistd.h> 
#include <sys/ioctl.h> 
#include "tosmac.h" 
void msg_init(TOS_Msg* pMsg) 
{ 
   pMsg->length = 0; 
   pMsg->fcfhi = 0; 
   pMsg->fcflo = 0; 
   pMsg->dsn = 0; 
   pMsg->destpan = 0; 
   pMsg->addr = 0; 
   pMsg->type = 0; 
   pMsg->group = 0; 
   memset(pMsg->data, 0, TOSH_DATA_LENGTH); 
   pMsg->strength = 0; 
   pMsg->crc = 0; 
   pMsg->lqi = 0; 
   pMsg->ack = 0; 
   pMsg->time = 0; 
} 
//--------------------- main ------------------------------- 
 
int main(int argc, char* argv[]) 
{ 
  int tosmac_dev; 
  TOS_Msg recv_pkt; 
  TOS_Msg send_pkt; 
  // open as blocking mode 
  tosmac_dev = open(TOSMAC_DEVICE, O_RDWR); 
  if (tosmac_dev < 0) 
  { 
    fprintf(stderr, "Open error: %s\n", TOSMAC_DEVICE); 
    return 1; 
  } 
  printf("User read from driver:\n"); 
  read(tosmac_dev, &recv_pkt, sizeof(TOS_Msg));// != sizeof(TOS_Msg); 
  printf("length is %d\n", recv_pkt.length); 
  printf("data is %s\n", recv_pkt.data); 
  // close device 
  close (tosmac_dev); 
  return 0; 
} 

3.4.2 Testbed

Testbed menggunakan 2 perangkat JSVN Imote2 dimana satu berfungsi sebagai transmitter dan satunya lagi berfungsi sebagai receiver. Pada transmitter dilakukan penangkapan citra dengan sensor kamera. Pada transmitter dilakukan transmisi citra ke receiver melalui media nirkabel berbasis IEEE 802.15.4 Zigbee. Penangkap citra telah dilakukan di penelitian sebelumnya, oleh karena itu hanya diamati pada kompresi dan transmisi. Citra yang ditransmisi terdapat 2 jenis yaitu citra raw dari hasil penangkapan sensor IMB400 dan citra raw yang diolah berdasarkan standar JPEG2000 dengan rasio 1, 5, dan 10 dimana rasio adalah pembatas kapasitas saluran. Rasio 5 berarti jumlah bit dari citra terkompresi dibatasi maksimal 1/5 dari jumlah bit aslinya, dan rasio 10 bearti dibatasi maksimal 1/10 dari jumlah bit aslinya.

Pada saat transmisi dilakukan pengukuran konsumsi daya listrik, memory, dan waktu pada transmitter. Pengukuran konsumsi daya listrik menggunakan multimeter dengan obyek pengukuran adalah baterai pada power supply board (IBB2400). Pengukuran daya listrik dilakukan dengan mengukur drop tegangan dan drop arus, dengan kata lain adalah selisih nilai daya listrik sebelum penelitian dan sesudah penelitian. Secara khusus mengukur konsumsi daya listrik dimulai dari pemberian perintah untuk transmisi oleh komputer hingga citra selesai ditransmisikan, demikian pula konsumsi waktu. Pengukuran konsumsi dimulai dari pemberian perintah oleh komputer bukan dari dimulainya transmisi citra karena juga melibatkan aspek sistem operasi yang digunakan yaitu embedded Linux. Data hasil pengukuran adalah dari satu kali penelitian. Memory berdasarkan tampilan dari Terminal saat akses transmitter. Citra yang telah ditransmisi dilakukan pengukuran PSNR. Secara umum testbed dapat dilihat pada Gambar 3.3, Skenario akan dijelaskan pada bagian berikut:

Gambar 3.3 Skema testbed.PNG

Gambar 3.3 Skema testbed

  1. Skenario 1
    • Disisipkan citra berdasarkan bahan penelitian ke Imote2 (pre-store).
    • Penyiapan Imote2.
    • Pengukuran tegangan dan arus baterai sebelum transmisi.
    • Transmisi citra dari transmitter ke receiver dengan jarak 5 meter dapat dilihat pada Gambar 3.4 dan Gambar 3.5.
    • Pengukuran virtual memory yang digunakan program transmisi.
    • Pengukuran lama waktu dibutuhkan untuk transmisi.
    • Pengukuran tegangan dan arus batterai setelah transmisi.
    • Pengukuran nilai PSNR citra.
    • Penelitian diulang dengan jarak 10, dan 15 meter dapat dilihat pada Gambar 3.6 – Gambar 3.9.
  2. Skenario 2
    • Penyiapan Imote2.
    • Pengukuran tegangan dan arus baterai sebelum kompresi.
    • Dilakukan kompresi citra pada transmitter dengan rasio 1.
    • Pengukuran virtual memory yang digunakan program kompresi.
    • Pengukuran lama waktu dibutuhkan untuk kompresi.
    • Pengukuran tegangan dan arus baterai setelah kompresi.
    • Pengukuran tegangan dan arus baterai sebelum transmisi.
    • Transmisi citra dari transmitter ke receiver dengan jarak 5 meter.
    • Pengukuran virtual memory yang digunakan program transmisi.
    • Pengukuran lama waktu dibutuhkan untuk transmisi.
    • Pengukuran tegangan dan arus baterai setelah transmisi.
    • Pengukuran nilai PSNR.
    • Penelitian diulang dengan rasio kompresi 5, dan 10.
    • Penelitian diulang dengan jarak 10, dan 15 meter.

Gambar 3.4 Peta lab sistem komunikasi penelitian jarak 5 meter.PNG

Gambar 3.4 Peta lab sistem komunikasi penelitian jarak 5 meter

Gambar 3.5 Lab sistem komunikasi penelitian jarak 5 meter.png

Gambar 3.5 Lab sistem komunikasi penelitian jarak 5 meter

Gambar 3.6 Peta lab sistem komunikasi penelitian jarak 10 meter.PNG

Gambar 3.6 Peta lab sistem komunikasi penelitian jarak 10 meter

Gambar 3.7 Lab sistem komunikasi penelitian jarak 10 meter.png

Gambar 3.7 Lab sistem komunikasi penelitian jarak 10 meter

Gambar 3.8 Peta ruang konferensi penelitian jarak 15 meter.PNG

Gambar 3.8 Peta ruang konferensi penelitian jarak 15 meter

Gambar 3.9 Ruang konferensi penelitian jarak 15 meter.png

Gambar 3.9 Ruang konferensi penelitian jarak 15 meter

3.5 Alur Analisis

Pada bagian ini akan digambarkan tahap penelitian secara diagram alur / flowchart pada Gambar 3.10, Gambar 3.11, dan Gambar 3.12. Penelitian keseluruhan sebagai berikut:

  1. Menentukan prosedur transmisi citra.
  2. Menyiapkan citra raw ke Imote2 yang bersifat sebagai transmitter untuk ditransmisikan, kompresi akan dilakukan di Imote2.
  3. Melakukan penelitian dengan jarak antar Imote2 5, 10, dan 15 meter untuk masing-masing transmisi citra raw dan yang telah diolah berdasarkan JPEG2000.
  4. Mencari konsumsi daya listrik setiap tahap transmisi citra.
  5. Mendapatkan waktu yang dibutuhkan setiap tahap dan memory yang digunakan.
  6. Dari semua data yang didapatkan ditentukan skema yang optimal.

Gambar 3.10 Alur penelitian 1.PNG

Gambar 3.10 Alur penelitian 1

Gambar 3.11 Alur Penelitian 2.PNG

Gambar 3.11 Alur Penelitian 2

Gambar 3.12 Alur Penelitian 2.PNG

Gambar 3.12 Alur Penelitian 2

BAB IV Pembahasan

Secara keseluruhan pada BAB ini dibahas program transmisi citra, Imote2 Linux sebagai testbed dari kompilasi program transmisi dan software kompresi JPEG2000 hingga pemberian perintah secara nirkabel ke Imote2 yang bertugas sebagai pengirim, dan bagian akhir pada BAB ini ditampilkan dan dianalisa kinerja dari perangkat Imote2. Dari hasil penelitian ternyata melakukan kompresi sebelum transmisi sangat membantu untuk meringankan beban transmisi, dan menariknya proses kompresi itu sendiri tidak terlalu membebankan perangkat, sehingga sangat dianjurkan untuk menggunakan kompresi.

Inti dari penelitian ini adalah agar Imote2 Linux dapat difungsikan sebagai testbed. Jika diringkas kembali, penelitian sebelumnya telah berhasil mengembed Linux ke JSVN platform Imote2 dan mentransmisi data acak, maka di penelitian ini adalah untuk mentransmisikan data citra. Kode program pada subbab 3.4.1 adalah program untuk mengirim data karakter maksimal 28 byte, kemudian ditampilkan di layar. Untuk mengirim citra yang dalam bentuk file, kode tersebut harus dimodifikasi agar di sisi pengirim dapat membaca dan mengirim file, dan di sisi penerima dapat menerima dan menyimpan file tersebut (tidak sebatas ditampilkan di layar), juga harus dapat mentransmisikan file lebih dari 28 byte.

Proses agar Imote2 Linux dapat berfungsi sebagai testbed dapat diringkas pada Gambar 4.1. Pertama membuat kode program, lebih lengkap dibahas di subbab 4.1. Kemudian program dikompilasi di subbab 4.2 dan subbab 4.3, dan diembed ke Imote2, illustrasi dapat dilihat pada Gambar 4.2. Terakhir Imote2 dikonfigurasi agar dapat menerima perintah via radio, dengan kata lain setelah transmitter dihidupkan, siap untuk menerima perintah, dapat diilustrasikan pada Gambar 4.3. Perintah dapat berupa mengkompresi, maupun mentransmisi citra seperti illustrasi pada Gambar 4.4. Hal ini dilakukan karena transmitter ditenagai dengan baterai (tanpa kabel), sehingga komunikasi hanya tersedia lewat radio.

Gambar 4.1 Alur diagram implementasi testbed.PNG

Gambar 4.1 Alur diagram implementasi testbed

Gambar 4.2 Illustrasi kompilasi dan embed program.png

Gambar 4.2 Illustrasi kompilasi dan embed program

Gambar 4.3 Illustrasi ketika startup a.png

Gambar 4.3 Illustrasi ketika startup b.png

Gambar 4.3 Illustrasi ketika startup

Gambar 4.4 Illustrasi testbed a.png

Gambar 4.4 Illustrasi testbed b.png

Gambar 4.4 Illustrasi testbed c.png

Gambar 4.4 Illustrasi testbed d.png

Gambar 4.4 Illustrasi testbed

4.1 Program Transmisi

Transmisi menggunakan radio pada Imote2. Di penelitian sebelumnya dijelaskan pada subbab 2.1, menggunakan driver dari Tosmac untuk menjalan radio di Imote2 Linux, disini tetap menggunakan driver yang sama. Untuk transmisi diperlukan 2 program yaitu program untuk mengirim dan menerima. Kedua program tersebut ditulis dalam bahasa C. Khusus pada penelitian ini mengikuti ketentuan dari header tosmac yaitu payload data yang dikirim maksimal 28 byte. Secara keseluruhan di sisi pengirim membaca file citra yang akan dikirim, di penerima akan membuat file baru dan menulis data yang diterima ke file tersebut. Pengiriman dilakukan secara bertahap dengan memecah tile masing-masing berukuran 28 byte (tidak sekaligus).

4.2 Program Pengirim

Sintaks berikut ini menunjukkan program pengirim dengan nama file “send_file_advance.c” yang dilakukan pada penelitian ini dan dijelaskan sebagai berikut:

1 //************************************************************ 
2 // 
3 // blocking.c 
4 // 
5 // Gefan Zhang 
6 // 
7 //************************************************************* 
8 // Modified by : Fajar Purnama 

Baris 1 – 8 merupakan komentar berisi informasi pembuat program dan penulis yang memodifikasi. Komentar dapat ditandai dengan “//” atau dimulai ”/” dan diakhiri dengan “/” (yang tidak bold). Baris 5 merupakan penulis pertama dari program, sedangkan baris 8 merupakan nama penulis yang memodifikasi program.

9 #include <stdio.h> 
10 #include <fcntl.h> 
11 #include <unistd.h> 
12 #include <sys/ioctl.h> 
13 #include <tosmac.h> 

Baris 9 – 13 menunjukkan header yang digunakan pada program ini, header berisi definisi kode yang digunakan. Untuk menggunakan header dapat menggunakan karakter “#”, karakter ini menunjukkan script yang dibutuhkan oleh program. Di baris 9 terdapat “stdio.h” merupakan header dasar untuk semua program bahasa C yang mendefinisikan perintah “printf” untuk menampilkan ke layar, “while” untuk looping, serta operasi arithmetic, dan masih banyak lainnya. Baris 10 “Fcntl.h” mendefinisikan perintah “open” untuk membuka file serta “close” untuk menutup dan “create” untuk membuat, baris 11 “unistd.h” mendefinisikan perintah “read” untuk membaca file dan “write” untuk menulis data ke file, dan baris 13 “tosmac.h” mengatur variable pada driver tosmac (radio).

14 void msg_init(TOS_Msg* pMsg) 
15 { 
16 pMsg->length = 0; 
17 pMsg->fcfhi = 0; 
18 pMsg->fcflo = 0; 
19 pMsg->dsn = 0; 
20 pMsg->destpan = 0; 
21 pMsg->addr = 0; 
22 pMsg->type = 0; 
23 pMsg->group = 0; 
24 memset(pMsg->data, 0, TOSH_DATA_LENGTH); // 28 bytes usually 
25 pMsg->strength = 0; 
26 pMsg->lqi = 0; 
27 pMsg->crc = 0; 
28 pMsg->ack = 0; 
29 pMsg->time = 0; 
30 } 

Baris 14 – 30 ditulis dalam bentuk fungsi “msg_init” merupakan fungsi untuk menginisialisasikan variable pada paket seperti address, group, dan payload yang terdapat pada header “tosmac.h” untuk ditransmisikan.

Inti program “int main” dimulai dari baris 32.

31 //---Main-Program---// 
32 int main(int argc, const char *argv[]){ 
33 // Check Error 
34 if(argv[1]==NULL){ 
35 printf("Usage: ./send_file [file], example: ./send_file_advance image.ppm"); 
36 return 1; 
37 } 
38 //sleep(10); //pause for 10 sec (give time for receiver to prepare) cross this out if not needed 
39 // Declaration 
40 int tosmac_dev, file, file_size, h, i, j, k; 
41 //char *packet; 
42 TOS_Msg recv_pkt; 
43 TOS_Msg send_pkt; 
44 // open as blocking mode 
45 tosmac_dev = open(TOSMAC_DEVICE, O_RDWR); 
46 if (tosmac_dev < 0) 
47 { 
48 fprintf(stderr, "Open error: %s\n", TOSMAC_DEVICE); 
49 
50 return 1; 
51 } 
52 // open file to be send 
53 file = open(argv[1], O_RDWR); // open file 
54 file_size = lseek(file,0,SEEK_END); // calculate filesize by going to final byte of file using lseek function from fcntl.h 
55 lseek(file,0,SEEK_SET); // return to start of file 
56 msg_init(&send_pkt); 
57 send_pkt.addr = 99;  // Address 
58 h = file_size/TOSH_DATA_LENGTH; // How much packet or times of transmission should be prepared (using div) 
59 i = file_size%TOSH_DATA_LENGTH; // Remainder of "h" (using mod) 
60 j = 0; 
61 k = 0; 

Baris 33 – 37 terdapat pemeriksaan error bila perintah yang dimasukkan tidak sesuai, Baris 39 – 43 adalah bagian deklarasi variable, Baris 44 – 51 membuka radio, baris 52 – 55 membuka file, dan baris 56 – 61 menentukan paket. Pada baris 32 “int main” terdapat “int argc, int argv[]” agar program dapat dieksekusi dengan memilih file yang diinginkan “./send_file_advance argv[1]”, seperti yang didefinisikan pada baris 53 “file = open(argv[1], O_RDWR)”. Jika tidak terdapat input maka akan menampilkan cara penggunaan program di baris 35 yaitu “./send_file_advance file” yang diatur pada pernyataan “if(argv[1]==NULL)” baris 34, dan baris 36 “return 1” untuk memberik kode error pada program jika input sesuai dengan pernyataan baris 34. Baris 45 “tosmac_dev = open(TOSMAC_DEVICE, O_RDWR)” adalah untuk membuka radio dimana “TOSMAC_DEVICE” merupakan “/dev/tosmac” seperti didefinisikan pada “tosmac.h”, “O_RDWR” agar file dibuka read & write, dapat dilihat pada “fcntl.h”. Baris 55 “file_size = lseek(file,0,SEEK_END)” untuk mencari ukuran file dengan menuju ke bit terakhir dari file untuk mengembalikannya ke bit awal dengan kode “lseek(file,0,SEEK_SET)”. Didefinisikan paket yang akan dikirim adalah “TOS_Msg send_pkt” (baris 42) dan yang diterima “TOS_Msg recv_pkt” (baris 43), dimana “TOS_Msg” adalah struktur paket yang didefinisikan di “tosmac.h”. Baris 57 “send_pkt.addr = 99” menentukan agar address pada pengirim adalah 99. Baris 58 “h” merupakan jumlah paket dengan membagi besar file dengan maksimal data payload “TOSH_DATA_LENGTH”, disini adalah 28, sedangkan nilai “i” (baris 59) merupakan sisa pembagian dari “h” yang merupakan byte terakhir yang akan dikirim.

62 while(j+1<h){ // Because j (requested file order) starts at zero 
63 so it's j+1 
64 // Use this if need resting time for when k reach certain accumulative bytes // 
65 /*if(k%1400==0){ 
66 sleep(1); 
67 }*/ 
68 read(tosmac_dev, (TOS_Msg*)&recv_pkt, sizeof(TOS_Msg));   
69 // Waiting for receiver to send a packet (for ACK), it will wait until receiver is ready 
70 j = recv_pkt.data[1]+3000; // Requested order of file in packet, 3000 because it starts at -3000, the data type of data doesn't allow over 3000 while 3300 packet is needed, So we start from below 0. 
71 printf("Packet %d/%d\n",j,h); // Verbose 
72 k = j*TOSH_DATA_LENGTH; // Packet converted into byte 
73 lseek(file,k,SEEK_SET); // Seek to the requested byte 
74 read(file,send_pkt.data,TOSH_DATA_LENGTH); // reading 28 byte from file, then read next 28 due to while() loop, file >>>>> send_pkt.data 
75 send_pkt.group = 7; // Group identifier, modify this as wished 
76 // writing packet to device 
77 printf("User writing %d bytes to driver\n", TOSH_DATA_LENGTH);  
78 // verbose  
79 write(tosmac_dev, (TOS_Msg*)&send_pkt, sizeof(TOS_Msg));  
80 // writing to device, (TOS_Msg*)&send_pkt >>>>> tosmac_dev, & it's a pointer 
81 k += TOSH_DATA_LENGTH; // accumulative payload sent 
82 printf("%d bytes written\n", k); // verbose 
83 // use this function if for some reason need to slow down 
84 // usleep(30000); // in micro seconds 
85 } 
86 // Sending the last bytes 
87 read(tosmac_dev, (TOS_Msg*)&recv_pkt, sizeof(TOS_Msg));   
88 // Waiting for receiver to send a packet (for ACK), it will wait 
89 until receiver is ready 
90 read(file,send_pkt.data,i); // i = remainder  
91 printf("User writing %d bytes to driver\n", i); // verbose 
92 write(tosmac_dev, (TOS_Msg*)&send_pkt, i); // final sending 
93 k += i; // accumulative payload sent 
94 memcpy(send_pkt.data,"0S0T1O1P0",9); 
95 write(tosmac_dev, (TOS_Msg*)&send_pkt, 9); 
96 printf("%d bytes written, FINISH!!\n", k); // verbose 

Baris 62 – 85 merupakan proses transmisi dan baris 85 – 96 adalah transmisi yang terakhir. Proses transmisi terdapat dalam baris 62 while loop dimana file dikirim setiap 28 byte. Looping akan berhenti jika “j” mencapai nilai “h” (jumlah paket). Sebelum transmisi ditunggu informasi dari penerima yang berisi jumlah paket yang diterima pada baris 68 “read(tosmac_dev, (TOS_Msg*)&recv_pkt, sizeof(TOS_Msg))” (kode ini akan membaca data yang diterima radio “tosmac_dev” sebesar “sizeof(TOS_Msg)” yang kemudian ditulis ke pointer “&recv_pkt”). Nilai yang terkandung dalam “recv_pkt” akan dimasukkan ke “j” (baris 70). Operasi arithmetic pada “k” (baris 72) mengkonversi jumlah paket ke jumlah byte yang diterima. Setelah itu akan menuju ke byte berikutnya yang akan dikirim pada baris 73 “lseek(file,k,SEEK_SET)”. Kemudian Pada baris 75, sizeof(TOS_Msg))” (kode ini akan menulis “&send_pkt” sebesar “sizeof(TOS_Msg)” ke “tosmac_dev”). Setelah while loop adalah pengiriman byte terakhir “i” yang merupakan sisa pembagian dari “j”, terakhir akan mengirim kode “0S0T1O1P0” ke receiver untuk memberi tahu bawha transmisi telah berakhir.

97 //close device   
98 close(tosmac_dev); 
99 close(file);  
100 return 0; 
101 } 

Baris 97 – 101 penutupan radio dan file serta akhir program, kode “close” untuk menutup file yang didefinisikan pada “fcntl.h”.

4.1.2 Program Penerima

Sintaks berikut menunjukkan program penerima dengan nama file “recv_file_advance.c” yang dilakukan pada penelitian dan secara keseluruhan program penerima mirip dengan program pengirim, dengan kata lain hanya sedikit perbedaan dapat dijelaskan sebagai berikut:

1 //************************************************************ 
2 // 
3 // blocking.c 
4 // 
5 // Gefan Zhang 
6 // 
7 //************************************************************* 
8 // Modified by : Fajar Purnama

Baris 1 – 8 merupakan komentar berisi informasi pembuat program dan penulis yang memodifikasi.

9 #include <stdio.h> 
10 #include <fcntl.h> 
11 #include <unistd.h> 
12 #include <sys/ioctl.h> 
13 #include <tosmac.h> 

Baris 9 – 13 menunjukkan header yang digunakan pada program ini, header berisi definisi kode yang digunakan.

14 void msg_init(TOS_Msg* pMsg) 
15 { 
16 pMsg->length = 0; 
17 pMsg->fcfhi = 0; 
18 pMsg->fcflo = 0; 
19 pMsg->dsn = 0; 
20 pMsg->destpan = 0; 
21 pMsg->addr = 0; 
22 pMsg->type = 0; 
23 pMsg->group = 0; 
24 memset(pMsg->data, 0, TOSH_DATA_LENGTH); // 28 bytes usually 
25 pMsg->strength = 0; 
26 pMsg->lqi = 0; 
27 pMsg->crc = 0; 
28 pMsg->ack = 0; 
29 pMsg->time = 0; 
30 } 

Baris 14 – 30 merupakan fungsi untuk menginisialisasikan variable pada paket untuk ditransmisikan.

Inti program dimulai dari baris 32.

31 //--------------------- main ------------------------------- 
32 int main(int argc, const char *argv[]) { 
33 // Check Error 
34 if(argv[1]==NULL){ 
35 printf("Usage: ./recv_file [file], example: ./recv_file_advance image.ppm"); 
36 return 1; 
37 } 

Baris 33 – 37 terdapat pemeriksaan error bila perintah yang dimasukkan tidak sesuai.

38 // Declaration 
39 int tosmac_dev, file, i; 
40 TOS_Msg recv_pkt; 
41 TOS_Msg send_pkt; 

Bari 38 – 41 adalah bagian deklarasi variable.

42 // open as blocking mode 
43 tosmac_dev = open(TOSMAC_DEVICE, O_RDWR); // TOSMAC_DEVICE = /dev/tosmac, O_RDWR = Open as Read & Write 
44 // Check Error
45 if (tosmac_dev < 0) 
46 { 
47 fprintf(stderr, "Open error: %s\n", TOSMAC_DEVICE); 
48 
49 return 1; 
50 
51 } 

Baris 42 – 49 membuka radio.

50 // file 
51 file = open(argv[1], O_RDWR); 
52 // Check Error 
53 if(file<0){ 
54 creat(argv[1], O_RDWR); // create empty file, argv[1] if no file exist: user input (./recv_file argv[1])  
55 file = open(argv[1], O_RDWR); // Open created file 
56 } 

Baris 50 – 56 membuka file di bagian ini bila file tidak ditemukan maka akan membuat file baru dengan fungsi “creat” baris 54.

57 // receving file 
58 printf("User read from driver:\n"); 
59 // receive 28 bytes of file for infinity     
60 while(1){ 
61 // Seek to end of file to continue receive (this feature allows continueable download) 
62 i = lseek(file,0,SEEK_END); 
63 send_pkt.data[1] = (i/TOSH_DATA_LENGTH)-3000; // Since the max value of data type is 3000 we start from -3000, so we could put a number up to 6000, This feature request tells the transmitter how much bytes already received so the transmitter will sinchronize. 
64 write(tosmac_dev, (TOS_Msg*)&send_pkt, sizeof(TOS_Msg)); // sending i in send_pkt.data[1] 
65 alarm(2); // 2  seconds timeout  
66 read(tosmac_dev, (TOS_Msg*)&recv_pkt, sizeof(TOS_Msg)); // Read receive file from Tosmac Device, Pause if device == NULL, !=sizeof(TOS_Msg) 
67 // Stop code, break infinite while loop if this code is received, send application should send this string to tell if transmission finish  
68 if(strncmp(recv_pkt.data,"0S0T1O1P0",9)==0){  
69 break; 
70 } 
71 // Use group as identifier, so it will not process packet if it is not on this group 
72 if(recv_pkt.group!=7){ 
73 continue; // it will ignore next code and restart while loop 
74 } 
75 // Verbose, shows accumulative received number of bytes 
76 printf("Receiving %d bytes of data\n", recv_pkt.length); 
77 i += recv_pkt.length; // Equal to i = i + recv_pkt.length 
78 printf("Received %d bytes\n", i); 
79 // Writing received 28 bytes to file that had just been created 
80 write(file, recv_pkt.data, recv_pkt.length); // write will automatically go to last byte order of file 
81 } 

Baris 60 – 81 merupakan proses transmisi. Di proses transmisi didalam while loop yang tidak terbatas, awalnya dibaca banyaknya byte yang telah diterima oleh file (besar file) di baris 62 “lseek(file,0,SEEK_END)” dan sekaligus menuju ke akhir file. Di baris 63 besar file dimasukkan ke “send_pkt.data[1]” dan di baris 64 dikirim ke transmitter untuk memberi tahu byte yang keberapa yang harus dikirim. Di program ini nilai dimulai dari -3000 agar dapat menentukkan nilai yang lebih besar karena masksimal nilai adalah kurang lebih 3000 sedangkan nilai yang perlu dikirim lebih dari 3000. Untuk melakukan hal ini perlu ada perubahan pada “tosmac.h” pada bagian definisi paket di bagian. Untuk program ini tipe data “data” berubah dari “s8” menjadi “s16”, perubahahan adalah meningkatkan jumlah bit yang digunakan. Jika ditetapkan demikian nilai maksimimal pada “send_pkt.data[1]” hanya dibawah 1000. Semua hal ini dilakukan agar transmisi dapat dilanjutkan kembali bila putus dan menekan error. Di program ini diisi “alarm(2)” pada baris 65 bearti program akan berhenti (time out) bila 1 while loop melebih waktu 2 detik. Jika ini terjadi transmisi dapat dilanjutkan (resume) dengan menjalankan program ini kembali dengan menunjukkan file yang sama. Perbedaan lainnya terdapat di baris 72 “if(send_pkt.group=!7){continue;}” yang artinya jika paket yang diterima bukan group 7 agar diabaikan (ignore) dan lanjut ke loop berikutnya. Di baris 68 “if(strncmp(recv_pkt.data,"0S0T1O1P0",9)==0){break;}” berarti jika string yang diterima “0S0T1O1P0” dan jumlah karakter adalah “9” maka patahkan while loop, ditentukan bahwa string ini merupakan tanda bahwa transmisi telah berakhir.

82 printf("FINISH!!"); 
83 // closing device and file 
84 close (tosmac_dev); 
85 close(file); 
86 return 0; 
87 }

Baris 82 – 87 penutupan radio dan file serta akhir program.

4.2 Kompilasi Openjpeg

Subbab ini berisi cara untuk mengkompilasi software Openjpeg-1.5.1 ke Imote2-Linux, dengan kata agar software untuk kompresi dapat dilakukan di perangkat. Compiler yang digunakan adalah linux-gcc-4.1.2-arm-xscale-linux-gnu-glibc-2.3.3 dengan dependencies lcms2, libpng, dan zlib, untuk disini lcms2-2.6, libpng-1.2.51, dan zlib-1.2.8.

Source yang didapatkan dikompresi dalam format tape archive gunzip. Perintah berikut untuk mengekstrak isi file terkompresi:

Baris 60 – 81 merupakan proses transmisi. Di proses transmisi didalam while loop yang tidak terbatas, awalnya dibaca banyaknya byte yang telah diterima oleh file (besar file) di baris 62 “lseek(file,0,SEEK_END)” dan sekaligus menuju ke akhir file. Di baris 63 besar file dimasukkan ke “send_pkt.data[1]” dan di baris 64 dikirim ke transmitter untuk memberi tahu byte yang keberapa yang harus dikirim. Di program ini nilai dimulai dari -3000 agar dapat menentukkan nilai yang lebih besar karena masksimal nilai adalah kurang lebih 3000 sedangkan nilai yang perlu dikirim lebih dari 3000. Untuk melakukan hal ini perlu ada perubahan pada “tosmac.h” pada bagian definisi paket di bagian. Untuk program ini tipe data “data” berubah dari “s8” menjadi “s16”, perubahahan adalah meningkatkan jumlah bit yang digunakan. Jika ditetapkan demikian nilai maksimimal pada “send_pkt.data[1]” hanya dibawah 1000. Semua hal ini dilakukan agar transmisi dapat dilanjutkan kembali bila putus dan menekan error. Di program ini diisi “alarm(2)” pada baris 65 bearti program akan berhenti (time out) bila 1 while loop melebih waktu 2 detik. Jika ini terjadi transmisi dapat dilanjutkan (resume) dengan menjalankan program ini kembali dengan menunjukkan file yang sama. Perbedaan lainnya terdapat di baris 72 “if(send_pkt.group=!7){continue;}” yang artinya jika paket yang diterima bukan group 7 agar diabaikan (ignore) dan lanjut ke loop berikutnya. Di baris 68 “if(strncmp(recv_pkt.data,"0S0T1O1P0",9)==0){break;}” berarti jika string yang diterima “0S0T1O1P0” dan jumlah karakter adalah “9” maka patahkan while loop, ditentukan bahwa string ini merupakan tanda bahwa transmisi telah berakhir.

tar xfv linux-gcc-4.1.2-arm-xscale-linux-gnu-glibc-2.3.3.tgz 
tar xfv openjpeg-1.5.1.tar.gz 
tar xfv zlib-1.2.8.tar.gz 
tar xfv lcms2-2.6.tar.gz 
tar xfv libpng-1.2.51.tar.gz 

Perintah berikut untuk menambahkan lokasi file executeable compiler:

export PATH=/[lokasi folder]/arm-xscale-Linux-gnu/bin/:$PATH

Dependencies tambahan pertama yang diminta adalah lcms2.

cd /[lokasi folder]/lcms2-2.6 
export CROSS-PREFIX=/[lokasi folder]/arm-xscale-linux-gnu/arm-xscale-linux-gnu/ 
./configure --prefix=/[lokasi folder]/arm-xscale-Linux-gnu/arm-xscale-Linux-gnu/ --host=arm-xscale-linux-gnu 
make && make install 

Perintah “cd” untuk masuk ke folder, “export” untuk memberi nilai ke suatu variable, disini “CROSS-PREFIX” didefinisikan di file “configure” pada zlib, jika dikompilasi untuk cross-compiler maka diberi nilai lokasi cross-compiler. Didalam file “configure” terdapat serangkaian configurasi, bila dijalankan akan dibentuk “Makefile” untuk kompilasi sesuai kebutuhan. Perintah “--prefix” untuk menambahkan lokasi instalasi. Perintah “make” untuk mengkompilasi berdasarkan file “Makefile” dan “make install” untuk menaruh hasil kompilasi ke tempat berdasarkan “--prefix”. Selanjutnya mengkompilasi zlib untuk compiler:

cd /[lokasi folder]/zlib-1.2.8 
CC=arm-xscale-linux-gnu-gcc prefix=/[lokasi folder]/arm-xscale-Linux-gnu/arm-xscale-Linux-gnu/ CFLAGS=”-04” ./configure --shared 
make && make install 

Di penelitian diperlukan perintah “--shared” agar dapat dideteksi oleh “libpng” saat konfigurasi. Setelah itu kompilasi libpng:

cd /[lokasi folder]/libpng-1.2.51 
./configure --prefix=/[lokasi folder]/arm-xscale-linux-gnu/arm-xscale-linux-gnu/ --host=arm-xscale-linux-gnu 
make && make install 

Perintah “cd” untuk masuk ke folder, “export” untuk memberi nilai ke suatu variable, disini “CROSS-PREFIX” didefinisikan di file “configure” pada zlib, jika dikompilasi untuk cross-compiler maka diberi nilai lokasi cross-compiler. Didalam file “configure” terdapat serangkaian configurasi, bila dijalankan akan dibentuk “Makefile” untuk kompilasi sesuai kebutuhan. Perintah “--prefix” untuk menambahkan lokasi instalasi. Perintah “make” untuk mengkompilasi berdasarkan file “Makefile” dan “make install” untuk menaruh hasil kompilasi ke tempat berdasarkan “--prefix”. Selanjutnya mengkompilasi zlib untuk compiler:

cd /[lokasi folder]/zlib-1.2.8 
CC=arm-xscale-linux-gnu-gcc prefix=/[lokasi folder]/arm-xscale-Linux-gnu/arm-xscale-Linux-gnu/ CFLAGS=”-04” ./configure --shared 
make && make install 

Di penelitian diperlukan perintah “--shared” agar dapat dideteksi oleh “libpng” saat konfigurasi. Setelah itu kompilasi libpng:

cd /[lokasi folder]/libpng-1.2.51 
./configure --prefix=/[lokasi folder]/arm-xscale-linux-gnu/arm-xscale-linux-gnu/ --host=arm-xscale-linux-gnu 
make && make install 

Berdasarkan file “configure” “--host” menentukan jenis platform kompilasi, disini adalah “arm-xscale-linux-gnu”, maka diperlukan “export” lokasi executable cross-compiler pada bagian awal subbab ini. Terakhir adalah kompilasi Openjpeg:

cd openjpeg-1.5.1 
./configure --prefix=/[lokasi folder]/[lokasi folder bebas]/ --host=arm-xscale-Linux-gnu --enable-jpwl --enable-debug --disable-tiff 
make && make install

4.3 Implementasi Testbed

Secara keseluruhan subbab ini mengandung proses transmisi untuk penelitian ini. Awalnya memasukkan program transmisi dan Openjpeg hingga pada intinya perangkat dapat melakukan transmisi dengan batterai atau tanpa terkoneksi ke komputer.

4.4 Program Perintah

Disini terdapat program tambahan, selain menggunakan program “recv” diperlukan 2 program tambahan yaitu program untuk mengirim perintah dan program untuk menerima perintah. Program pengirim perintah “send_command.c” sebagai berikut:

1 //************************************************************ 
2 // 
3 // blocking.c 
4 // 
5 // Gefan Zhang 
6 // 
7 //************************************************************* 
8 // Modified by Fajar Purnama 
9 /* Only Difference from original send.c is an addition of arguement (argc, argv) we could send any message we want without changing its source code for example sending hello message just type ./send_command hello */ 
10 #include <stdio.h> 
11 #include <fcntl.h> 
12 #include <unistd.h> 
13 #include <sys/ioctl.h> 
14 #include <tosmac.h> 
15 void msg_init(TOS_Msg* pMsg) { 
16 pMsg->length = 0; 
17 pMsg->fcfhi = 0; 
18 pMsg->fcflo = 0;
19 pMsg->dsn = 0; 
20 pMsg->destpan = 0; 
21 pMsg->addr = 0; 
22 pMsg->type = 0; 
23 pMsg->group = 0; 
24 memset(pMsg->data, 0, TOSH_DATA_LENGTH); 
25 pMsg->strength = 0; 
26 pMsg->lqi = 0; 
27 pMsg->crc = 0; 
28 pMsg->ack = 0; 
29 pMsg->time = 0; 
30 } 
31 //--------------------- main ------------------------------- 
32 int main(int argc, const char *argv[]) { 
33 if(argv[1]==NULL){ 
34 printf("Usage: ./send_command [message], example ./send_command reboot, ./send_command hello\n"); 
35 return 1; 
36 } 
37 int tosmac_dev; 
38 TOS_Msg recv_pkt; 
39 TOS_Msg send_pkt; 
40 // open as blocking mode 
41 tosmac_dev = open(TOSMAC_DEVICE, O_RDWR); 
42 if (tosmac_dev < 0) 
43 { 
44 fprintf(stderr, "Open error: %s\n", TOSMAC_DEVICE); 
45 return 1; 
46 } 
47 msg_init(&send_pkt); 
48 send_pkt.addr = 99; 
49 memcpy(send_pkt.data, argv[1], TOSH_DATA_LENGTH); 
50 send_pkt.length = TOSH_DATA_LENGTH; 
51 printf("User write to driver\n");  
52 write(tosmac_dev, (TOS_Msg*)&send_pkt, sizeof(TOS_Msg)); 
53close(tosmac_dev); 
54 return 0; 
55 }

Keseluruhan penjelasan program pengirim perintah sama seperti penjelasan program transmisi. Secara khusus yang berbeda pada program ini terdapat pada baris 49 dimana karakter yang akan ditulis ke “send_pkt.data” yaitu “argv[1]” akan dikirim. Program ini sebatas mengirim karakter maksimal 28 byte. Berikut adalah program penerima perintah “recv_command.c”:

1 //************************************************************ 
2 // 
3 // blocking.c 
4 // 
5 // Gefan Zhang 
6 // 
7 //************************************************************* 
8 // Modified by Fajar Purnama 
9 /* The only difference is system() function is added from stdlib.h so the message received will be proccess as a command with this code still limited to 28 bytes. Example of message receive is recv_pkt.data = "reboot", it will be system("reboot"), and it will reboot the system */ 
10 #include <stdio.h> 
11 #include <stdlib.h> 
12 #include <fcntl.h> 
13 #include <unistd.h> 
14 #include <sys/ioctl.h> 
15 #include <tosmac.h> 
16 void msg_init(TOS_Msg* pMsg) 
17 { 
18 pMsg->length = 0; 
19 pMsg->fcfhi = 0; 
20 pMsg->fcflo = 0; 
21 pMsg->dsn = 0; 
22 pMsg->destpan = 0; 
23 pMsg->addr = 0; 
24 pMsg->type = 0; 
25 pMsg->group = 0; 
26 memset(pMsg->data, 0, TOSH_DATA_LENGTH); 
27 pMsg->strength = 0; 
28 pMsg->crc = 0; 
29 pMsg->lqi = 0; 
30 pMsg->ack = 0; 
31 pMsg->time = 0; 
32 } 
33 //--------------------- main ------------------------------- 
34 int main(int argc, char* argv[]) 
35 { 
36 int tosmac_dev; 
37 TOS_Msg recv_pkt; 
38 TOS_Msg send_pkt; 
39 // open as blocking mode 
40 tosmac_dev = open(TOSMAC_DEVICE, O_RDWR); 
41 if (tosmac_dev < 0) 
42 { 
43 fprintf(stderr, "Open error: %s\n", TOSMAC_DEVICE); 
44 return 1; 
45 } 
46 printf("User read from driver:\n");   
47 read(tosmac_dev, &recv_pkt, sizeof(TOS_Msg));// != sizeof(TOS_Msg); 
48 printf("data is %s\n", recv_pkt.data); 
49 system(recv_pkt.data);// Process recv_pkt.data as a command in terminal 
50 // close device 
51 close (tosmac_dev); 
52 return 0; 
53 } 

Keseluruhan penjelasan program penerima perintah sama seperti penjelasan program transmisi. Secara khusus yang berbeda pada program ini terdapat pada baris 49 dimana karakter yang diterima, terkandung dalam “recv_pkt.data” akan diperlakukan sebagai perintah. Hal ini dimungkinkan oleh fungsi “system” yang didefinisikan dalam “stdlib.h”.

4.3.2 Penempatan Program

Setelah kode program jadi, kode tersebut dikompilasi menggunakan “arm-xscale-linux-gnu-gcc”.

export PATH=/[lokasi folder]/arm-xscale-Linux-gnu/bin/:$PATH (jika belum) 
cd /[lokasi folder program] 
arm-xscale-linux-gnu-gcc -Wall send.c -o send  
arm-xscale-linux-gnu-gcc -Wall recv.c -o recv 
arm-xscale-linux-gnu-gcc -Wall send_command.c -o send_command  
arm-xscale-linux-gnu-gcc -Wall recv_command.c -o recv_command  
arm-xscale-linux-gnu-gcc -Wall send_file_advance.c -o  
send_file_advance  
arm-xscale-linux-gnu-gcc -Wall recv_file_advance.c -o  
recv_file_advance  

Selanjutnya ditempatkan di Imote2 dalam directory “/root/transmit”. Receiver terkoneksi di USB0 dengan alamat IP di komputer 192.168.98.100 dan di Imote2 192.168.98.101. Transmitter terkoneksi di USB1 dengan alamat IP di komputer 192.168.99.100 dan di Imote2 192.168.99.102. Koneksi antar Imote2 menggunakan SSH (secure shell) yang telah disiapkan di penelitian sebelumnya seperti dijelaskan pada BAB II subbab 2.1. Sebelum penempatan dibuat directory terlebih dahulu.

ssh 192.168.98.101 
mkdir /root/transmit && mkdir /root/command && mkdir /root/image 
quit && exit 
ssh 192.168.99.102 
mkdir /root/transmit && mkdir /root/command && mkdir /root/image 
quit && exit  

Perintah “mkdir” (make directory) untuk membuat folder baru. Untuk penelitian ini citra raw (Gambar 3.1) telah terkandung dalam directory “/root/image” dengan nama “1.ppm”. Jika directory telah siap maka program dimasukkan, sekaligus Openjpeg yang telah dikompilasi.

cd /[lokasi program] 
scp * root@192.168.98.101:transmit/ && scp *  
root@192.168.99.102:transmit/ 
cd /[lokasi folder openjpeg] 
scp -r [folder openjpeg] root@192.168.98.101: 
scp -r [folder openjpeg] root@192.168.99.102: 

SCP merupakan perintah untuk copy data melalui SSH, “*” mengindikasikan semua file yang ada pada folder tersebut, “-r” untuk mengcopy suatu directory. Berikutnya hasil kompilasi Openjpeg ditempatkan pada directory yang sesuai.

ssh 192.168.99.102 
cd /[lokasi folder openjpeg] 
cd bin && mv * /bin  
cd ../include && mkdir /usr/include && mv * /usr/include 
cd ../lib && mv * /lib 
cd ../share && mv man /usr/share && mv /doc/* /usr/share/doc 
quit && exit 
ssh 192.168.98.101 
cd /[lokasi folder openjpeg] 
cd bin && mv * /bin  
cd ../include && mkdir /usr/include && mv * /usr/include 
cd ../lib && mv * /lib 
cd ../share && mv man /usr/share && mv /doc/* /usr/share/doc 
quit && exit 

Untuk memudahkan transmisi disiapkan beberapa perintah dalam bentuk file sebagai berikut:

  1. Berikut mengandung perintah untuk mengirim citra raw dengan nama file “A”:
#!/bin/bash 
/root/transmit/send_file_advance /root/image/1.ppm
  1. Berikut mengandung perintah untuk mengkompresi citra raw ke format JPEG2000 dengan rasio 1 dengan nama file “B”:
#!/bin/bash 
image_to_j2k -i /root/image/1.ppm -r 1 -o /root/image/1r1.j2k 
/root/transmit/send_command Finish!! 
  1. Berikut mengandung perintah untuk mengirim citra JPEG2000 rasio 1 dengan nama file “C”:
#!/bin/bash 
/root/transmit/send_file_advance /root/image/1r1.j2k 
  1. Berikut mengandung perintah untuk mengkompresi citra raw ke format JPEG2000 dengan rasio 5 dengan nama file “D”:
#!/bin/bash 
image_to_j2k -i /root/image/1.ppm -r 5 -o /root/image/1r5.j2k 
/root/transmit/send_command Finish!! 
  1. Berikut mengandung perintah untuk mengirim citra JPEG2000 rasio 5 dengan nama file “E”:
#!/bin/bash 
/root/transmit/send_file_advance /root/image/1r5.j2k 
  1. Berikut mengandung perintah untuk mengkompresi citra raw ke format JPEG2000 dengan rasio 10 dengan nama file “F”:
#!/bin/bash 
image_to_j2k -i /root/image/1.ppm -r 1 -o /root/image/1r10.j2k 
/root/transmit/send_command Finish!! 
  1. Berikut mengandung perintah untuk mengirim citra JPEG2000 rasio 10 dengan nama file “G”:
#!/bin/bash 
/root/transmit/send_file_advance /root/image/1r10.j2k 
  1. Untuk file “B”, “D”, “F”, setelah kompresi akan mengirim karakter “Finish!!” untuk memberi tahu receiver bahwa kompresi telah selesai.

File dari tabel diatas akan ditaruh ke directory “/root/command”.

cd /[lokasi file command] 
scp * root@192.168.98.101:command/  
scp * root@192.168.99.102:command/