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.
typedef struct {
uint8_t status; /* Status pembacaan kartu. Lihat LIBCR_CSTSTATUS_* */
uint8_t sector_id; /* ID Sektor yang dibaca */
uint8_t block1[16]; /* 16byte data pada block 1 (relatif-sektor) */
uint8_t block2[16]; /* 16byte data pada block 2 (relatif-sektor) */
uint8_t block3[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
typedef void (*libcr_keyboard_cb)(uint8_t keycode);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
typedef void (*libcr_cst_cb)(const char* uuid, const libcr_cstdata_t* data,
size_t data_length);Callback interface untuk logging
log: String loglog_length: Panjang string log
voidtidak perlu memberikan return
typedef void (*libcr_log_cb)(const char* log, int log_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_*
int libcr_init(
const char* app,
int port
);Hentikan service control room.
Requirement : MANDATORY
Error Code.LihatLIBCR_OKatauLIBCR_ERR_*
int libcr_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_*
int libcr_set_info(
uint8_t kode_gerbang,
uint8_t kode_gardu,
uint8_t jenis_gardu,
uint8_t jenis_gerbang,
const char* nama_gardu,
const char* nama_ruas
);Cek apakah service control room berjalan
Requirement : -
LIBCR_OKbila aktif,LIBCR_ERR_NOSERVICEbila non-aftif
int libcr_is_active();Set callback untuk penerima event keyboard
Requirement : MANDATORY
callback: Fungsi callback. Isi NULL bila nonaktif
Error Code.LihatLIBCR_OKatauLIBCR_ERR_*
int libcr_set_keyboard_cb(
libcr_keyboard_cb callback
);Set callback untuk penerima event cst
Requirement : RECOMMENDED
callback: Fungsi callback. Isi NULL bila nonaktif
Error Code.LihatLIBCR_OKatauLIBCR_ERR_*
int libcr_set_cst_cb(
libcr_cst_cb callback
);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_*
int libcr_set_log_cb(
libcr_log_cb callback,
uint8_t loglevel
);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_*
int libcr_cst_reg_sector(
uint8_t sector_id,
uint8_t keytype,
const char* 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_*
int libcr_cst_unreg_sector(
uint8_t sector_id
);Dapatkan jumlah sektor yang sudah direquest
Requirement : -
Error Code.atau jumlah sektor yang sudah di request (>=0)
int libcr_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_*
int libcr_set_gtostate(
uint8_t gtostate
);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_*
int libcr_set_data_perioda(
uint32_t plt,
uint32_t kspt,
uint8_t shift,
uint8_t perioda
);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_*
int libcr_set_golongan(
uint8_t golongan
);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_*
int libcr_set_golongan_avc(
uint8_t golongan
);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_*
int libcr_set_tarif(
int32_t tarif
);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_*
int libcr_set_saldo(
int32_t saldo
);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_*
int libcr_set_noresi(
int32_t noresi
);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_*
int libcr_set_llb(
int8_t llb
);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_*
int libcr_set_bantuan(
uint8_t bantuan
);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_*
int libcr_set_message(
const char* 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 |