Oleh Sujith H, LG#154. Bahasa Indonesia oleh Triyan W. Nugroho.

Suatu artikel di Slashdot menjelaskan mengenai fitur-fitur CHDK (Canon Hacking Development Kit) yang mengagumkan. Artikel tersebut mendorong saya membeli kamera tersebut untuk mengeksplorasi kemampuan yang dimilikinya. Saya memilih Canon A720IS yang mendukung CHDK. Pada artikel ini saya ingin berbagi mengenai kompilasi CHDK di GNU/Linux, instalasi, dan eksplorasi kemampuan scripting yang dimilikinya.

Instalasi

Saya mendownload source terakhir CHDK dari repository Subversion ke direktori ‘chdk’ pada direktori home saya.

	cd
    svn co https://tools.assembla.com/svn/chdk/trunk

Karena CHDK akan berjalan pada platform yang berbeda dari lokasi kompilasinya, kita membutuhkan sebuah cross compiler. Untuk itu saya mendownload binutils (versi 2.17) dan compiler GCC (versi 3.4.6). Saya kemudian membuat sebuah direktori ‘arm-elf’ dan ‘chdk_cross_compiler’ pada direktori home, dan mengekstrak binutils dan GCC pada direktori ‘chdk_cross_compiler’.

Berikut langkah-langkah membangun binutils:

   1) cd ~/chdk_cross_compiler/binutils-2.17
   2) ./configure --srcdir=../binutils-2.17 --target=arm-elf --prefix=${HOME}/arm-elf
   3) make
   4) make install

Lalu saya menambahkan ~/arm-elf/bin ke PATH:

   export PATH=${HOME}/arm-elf/bin:$PATH

Kompilasi GCC:

   cd ~/chdk_cross_compiler/gcc-3.4.6

Kemudian terapkan sebuah patch dari CHDK yang berada di ~/chdk/trunk/tools/patches/gcc-3.4-arm.diff.

   patch -p0 < ~/chdk/trunk/tools/patches/gcc-3.4-arm.diff

Saya membuat direktori gcc-3.4.6-arm-elf pada ~/chdk_cross_compiler dan membangun GCC agar mendukung prosesor ARM secara default.

   cd /home/sujith/chdk_cross_compiler/gcc-3.4.6-arm-elf
   ../gcc-3.4.6/configure --srcdir=../gcc-3.4.6 --target=arm-elf \
     --enable-multilib --enable-languages=c --enable-clocale=gnu \
     --disable-libm --disable-libc --disable-threads \
     --disable-nls --disable-libssp --disable-intl --disable-libiberty \
     --with-cpu=arm9 --with-newlib --prefix=${HOME}/arm-elf
   unset LIBRARY_PATH
   unset CFLAGS
   make
   make install

Setelah cross compiler telah siap, sekarang waktunya mengkompilasi CHDK.

   cd ~/chdk/trunk

Karena kamera saya Canon A720 IS, saya menghapus tanda komentar untuk baris berikut pada file makefile.inc:

   PLATFORM=a720
   PLATFORMSUB=100c

Dan melakukan kompilasi.

   make fir

Akan muncul sebuah file DISKBOOT.BIN pada direktori ~/chdk/trunk/bin. File tersebut kemudian kita salin ke memory card. Untuk itu, saya harus memformat SD card dengan filesystem FAT-16:

   mkdosfs -F 16

Sebagai langkah terakhir, memory card tersebut harus bootable. Caranya adalah dengan mengedit partisi FAT dengan menggunakan hexedit (pastikan SD card tidak di-mount saat menjalankan perintah berikut).

umount /dev/sda1
hexedit /dev/sda1

Pada hexedit, saya berpindah ke mode ASCII dan menuliskan “BOOTDISK” (tanpa tanda petik) pada offset 0×40. Saya kemudian me-mount ulang SD card dan menyalin file DISKBOOT.BIN ke direktori root pada SD card, mengeset write-lock pada SD card (ini adalah tombol kunci kecil pada SD card), dan memasukkan kartu ke kamera. Kamera melakukan boot dengan CHDK dan menampilkan versi firmware CHDK. Sangat menarik melihat bahwa SD card pada posisi write-lock, namun kamera masih bisa menyimpan foto pada SD card.

Sekarang, kita berpindah ke alt mode dan menekan tombol menu (kamera saya dilengkapi dengan tombol menu, untuk model yang lain mungkin sedikit berbeda) dan kamera akan menampilkan opsi-opsi CHDK: bermain game, menampilkan file, gambar Raw, histogram, dan sebagainya.

Kemampuan Scripting

CHDK menyediakan interpreter kecil yang bernama UBasic. Mari kita mulai dengan script ‘hello world’. Nama file akan memiliki ekstensi .bas.

   @title Hello World
   print "Hello World"

Di sini ‘@title’ menunjuk pada nama file program. Jika tidak kita sebutkan, nama file akan dibuat oleh CHDK. Salin program ke direktori chdk/scripts pada SD card. Pada kamera, saya harus menekan tombol shoot untuk menjalankan script. Anda bisa melihat keluaran pada layar:

Hello World

Untuk mengedipkan LED pada kamera, saya menggunakan kode berikut:

   for n=1 to 5
     print "Led blink ",n
     gosub "ledblink"
   next n

   :ledblink
     set_led 7 1 60
     sleep 1000
     set_led 7 0
     set_led 8 1 60
     sleep 1000
     set_led 8 0
     return

‘gosub’ digunakan untuk menuju suatu subrutin. Di sini subrutin adalah ‘ledblink’. ’set_led’ adalah perintah yang digunakan untuk menghidupkan dan mematikan LED, dan ‘7′ adalah argumen dari ’set_led’ yang berarti LED warna orange. Sedangkan ‘8′ berarti LED berwarna biru.

Tampilan LED berwarna biru:

Blue LED is set on

Untuk mengambil gambar dengan interval reguler 5 detik, saya menulis kode berikut:

     for n=1 to 6
         sleep 5000
         print "shoot ",n, "of ",6
         shoot
     next n

Untuk meletakkan kamera pada mode ‘raw’, gunakan perintah ’set_raw’. Kode berikut ini bisa digunakan untuk mengeset mode raw dan kemudian mengambil gambar.

     set_raw 1
     sleep 1000
     shoot
     sleep 1000
     set_raw 0

Dengan kode berikut, kita bisa melihat tegangan baterai dalam orde milivolt.

     for n=1 to 10
         a=get_vbatt
         print "The V is ",a/1000, "V"
         print "The V is ",a, "mV"
         sleep 9000
         a=0
     next n
Voltage

Itulah beberapa hal yang saya lakukan dengan GNU/Linux dan kamera Canon. Jika anda siap untuk bereksperimen dengan kamera CHDK anda, inilah waktu yang tepat untuk melakukannya.

Referensi

Wiki CHDK sangat membantu saya dalam melakukan hacking dan menulis artikel ini. Anda bisa membacanya disini.