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 armv7
Berikut 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_*
void
tidak 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
void
tidak 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
void
tidak 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_OK
atauLIBCR_ERR_*
int libcr_init(
const char* app,
int port
);
Hentikan service control room.
Requirement : MANDATORY
Error Code.
LihatLIBCR_OK
atauLIBCR_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_SINGLE
atauLIBCR_GARDU_MULTI
jenis_gerbang
: LihatLIBCR_GERBANG_*
nama_gardu
: Nama gardu (contoh: KALIHUTIP UTAMA 1)nama_ruas
: Nama gardu (contoh: PURBALEUNYI)
Error Code.
LihatLIBCR_OK
atauLIBCR_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_OK
bila aktif,LIBCR_ERR_NOSERVICE
bila non-aftif
int libcr_is_active();
Set callback untuk penerima event keyboard
Requirement : MANDATORY
callback
: Fungsi callback. Isi NULL bila nonaktif
Error Code.
LihatLIBCR_OK
atauLIBCR_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_OK
atauLIBCR_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_OK
atauLIBCR_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_OK
atauLIBCR_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_OK
atauLIBCR_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_OK
atauLIBCR_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_OK
atauLIBCR_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_OK
atauLIBCR_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_OK
atauLIBCR_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_OK
atauLIBCR_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_OK
atauLIBCR_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_OK
atauLIBCR_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_OK
atauLIBCR_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_OFF
atauLIBCR_BANTUAN_ON
Error Code.
LihatLIBCR_OK
atauLIBCR_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_OK
atauLIBCR_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 |