LibCR merupakan library untuk menyediakan service komunikasi data antar aplikasi Toll Collector
dengan aplikasi Control-Room JMTO. Library akan mengurus semua proses komunikasi, dari mulai inisialisasi
port server, protokol komunikasi, hingga kontrol pengiriman data.
Aplikasi Toll Collector hanya perlu menyisipkan library, melakukan inisialisasi dan selanjutnya melakukan provide informasi-informasi yang dibutuhkan oleh Control-Room dengan menggunakan fungsi-fungsi yang telah tersedia.
Untuk penerimaan data/event dari Control-Room, aplikasi Toll Collector dapat melakukan
registrasi fungsi callback, baik itu untuk mendapatkan event keyboard ataupun event cst.
Library tersedia untuk Linux dalam 3 arsitektur, diantaranya:
amd64- Intel/AMD x86 dengan 64bitaarch64- ARM 64bitarmv7- ARM 32bit
Sedangkan untuk QNX/NTO hanya disediakan arsitektur i386 (Intel/AMD x86 dengan 32bit)
LibCR dibangun sebagai static library untuk C/C++ yang dapat digunakan pada environment gcc.
File library terdiri dari 2 jenis extension *.a (pada direktori lib) atau *.o (pada direktori obj).
Aplikasi Toll Collector dapat memilih salah-satu format sesuai dengan kebutuhannya.
Berikut adalah nama-nama file binary untuk library beserta keterangan arsitektur dan platformnya:
libcr-amd64.a/libcr-amd64.o- Linux x86 64bitlibcr-aarch64.a/libcr-aarch64.o- Linux ARM 64bitlibcr-armv7.a/libcr-armv7.o- Linux ARMv7libcr-i386-qnx.a/libcr-i386-qnx.o- QNX/NTO x86 32bit
Test program dapat dilihat pada file example/testlibcr.c, dan dapat di-build dengan build_test.sh (Hanya untuk Linux). Berikut command untuk melakukan build sesuai dengan arsitektur yang dituju:
# Build untuk x86 64bit
./build_test.sh
# Build untuk arm-64
./build_test.sh aarch64
# Build untuk arm-v7 32bit
./build_test.sh armv7Berikut adalah referensi lengkap dari Library Control Room yang terbagi kedalam 4 segment diantaranya:
- Struktur Data - Kumpulan struktur data yang akan digunakan pada fungsi atau callback interface sebagai sarana pengiriman data non-primitif.
- Callback Interface - Merupakan interface yang akan digunakan aplikasi Toll Collector untuk menerima data/event dari Control Room
- Function - Merupakan fungsi-fungsi yang dapat dipanggil aplikasi Toll Collector untuk mengontrol, berkomunikasi dan mengirimkan data kepada Control Room.
- Constants - Merupakan kumpulan nilai konstanta yang digunakan pada fungsi
Control Room dibangun secara fleksibel untuk menunjang berbagai kebutuhan dan ketersediaan sistem, oleh sebab itu fungsi-fungsi yang diimplementasikan aplikasi Toll Collector dibagi kedalam beberapa requirement diantaranya:
MANDATORY- Fungsi harus dipenuhi aplikasi Toll Collector, dikarenakan data dari fungsi yang dimaksud sangat dibutuhkan oleh operator Control Room, dan pengoperasian Control Room tidak akan berjalan tanpa adanya informasi yang dimaksud.RECOMMENDED- Fungsi yang sangat direkomendasikan untuk diimplementasikan aplikasi Toll Collector, dengan dipenuhinya implementasi ini, pengoperasian Control Room akan semakin seamless.OPTIONAL- Opsional untuk diimplementasikan, tapi lebih baik tetap dipenuhi.-- Bukan merupakan fungsirequirement, tapi sarana untuk kebutuhan informasi dan sequence logic dari aplikasi Toll Collector yang dapat digunakan.
- Struktur Data
- Callback Interfaces
- Functions
libcr_init()libcr_close()libcr_set_info()libcr_is_active()libcr_set_keyboard_cb()libcr_set_cst_cb()libcr_set_log_cb()libcr_cst_reg_sector()libcr_cst_unreg_sector()libcr_cst_num_sector()libcr_set_gtostate()libcr_set_data_perioda()libcr_set_golongan()libcr_set_golongan_avc()libcr_set_tarif()libcr_set_saldo()libcr_set_noresi()libcr_set_llb()libcr_set_bantuan()libcr_set_message()
- Constants
Struktur data mifare yang akan dikirimkan pada event tap kartu pada CST. terdiri dari block 1 sampai 3. Block 0 tidak akan dikirimkan.
typedefstruct {
uint8_tstatus; /* Status pembacaan kartu. Lihat LIBCR_CSTSTATUS_* */uint8_tsector_id; /* ID Sektor yang dibaca */uint8_tblock1[16]; /* 16byte data pada block 1 (relatif-sektor) */uint8_tblock2[16]; /* 16byte data pada block 2 (relatif-sektor) */uint8_tblock3[16]; /* 16byte data pada block 3 (relatif-sektor) */
} libcr_cstdata_t;Callback interface untuk menerima event keyboard dari ControlRoom.
keycode: Kode keyboard yang ditekan. LihatLIBCR_KEY_*
voidtidak perlu memberikan return
typedefvoid (*libcr_keyboard_cb)(uint8_tkeycode);Callback interface untuk menerima event tap CST
uuid: Hex String (null terminated) untuk UUID kartu yang di tapdata: Data kartu yang di tap di control roomdata_length: Jumlah data/sektor yang didapat
voidtidak perlu memberikan return
typedefvoid (*libcr_cst_cb)(constchar*uuid, constlibcr_cstdata_t*data,
size_tdata_length);Callback interface untuk logging
log: String loglog_length: Panjang string log
voidtidak perlu memberikan return
typedefvoid (*libcr_log_cb)(constchar*log, intlog_length);Inisialisasi dan mulai service control room. Hanya panggil sekali ketika program dimulai, dan jalankan libcr_close ketika program selesai.
Requirement :MANDATORY
app: String nama aplikasi dan versi (Contoh: TCT 1.00)port: Port TCP yang akan digunakan (RekomendasiLIBCR_DEFAULT_PORT)
Error Code.LihatLIBCR_OKatauLIBCR_ERR_*
intlibcr_init(
constchar*app,
intport
);Hentikan service control room.
Requirement :MANDATORY
Error Code.LihatLIBCR_OKatauLIBCR_ERR_*
intlibcr_close();Set detail informasi gardu. Disarankan informasi awal ini telah di-set sebelum menjalankan libcr_init().
Requirement :MANDATORY
kode_gerbang: Kode gerbang (1-99)kode_gardu: Kode gardu (1-99)jenis_gardu: GunakanLIBCR_GARDU_SINGLEatauLIBCR_GARDU_MULTIjenis_gerbang: LihatLIBCR_GERBANG_*nama_gardu: Nama gardu (contoh: KALIHUTIP UTAMA 1)nama_ruas: Nama gardu (contoh: PURBALEUNYI)
Error Code.LihatLIBCR_OKatauLIBCR_ERR_*
intlibcr_set_info(
uint8_tkode_gerbang,
uint8_tkode_gardu,
uint8_tjenis_gardu,
uint8_tjenis_gerbang,
constchar*nama_gardu,
constchar*nama_ruas
);Cek apakah service control room berjalan
Requirement :-
LIBCR_OKbila aktif,LIBCR_ERR_NOSERVICEbila non-aftif
intlibcr_is_active();Set callback untuk penerima event keyboard
Requirement :MANDATORY
callback: Fungsi callback. Isi NULL bila nonaktif
Error Code.LihatLIBCR_OKatauLIBCR_ERR_*
intlibcr_set_keyboard_cb(
libcr_keyboard_cbcallback
);Set callback untuk penerima event cst
Requirement :RECOMMENDED
callback: Fungsi callback. Isi NULL bila nonaktif
Error Code.LihatLIBCR_OKatauLIBCR_ERR_*
intlibcr_set_cst_cb(
libcr_cst_cbcallback
);Set callback untuk penerima message log. Rekomendasi hanya gunakan LIBCR_LOGLEVEL_ERROR atau LIBCR_LOGLEVEL_NONE pada argumen loglevel untuk build production.
Requirement :OPTIONAL
callback: Fungsi callback. Isi NULL bila nonaktifloglevel: LihatLIBCR_LOGLEVEL_*
Error Code.LihatLIBCR_OKatauLIBCR_ERR_*
intlibcr_set_log_cb(
libcr_log_cbcallback,
uint8_tloglevel
);Tambah registrasi request sektor mifare. Sektor yang telah teregistrasi akan dibaca CST Control Room ketika kartu mifare di-tap, dan data akan dikirimkan melalui callback yang telah diset dengan fungsi libcr_set_cst_cb.
Registrasi multiple sektor dapat dilakukan dengan menjalankan fungsi ini kembali dengan argument sector_id yang berbeda.
Bila fungsi ini dipanggil kembali dengan sector_id sebelumnya telah teregistrasi, maka data keytype dan key pada registrasi sector tersebut akan ditimpa.
Jumlah maksimal sector yang dapat diregistrasi adalah sebanyak 5 sektor.
Requirement :RECOMMENDED
sector_id: ID sektor mifare yang akan dibacakeytype: LihatLIBCR_CST_KEY_TYPE_*key: Hex string mifare key untuk sektor yang dimaksudsector_id: ID sektor mifare yang akan dibaca
Error Code.LihatLIBCR_OKatauLIBCR_ERR_*
intlibcr_cst_reg_sector(
uint8_tsector_id,
uint8_tkeytype,
constchar*key
);Hapus registrasi request sektor mifare yang sebelumnya pernah diregistrasi menggunakan fungsi libcr_cst_reg_sector.
Requirement :-
sector_id: ID sektor mifare yang akan hapus
Error Code.LihatLIBCR_OKatauLIBCR_ERR_*
intlibcr_cst_unreg_sector(
uint8_tsector_id
);Dapatkan jumlah sektor yang sudah direquest
Requirement :-
Error Code.atau jumlah sektor yang sudah di request (>=0)
intlibcr_cst_num_sector();Set state transaksi saat ini. Selalu panggil ketika selesai SOP, mulai EOP, transaksi berhasil dan terjadi deteksi
Requirement :MANDATORY
gtostate: State transaksi saat ini. LihatLIBCR_GTOSTATE_*
Error Code.LihatLIBCR_OKatauLIBCR_ERR_*
intlibcr_set_gtostate(
uint8_tgtostate
);Set informasi perioda yang sedang berjalan, setiap selesai SOP pastikan fungsi ini dijalankan.
Rekomendasi juga ketika EOP panggil fungsi ini dengan memberikan nilai 0 pada semua argument nya.
Requirement :RECOMMENDED
plt: Nomor PLT/CS yang sedang bertugaskspt: Nomor KSPT/CSS yang sedang bertugasshift: Shift yang sedang berjalan (0: Tutup, 1-3)perioda: Perioda yang sedang berjalan (0: Tutup, 1-99)
Error Code.LihatLIBCR_OKatauLIBCR_ERR_*
intlibcr_set_data_perioda(
uint32_tplt,
uint32_tkspt,
uint8_tshift,
uint8_tperioda
);Set golongan saat ini. Selalu panggil ketika golongan kendaraan berubah. Set LIBCR_GOL_CLEAR untuk clear golongan.
Requirement :MANDATORY
golongan: Golongan kendaraan (1-5), atauLIBCR_GOL_CLEAR
Error Code.LihatLIBCR_OKatauLIBCR_ERR_*
intlibcr_set_golongan(
uint8_tgolongan
);Set golongan yang didapatkan avc. Selalu panggil ketika golongan avc berubah. Set LIBCR_GOL_CLEAR untuk clear golongan avc.
Requirement :RECOMMENDED
golongan: Golongan avc (1-5), atauLIBCR_GOL_CLEAR
Error Code.LihatLIBCR_OKatauLIBCR_ERR_*
intlibcr_set_golongan_avc(
uint8_tgolongan
);Set tarif saat ini. Selalu panggil ketika tarif berubah. Set LIBCR_TARIF_NONE untuk clear tarif.
Requirement :RECOMMENDED
tarif: Tarif dalam integer, atauLIBCR_TARIF_NONE
Error Code.LihatLIBCR_OKatauLIBCR_ERR_*
intlibcr_set_tarif(
int32_ttarif
);Set saldo transaksi saat ini. Panggil ketika transaksi berhasil dan mendapatkan saldo terakhir, set LIBCR_SALDO_NONE ketika transaksi selesai (deteksi).
Requirement :OPTIONAL
saldo: Saldo dalam integer, atauLIBCR_SALDO_NONE
Error Code.LihatLIBCR_OKatauLIBCR_ERR_*
intlibcr_set_saldo(
int32_tsaldo
);Set Nomor Resi untuk transaksi yang sedang dan akan berlangsung. Set LIBCR_NORESI_NONE ketika tidak menerima transaksi (Belum SOP, dll).
Requirement :OPTIONAL
noresi: Nomor Resi dalam integer, atauLIBCR_NORESI_NONE
Error Code.LihatLIBCR_OKatauLIBCR_ERR_*
intlibcr_set_noresi(
int32_tnoresi
);Set status llb saat ini. Selalu panggil ketika state llb berubah. Set LIBCR_LLB_NONE bila tidak akan mengirimkan status perubahan llb.
Requirement :OPTIONAL
llb: LihatLIBCR_LLB_*
Error Code.LihatLIBCR_OKatauLIBCR_ERR_*
intlibcr_set_llb(
int8_tllb
);Set status indikator/lampu permintaan bantuan saat ini. Penggil ketika indikator bantuan (VIA) aktif, agar operator di Control Room mendapatkan notifikasi dan dapat segera melakukan tindakan.
Requirement :OPTIONAL
bantuan: GunakanLIBCR_BANTUAN_OFFatauLIBCR_BANTUAN_ON
Error Code.LihatLIBCR_OKatauLIBCR_ERR_*
intlibcr_set_bantuan(
uint8_tbantuan
);Set message yang akan ditampilkan di control room saat ini. Dapat digunakan sebagai sarana informasi untuk CS, misalnya:
- TENTUKAN GOLONGAN KENDARAAN
- TAP KARTU OPERASIONAL UNTUK SOP
- MASUKAN PIN: 123_
- TRANSAKSI BERHASIL. MENUNGGU DETEKSI
Isi dengan NULL bila akan mengosongkan pesan.
Requirement :RECOMMENDED
message: Message yang akan tampil (max 256 karakter).
Error Code.LihatLIBCR_OKatauLIBCR_ERR_*
intlibcr_set_message(
constchar*message
);| NAME | VALUE | Keterangan |
|---|---|---|
LIBCR_DEFAULT_PORT | 8280 | Port Default LibCR (8280) |
| NAME | VALUE | Keterangan |
|---|---|---|
LIBCR_GTOSTATE_NOREADY | 0 | Belum SOP / Bukan dalam mode transaksi |
LIBCR_GTOSTATE_READY | 1 | Siap Transaksi (sebelum transaksi) |
LIBCR_GTOSTATE_TRANS | 2 | Proses Transaksi s/d sebelum deteksi |
| NAME | VALUE | Keterangan |
|---|---|---|
LIBCR_GARDU_SINGLE | 0 | GTO Single |
LIBCR_GARDU_MULTI | 1 | GTO Multi |
| NAME | VALUE | Keterangan |
|---|---|---|
LIBCR_GERBANG_OPEN | 0 | Open / Sistem Terbuke |
LIBCR_GERBANG_ENTRANCE | 1 | Entrance / Sistem Tertutup |
LIBCR_GERBANG_EXIT | 2 | Exit / Sistem Tertutup |
LIBCR_GERBANG_OPEN_ENTRANCE | 3 | Multi Open & entrance / Hybrid |
LIBCR_GERBANG_EXIT_ENTRANCE | 4 | Multi Exit & entrance / Hybrid |
| NAME | VALUE | Keterangan |
|---|---|---|
LIBCR_TARIF_NONE | -1 | Tidak ada tarif |
LIBCR_SALDO_NONE | -1 | Tidak ada saldo |
LIBCR_NORESI_NONE | -1 | Tidak ada nomor resi |
| NAME | VALUE | Keterangan |
|---|---|---|
LIBCR_GOL_CLEAR | 0 | Clear/Cancel Golongan |
LIBCR_GOL_1 | 1 | Golongan 1 / BUS |
LIBCR_GOL_2 | 2 | Golongan 2 |
LIBCR_GOL_3 | 3 | Golongan 3 |
LIBCR_GOL_4 | 4 | Golongan 4 |
LIBCR_GOL_5 | 5 | Golongan 5 |
| NAME | VALUE | Keterangan |
|---|---|---|
LIBCR_KEY_GOL1 | 1 | GOL1 |
LIBCR_KEY_GOL2 | 2 | GOL2 |
LIBCR_KEY_GOL3 | 3 | GOL3 |
LIBCR_KEY_GOL4 | 4 | GOL4 |
LIBCR_KEY_GOL5 | 5 | GOL5 |
LIBCR_KEY_TEST | 6 | TEST PRINT |
LIBCR_KEY_REG | 7 | REG |
LIBCR_KEY_BSP | 8 | BACKSPACE |
LIBCR_KEY_CAN | 9 | CANCEL |
LIBCR_KEY_RESET | 10 | RESET |
LIBCR_KEY_MENU | 11 | MENU |
LIBCR_KEY_LLA | 12 | LLA |
LIBCR_KEY_EXT1 | 13 | Extra Key 1 (example: left) |
LIBCR_KEY_EXT2 | 14 | Extra Key 2 (example: right) |
LIBCR_KEY_EXT3 | 15 | Extra Key 3 (example: up) |
LIBCR_KEY_EXT4 | 16 | Extra Key 4 (example: down) |
LIBCR_KEY_EXT5 | 17 | Extra Key 5 (example: alb/dns) |
LIBCR_KEY_EXT6 | 18 | Extra Key 6 - unavailable |
LIBCR_KEY_EXT7 | 19 | Extra Key 7 - unavailable |
LIBCR_KEY_NUM0 | 20 | NUMBER 0 |
LIBCR_KEY_NUM1 | 21 | NUMBER 1 |
LIBCR_KEY_NUM2 | 22 | NUMBER 2 |
LIBCR_KEY_NUM3 | 23 | NUMBER 3 |
LIBCR_KEY_NUM4 | 24 | NUMBER 4 |
LIBCR_KEY_NUM5 | 25 | NUMBER 5 |
LIBCR_KEY_NUM6 | 26 | NUMBER 6 |
LIBCR_KEY_NUM7 | 27 | NUMBER 7 |
LIBCR_KEY_NUM8 | 28 | NUMBER 8 |
LIBCR_KEY_NUM9 | 29 | NUMBER 9 |
| NAME | VALUE | Keterangan |
|---|---|---|
LIBCR_LLB_NONE | -1 | Tidak ada info llb |
LIBCR_LLB_RED | 0 | llb merah |
LIBCR_LLB_GREEN | 1 | llb hijau |
| NAME | VALUE | Keterangan |
|---|---|---|
LIBCR_BANTUAN_OFF | 0 | Indikator bantuan mati |
LIBCR_BANTUAN_ON | 1 | Indikator bantuan nyala |
| NAME | VALUE | Keterangan |
|---|---|---|
LIBCR_CST_KEY_TYPE_A | 0 | Mifare Key Type-A |
LIBCR_CST_KEY_TYPE_B | 1 | Mifare Key Type-B |
| NAME | VALUE | Keterangan |
|---|---|---|
LIBCR_CSTSTATUS_OK | 0 | Pembacaan berhasil |
LIBCR_CSTSTATUS_ERR_AUTH | 1 | Auth Sector Gagal |
LIBCR_CSTSTATUS_ERR_READ | 2 | Proses baca setelah auth gagal |
| NAME | VALUE | Keterangan |
|---|---|---|
LIBCR_LOGLEVEL_NONE | 0 | Jangan lakukan log |
LIBCR_LOGLEVEL_ERROR | 1 | Log ketika ada error |
LIBCR_LOGLEVEL_WARNING | 2 | Log ketika ada error+warning |
LIBCR_LOGLEVEL_INFO | 3 | Log ketika ada error+warning+informasi |
LIBCR_LOGLEVEL_MORE | 4 | Log dengan informasi lengkap |
LIBCR_LOGLEVEL_VERBOSE | 5 | Log secara mendetail |
| NAME | VALUE | Keterangan |
|---|---|---|
LIBCR_OK | 0 | Tidak terjadi error |
LIBCR_ERR_ARG | -1 | Argumen yang disertakan tidak valid |
LIBCR_ERR_INIT | -2 | Init service gagal |
LIBCR_ERR_REINIT | -3 | Service sebelumnya masih berjalan |
LIBCR_ERR_NOSERVICE | -4 | Service belum dijalankan (di-init) |
LIBCR_ERR_NOSECTORID | -5 | Sector-id mifare belum terdaftar |