(Bahasa) Nulis Firmware


Kemarin sudah nggambar pcb kan, bang. Sekarang waktunya nulis firmware untuk pcb kemarin.

Sebelumnya, mari kita pasang beberapa software. Bila abang menggunakan windows, mohon install msys2 dulu. Setelah msys2 terpasang, silakan abang buka program tersebut. Namun bila abang menggunakan sistem operasi semacam debian/ubuntu atau arch/manjaro, tinggal buka emulator terminal favorit abang. Pun halnya dengan abang yang menggunakan punya apel, silakan buka emulator terminal.

Mari kita pasang git biar gaul, bang. Untuk arch/manjaro/windows (msys2), tinggal pacman -Syu --noconfirm git. Sistem operasi / distro lain, silakan menyesuaikan. Setelah terinstall, abang masuppkan

git clone --recurse-submodule https://github.com/qmk/qmk_firmware

yang berarti abang berniat untuk 'menyalin' semua isi lumbung kode tersebut ke komputer abang. Dilanjutkan dengan memasukkan perintah cd qmk_firmware untuk berpindah ke direktori utama dari qmk_firmware.

Sekarang waktunya untuk masang masang lainnya dengan memasukkan

util/qmk_install.sh

yang berarti komputer suhu akan meng-eksek berkas qmk_install.sh di direktori util tanpa SSI terlebih dahulu. Sebenernya, qmk_install.sh sendiri cuma berupa skrip yang memanggil skrip lain yang sesuai dengan sistem operasi suhu.

Untuk memeriksa apakah hasil eksek suhu berhasil atau tidak, tolong suhu masuppkan perintah

make claw44:default

Bila berhasil, suhu sudah berhasil menurunkan mesin untuk kibor claw44 khususnya keymap default. Bilamana suhu gagal, coba pakai sudo di depan make. Kalau masih gagal, ada google, hu.

Ok, lanjutkeun ke bagian berikutnya dengan memasuppkan.

util/new_keyboard.sh

yang bakal meminta abang untuk memasupkan nama kibor yang ingin abang buat firmwarenya, jenis prosesor, dan nama abang. Untuk prosesor, pakai avr karena pcb kemarin menggunakan promicro.

OWKOWKWOKWO

Sekarang abang pindah ke keyboards/nama_kibor menggunakan cd. Di direktori tersebut, ada beberapa berkas dan direktori. Antara lain:

Direktori keymaps

Direktori berisi keymap bawaan untuk setiap kibor. Setidaknya, harus ada satu direktori yang berisi keymap.c. Kita akan kembali ke topik ini beberapa waktu ke depan.

config.h

Berkas ini berisi mengenai konfigurasi konfigurasi yang digunakan oleh kibor abang. Beberapa pilihan yang digunakan / diubah saat menulis firmware ini. Antara lain:

haish.c (Sesuai Nama Kibor)

Berkas ini bisa dibilang sebagai 'inti' kedua dari kibor ini. Inti yang saya maksud disini adalah, bila abang sunting berkas ini, apa yang terjadi saat kibor pertama kali akan diproses disini. Namun, bila tidak abang utak atik, maka pengaturan bawaan qmk sudah lebih dari cukup. Dan, untuk keperluan contoh kali ini, ini nggak perlu sama sekali.

haish.h (Sesuai Nama Kibor)

Berkas ini merupakan representasi visual atas matriks dan penataan keymap abang. Setidaknya, ada satu makro yang merepresentasikan matriks kibor. Dan berdasarkan panduan dari QMK, makro tersebut berawalan LAYOUT. Berikut contoh penjelasannya.

#define LAYOUT(\
  K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0a, K0b, \
  K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1a, K1b, \
  K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2a, K2b, \
  K30, K31, K32,    K33,   K35,   K37,    K38, K39, K3a, K3b  \
) \
{ \
  { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0a, K0b }, \
  { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1a, K1b }, \
  { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2a, K2b }, \
  { K30, K31, K32, K33, KNO, K35, KNO, K37, K38, K39, K3a, K3b }  \
}

potongan di atas merupakan makro yang digunakan sebagai representasi dari layout yang digunakan oleh mikrokontroler untuk menerjemahkan dari.

Haruskah saya harus menjelaskan soal gimana makro diproses lalu digunakan? Saya kira nggak perlu karena ribet.

Ok, pada intinya, bagian di dalam kurung berhubungan dengan keymap abang dan bagian di dalam kurung kurawal berhubungan dengan skematik pencetan-dioda kicad abang. Seperti sebagaimana yang abang lihat bahwa ada 4 baris dan 12 kolom baik di skematik maupun pada bagian dalam kurung kurawal. Implikasi dari pengaturan semacam ini adalah bilamana abang melukir posisi, misal, k01 dan k11 pada bagian dalam kurung, saat abang menggunakan LAYOUT di keymap.c, abang juga akan kebingungan karena posisi (asumsi layout standar qwerty) q dan a terbalik.

rules.mk

Berisi fitur-fitur yang bisa diatur untuk kibor ini. Misalkan:

Secara umum, abang tidak perlu menyentuh berkas ini bila penggunaan kibor abang tidak terlalu macam macam. Saya sendiri, menggunakan beberapa fitur seperti LEADER_ENABLE dan COMBO_ENABLE.

OK. Secara umum, semua berkas pada bagian atas direktori kibor sudah saya jelaskan. Saatnya kita membuat keymap.c

keymaps/default/keymap.c

Berkas ini merupakan berkas konfigurasi keymap abang. Oh, dan semua potongan kode di sub-seksi ini merupakan bagian dari satu berkas utuh.

#include QMK_KEYBOARD_H

Merupakan deklarasi bahwa kita menggunakan berkas header yang berisi definisi LAYOUT atau dalam kata lain haish.h. Darimana kita tahu bahwa kita menggunakan berkas tersebut? Tentu dari baca konfigurasi kode sumber qmk.

#define _DASAR   0
#define _SIMBOL  1
#define _JARANG  2
#define _LAINNYA 3

Sekarang kita mendefinisikan 4 nilai yang akan kita gunakan sebagai layer pada kibor. Dimana:

#define SIMBOL  MO(_SIMBOL)
#define JARANG  MO(_JARANG)
#define LAINNYA MO(_LAINNYA)

Sedangkan untuk ketiga definisi di atas, cuma biar gampang aja, bang.

#define AL_D ALT_T(KC_F)
#define AL_J ALT_T(KC_J)

Kita mendefinisikan sebuah simbol baru untuk perilaku sebuah pencetan yang bila dipencet kurang dari sekian waktu, akan mengirim F (atau J). Namun bila abang menekan lebih dari sekian waktu, akan mengirim ALT

#define CT_S CTL_T(KC_S)
#define CT_L CTL_T(KC_L)

Sama dengan penjelasan sebelumnya, namun mengirim CTRL bukan ALT.

#define SH_S SFT_T(KC_S)
#define SH_L SFT_T(KC_L)

Mirip, namun bedanya bukan CTRL namun SHIFT.

#define CT_ESC CTL_T(KC_ESC)

Mari kita lanjutkan dengan menulis layout yang abang pencet pencet.

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  LAYOUT(
    KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC,
    CT_ESC,  KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT,
    KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_UP,
    KC_LCTL, KC_LALT, KC_LGUI,    KC_ENT,      SIMBOL,            KC_SPC,          KC_APP, KC_LEFT, KC_DOWN,   KC_RGHT
  ),

Potongan kode di atas merupakan definisi matriks layout yang sesuai dengan gambar di artikel sebelumnya.

Dah ah, kapan kapan lagi kalau sempat dan niat. Terutama untuk soal split dkk.



This material is shared under the CC-BY License.