forked from Dniel97/segatools
Add configurable debug logging
This commit is contained in:
parent
b0f307f427
commit
7d3cab256b
3
.gitignore
vendored
3
.gitignore
vendored
@ -18,3 +18,6 @@ build/
|
|||||||
|
|
||||||
# External dependencies
|
# External dependencies
|
||||||
subprojects/capnhook
|
subprojects/capnhook
|
||||||
|
|
||||||
|
# For enabling debug logging on local builds
|
||||||
|
MesonLocalOptions.mk
|
||||||
|
9
Makefile
9
Makefile
@ -11,6 +11,11 @@ DOC_DIR := doc
|
|||||||
|
|
||||||
DIST_DIR := dist
|
DIST_DIR := dist
|
||||||
|
|
||||||
|
# Add "-D[option]=[value]" here as necessary
|
||||||
|
MESON_OPTIONS :=
|
||||||
|
# For options that shouldn't be committed
|
||||||
|
include MesonLocalOptions.mk
|
||||||
|
|
||||||
# -----------------------------------------------------------------------------
|
# -----------------------------------------------------------------------------
|
||||||
# Targets
|
# Targets
|
||||||
# -----------------------------------------------------------------------------
|
# -----------------------------------------------------------------------------
|
||||||
@ -19,9 +24,9 @@ include Package.mk
|
|||||||
|
|
||||||
.PHONY: build # Build the project
|
.PHONY: build # Build the project
|
||||||
build:
|
build:
|
||||||
$(V)meson --cross cross-mingw-32.txt $(BUILD_DIR_32)
|
$(V)meson setup $(MESON_OPTIONS) --cross cross-mingw-32.txt $(BUILD_DIR_32)
|
||||||
$(V)ninja -C $(BUILD_DIR_32)
|
$(V)ninja -C $(BUILD_DIR_32)
|
||||||
$(V)meson --cross cross-mingw-64.txt $(BUILD_DIR_64)
|
$(V)meson setup $(MESON_OPTIONS) --cross cross-mingw-64.txt $(BUILD_DIR_64)
|
||||||
$(V)ninja -C $(BUILD_DIR_64)
|
$(V)ninja -C $(BUILD_DIR_64)
|
||||||
|
|
||||||
.PHONY: dist # Build and create a zip distribution package
|
.PHONY: dist # Build and create a zip distribution package
|
||||||
|
@ -185,14 +185,14 @@ static HRESULT jvs_ioctl_sense(struct irp *irp)
|
|||||||
|
|
||||||
static HRESULT jvs_ioctl_transact(struct irp *irp)
|
static HRESULT jvs_ioctl_transact(struct irp *irp)
|
||||||
{
|
{
|
||||||
#if 0
|
#if defined(LOG_JVS)
|
||||||
dprintf("\nJVS Port: Outbound frame:\n");
|
dprintf("\nJVS Port: Outbound frame:\n");
|
||||||
dump_const_iobuf(&irp->write);
|
dump_const_iobuf(&irp->write);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
jvs_bus_transact(jvs_root, irp->write.bytes, irp->write.nbytes, &irp->read);
|
jvs_bus_transact(jvs_root, irp->write.bytes, irp->write.nbytes, &irp->read);
|
||||||
|
|
||||||
#if 0
|
#if defined(LOG_JVS)
|
||||||
dprintf("JVS Port: Inbound frame:\n");
|
dprintf("JVS Port: Inbound frame:\n");
|
||||||
dump_iobuf(&irp->read);
|
dump_iobuf(&irp->read);
|
||||||
dprintf("\n");
|
dprintf("\n");
|
||||||
|
@ -390,7 +390,7 @@ static HRESULT io3_cmd_read_switches(
|
|||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
#if defined(LOG_IO3)
|
||||||
dprintf("JVS I/O: Read switches, np=%i, bpp=%i\n",
|
dprintf("JVS I/O: Read switches, np=%i, bpp=%i\n",
|
||||||
req.num_players,
|
req.num_players,
|
||||||
req.bytes_per_player);
|
req.bytes_per_player);
|
||||||
|
@ -267,7 +267,7 @@ static HRESULT led15093_handle_irp_locked(int board, struct irp *irp)
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
#if 0
|
#if defined(LOG_LED15093)
|
||||||
dprintf("TX Buffer:\n");
|
dprintf("TX Buffer:\n");
|
||||||
dump_iobuf(&boarduart->written);
|
dump_iobuf(&boarduart->written);
|
||||||
#endif
|
#endif
|
||||||
@ -294,7 +294,7 @@ static HRESULT led15093_handle_irp_locked(int board, struct irp *irp)
|
|||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
#if defined(LOG_LED15093)
|
||||||
dprintf("Deframe Buffer:\n");
|
dprintf("Deframe Buffer:\n");
|
||||||
dump_iobuf(&req_iobuf);
|
dump_iobuf(&req_iobuf);
|
||||||
#endif
|
#endif
|
||||||
|
@ -420,7 +420,7 @@ static HRESULT sg_nfc_cmd_felica_encap(
|
|||||||
f_res.nbytes = sizeof(res->payload);
|
f_res.nbytes = sizeof(res->payload);
|
||||||
f_res.pos = 1;
|
f_res.pos = 1;
|
||||||
|
|
||||||
#if 0
|
#if defined(LOG_NFC)
|
||||||
dprintf("FELICA OUTBOUND:\n");
|
dprintf("FELICA OUTBOUND:\n");
|
||||||
dump_const_iobuf(&f_req);
|
dump_const_iobuf(&f_req);
|
||||||
#endif
|
#endif
|
||||||
@ -434,7 +434,7 @@ static HRESULT sg_nfc_cmd_felica_encap(
|
|||||||
sg_res_init(&res->res, &req->req, f_res.pos);
|
sg_res_init(&res->res, &req->req, f_res.pos);
|
||||||
res->payload[0] = f_res.pos;
|
res->payload[0] = f_res.pos;
|
||||||
|
|
||||||
#if 0
|
#if defined(LOG_NFC)
|
||||||
dprintf("FELICA INBOUND:\n");
|
dprintf("FELICA INBOUND:\n");
|
||||||
dump_iobuf(&f_res);
|
dump_iobuf(&f_res);
|
||||||
#endif
|
#endif
|
||||||
|
@ -115,14 +115,14 @@ static HRESULT sg_reader_handle_irp_locked(struct irp *irp)
|
|||||||
{
|
{
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
|
|
||||||
#if 0
|
#if defined(LOG_NFC)
|
||||||
if (irp->op == IRP_OP_WRITE) {
|
if (irp->op == IRP_OP_WRITE) {
|
||||||
dprintf("WRITE:\n");
|
dprintf("WRITE:\n");
|
||||||
dump_const_iobuf(&irp->write);
|
dump_const_iobuf(&irp->write);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if 0
|
#if defined(LOG_NFC)
|
||||||
if (irp->op == IRP_OP_READ) {
|
if (irp->op == IRP_OP_READ) {
|
||||||
dprintf("READ:\n");
|
dprintf("READ:\n");
|
||||||
dump_iobuf(&sg_reader_uart.readable);
|
dump_iobuf(&sg_reader_uart.readable);
|
||||||
|
@ -137,7 +137,7 @@ static HRESULT controlbd_handle_irp_locked(struct irp *irp)
|
|||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
if (controlbd_uart.written.bytes[0] == 0xE0) {
|
if (controlbd_uart.written.bytes[0] == 0xE0) {
|
||||||
#if 0
|
#if defined(LOG_CAROL_CONTROL_BD)
|
||||||
dprintf("Control Board: TX Buffer:\n");
|
dprintf("Control Board: TX Buffer:\n");
|
||||||
dump_iobuf(&controlbd_uart.written);
|
dump_iobuf(&controlbd_uart.written);
|
||||||
#endif
|
#endif
|
||||||
@ -152,7 +152,7 @@ static HRESULT controlbd_handle_irp_locked(struct irp *irp)
|
|||||||
dprintf("Control Board: Dispatch Error: 0X%X\n", (int) hr);
|
dprintf("Control Board: Dispatch Error: 0X%X\n", (int) hr);
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
#if 0
|
#if defined(LOG_CAROL_CONTROL_BD)
|
||||||
dprintf("Control Board: RX Buffer:\n");
|
dprintf("Control Board: RX Buffer:\n");
|
||||||
dump_iobuf(&controlbd_uart.readable);
|
dump_iobuf(&controlbd_uart.readable);
|
||||||
#endif
|
#endif
|
||||||
|
@ -94,7 +94,7 @@ static HRESULT ledbd_handle_irp_locked(struct irp *irp)
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
#if 0
|
#if defined(LOG_CAROL_LED_BD)
|
||||||
dprintf("LED Board: TX Buffer:\n");
|
dprintf("LED Board: TX Buffer:\n");
|
||||||
dump_iobuf(&ledbd_uart.written);
|
dump_iobuf(&ledbd_uart.written);
|
||||||
#endif
|
#endif
|
||||||
|
@ -112,7 +112,7 @@ static HRESULT touch_handle_irp_locked(struct irp *irp)
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
#if 0
|
#if defined(LOG_CAROL_TOUCH)
|
||||||
dprintf("Touchscreen: TX Buffer:\n");
|
dprintf("Touchscreen: TX Buffer:\n");
|
||||||
dump_iobuf(&touch_uart.written);
|
dump_iobuf(&touch_uart.written);
|
||||||
#endif
|
#endif
|
||||||
@ -220,7 +220,7 @@ static void touch_scan_auto(const bool is_pressed, const uint16_t mouse_x, const
|
|||||||
iobuf_write(&touch_uart.readable, &resp, sizeof(resp));
|
iobuf_write(&touch_uart.readable, &resp, sizeof(resp));
|
||||||
LeaveCriticalSection(&touch_lock);
|
LeaveCriticalSection(&touch_lock);
|
||||||
|
|
||||||
#if 0
|
#if defined(LOG_CAROL_TOUCH)
|
||||||
dprintf("Touch: RX Buffer: (pos %08x)\n", (uint32_t)touch_uart.readable.pos);
|
dprintf("Touch: RX Buffer: (pos %08x)\n", (uint32_t)touch_uart.readable.pos);
|
||||||
dump_iobuf(&touch_uart.readable);
|
dump_iobuf(&touch_uart.readable);
|
||||||
#endif
|
#endif
|
||||||
|
@ -98,7 +98,7 @@ static HRESULT slider_handle_irp_locked(struct irp *irp)
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
#if 0
|
#if defined(LOG_CHUNI_SLIDER)
|
||||||
dprintf("TX Buffer:\n");
|
dprintf("TX Buffer:\n");
|
||||||
dump_iobuf(&slider_uart.written);
|
dump_iobuf(&slider_uart.written);
|
||||||
#endif
|
#endif
|
||||||
@ -117,7 +117,7 @@ static HRESULT slider_handle_irp_locked(struct irp *irp)
|
|||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
#if defined(LOG_CHUNI_SLIDER)
|
||||||
dprintf("Deframe Buffer:\n");
|
dprintf("Deframe Buffer:\n");
|
||||||
dump_iobuf(&req_iobuf);
|
dump_iobuf(&req_iobuf);
|
||||||
#endif
|
#endif
|
||||||
|
@ -98,7 +98,7 @@ static HRESULT slider_handle_irp_locked(struct irp *irp)
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
#if 0
|
#if defined(LOG_CHUSAN_SLIDER)
|
||||||
dprintf("TX Buffer:\n");
|
dprintf("TX Buffer:\n");
|
||||||
dump_iobuf(&slider_uart.written);
|
dump_iobuf(&slider_uart.written);
|
||||||
#endif
|
#endif
|
||||||
@ -117,7 +117,7 @@ static HRESULT slider_handle_irp_locked(struct irp *irp)
|
|||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
#if defined(LOG_CHUSAN_SLIDER)
|
||||||
dprintf("Deframe Buffer:\n");
|
dprintf("Deframe Buffer:\n");
|
||||||
dump_iobuf(&req_iobuf);
|
dump_iobuf(&req_iobuf);
|
||||||
#endif
|
#endif
|
||||||
|
@ -99,7 +99,7 @@ static HRESULT slider_handle_irp_locked(struct irp *irp)
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
#if 0
|
#if defined(LOG_DIVA_SLIDER)
|
||||||
dprintf("TX Buffer:\n");
|
dprintf("TX Buffer:\n");
|
||||||
dump_iobuf(&slider_uart.written);
|
dump_iobuf(&slider_uart.written);
|
||||||
#endif
|
#endif
|
||||||
@ -118,7 +118,7 @@ static HRESULT slider_handle_irp_locked(struct irp *irp)
|
|||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
#if defined(LOG_DIVA_SLIDER)
|
||||||
dprintf("Deframe Buffer:\n");
|
dprintf("Deframe Buffer:\n");
|
||||||
dump_iobuf(&req_iobuf);
|
dump_iobuf(&req_iobuf);
|
||||||
#endif
|
#endif
|
||||||
|
@ -46,7 +46,7 @@ void jvs_crack_request(
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
#if defined(LOG_JVS)
|
||||||
dprintf("Decoded request:\n");
|
dprintf("Decoded request:\n");
|
||||||
dump_iobuf(&decode);
|
dump_iobuf(&decode);
|
||||||
#endif
|
#endif
|
||||||
@ -96,7 +96,7 @@ void jvs_crack_request(
|
|||||||
resp_bytes[2] = 0x01; /* Status: Success */
|
resp_bytes[2] = 0x01; /* Status: Success */
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
#if defined(LOG_JVS)
|
||||||
dprintf("Encoding response:\n");
|
dprintf("Encoding response:\n");
|
||||||
dump_iobuf(&encode);
|
dump_iobuf(&encode);
|
||||||
#endif
|
#endif
|
||||||
|
@ -130,7 +130,7 @@ static HRESULT touch0_handle_irp_locked(struct irp *irp)
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
#if 0
|
#if defined(LOG_MERCURY_SLIDER)
|
||||||
dprintf("TX0 Buffer:\n");
|
dprintf("TX0 Buffer:\n");
|
||||||
dump_iobuf(&touch0_uart.written);
|
dump_iobuf(&touch0_uart.written);
|
||||||
#endif
|
#endif
|
||||||
@ -177,7 +177,7 @@ static HRESULT touch1_handle_irp_locked(struct irp *irp)
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
#if 0
|
#if defined(LOG_MERCURY_SLIDER)
|
||||||
dprintf("TX1 Buffer:\n");
|
dprintf("TX1 Buffer:\n");
|
||||||
dump_iobuf(&touch1_uart.written);
|
dump_iobuf(&touch1_uart.written);
|
||||||
#endif
|
#endif
|
||||||
@ -309,7 +309,7 @@ static HRESULT touch_handle_get_unit_board_ver(const struct touch_req *req)
|
|||||||
resp.version[6] = 'R';
|
resp.version[6] = 'R';
|
||||||
resp.checksum = calc_checksum(&resp, sizeof(resp));
|
resp.checksum = calc_checksum(&resp, sizeof(resp));
|
||||||
|
|
||||||
#if 0
|
#if defined(LOG_MERCURY_SLIDER)
|
||||||
for (int i = 0; i < sizeof(resp.version); i++) {
|
for (int i = 0; i < sizeof(resp.version); i++) {
|
||||||
dprintf("0x%02x ", resp.version[i]);
|
dprintf("0x%02x ", resp.version[i]);
|
||||||
}
|
}
|
||||||
@ -322,7 +322,7 @@ static HRESULT touch_handle_get_unit_board_ver(const struct touch_req *req)
|
|||||||
resp.version[6] = 'L';
|
resp.version[6] = 'L';
|
||||||
resp.checksum = calc_checksum(&resp, sizeof(resp));
|
resp.checksum = calc_checksum(&resp, sizeof(resp));
|
||||||
|
|
||||||
#if 0
|
#if defined(LOG_MERCURY_SLIDER)
|
||||||
for (int i = 0; i < sizeof(resp.version); i++) {
|
for (int i = 0; i < sizeof(resp.version); i++) {
|
||||||
dprintf("0x%02x ", resp.version[i]);
|
dprintf("0x%02x ", resp.version[i]);
|
||||||
}
|
}
|
||||||
@ -388,7 +388,7 @@ static HRESULT touch_handle_start_auto_scan(const struct touch_req *req)
|
|||||||
|
|
||||||
dprintf("Wacca Touch%d: Start Auto", req->side);
|
dprintf("Wacca Touch%d: Start Auto", req->side);
|
||||||
|
|
||||||
#if 0
|
#if defined(LOG_MERCURY_SLIDER)
|
||||||
for (int i = 0; i < req->data_length; i++)
|
for (int i = 0; i < req->data_length; i++)
|
||||||
dprintf("0x%02x ", req->data[i]);
|
dprintf("0x%02x ", req->data[i]);
|
||||||
#endif
|
#endif
|
||||||
|
37
meson.build
37
meson.build
@ -39,6 +39,43 @@ if cc.get_id() != 'msvc'
|
|||||||
)
|
)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
if get_option('log_all') or get_option('log_jvs')
|
||||||
|
add_project_arguments('-DLOG_JVS', language: 'c')
|
||||||
|
endif
|
||||||
|
if get_option('log_all') or get_option('log_io3')
|
||||||
|
add_project_arguments('-DLOG_IO3', language: 'c')
|
||||||
|
endif
|
||||||
|
if get_option('log_all') or get_option('log_led15093')
|
||||||
|
add_project_arguments('-DLOG_LED15093', language: 'c')
|
||||||
|
endif
|
||||||
|
if get_option('log_all') or get_option('log_nfc')
|
||||||
|
add_project_arguments('-DLOG_NFC', language: 'c')
|
||||||
|
endif
|
||||||
|
if get_option('log_all') or get_option('log_carol_control_bd')
|
||||||
|
add_project_arguments('-DLOG_CAROL_CONTROL_BD', language: 'c')
|
||||||
|
endif
|
||||||
|
if get_option('log_all') or get_option('log_carol_led_bd')
|
||||||
|
add_project_arguments('-DLOG_CAROL_LED_BD', language: 'c')
|
||||||
|
endif
|
||||||
|
if get_option('log_all') or get_option('log_carol_touch')
|
||||||
|
add_project_arguments('-DLOG_CAROL_TOUCH', language: 'c')
|
||||||
|
endif
|
||||||
|
if get_option('log_all') or get_option('log_chuni_slider')
|
||||||
|
add_project_arguments('-DLOG_CHUNI_SLIDER', language: 'c')
|
||||||
|
endif
|
||||||
|
if get_option('log_all') or get_option('log_chusan_slider')
|
||||||
|
add_project_arguments('-DLOG_CHUSAN_SLIDER', language: 'c')
|
||||||
|
endif
|
||||||
|
if get_option('log_all') or get_option('log_diva_slider')
|
||||||
|
add_project_arguments('-DLOG_DIVA_SLIDER', language: 'c')
|
||||||
|
endif
|
||||||
|
if get_option('log_all') or get_option('log_mercury_slider')
|
||||||
|
add_project_arguments('-DLOG_MERCURY_SLIDER', language: 'c')
|
||||||
|
endif
|
||||||
|
if get_option('log_all') or get_option('log_clock')
|
||||||
|
add_project_arguments('-DLOG_CLOCK', language: 'c')
|
||||||
|
endif
|
||||||
|
|
||||||
shlwapi_lib = cc.find_library('shlwapi')
|
shlwapi_lib = cc.find_library('shlwapi')
|
||||||
dinput8_lib = cc.find_library('dinput8')
|
dinput8_lib = cc.find_library('dinput8')
|
||||||
dxguid_lib = cc.find_library('dxguid')
|
dxguid_lib = cc.find_library('dxguid')
|
||||||
|
65
meson.options
Normal file
65
meson.options
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
option('log_all',
|
||||||
|
type : 'boolean',
|
||||||
|
value : false,
|
||||||
|
description : 'Enables all of the subsequent debug logging options'
|
||||||
|
)
|
||||||
|
option('log_jvs',
|
||||||
|
type : 'boolean',
|
||||||
|
value : false,
|
||||||
|
description : 'Enable debug logging for JVS'
|
||||||
|
)
|
||||||
|
option('log_io3',
|
||||||
|
type : 'boolean',
|
||||||
|
value : false,
|
||||||
|
description : 'Enable debug logging for JVS'
|
||||||
|
)
|
||||||
|
option('log_led15093',
|
||||||
|
type : 'boolean',
|
||||||
|
value : false,
|
||||||
|
description : 'Enable debug logging for the 15093 LED board emulation'
|
||||||
|
)
|
||||||
|
option('log_nfc',
|
||||||
|
type : 'boolean',
|
||||||
|
value : false,
|
||||||
|
description : 'Enable debug logging for NFC'
|
||||||
|
)
|
||||||
|
option('log_carol_control_bd',
|
||||||
|
type : 'boolean',
|
||||||
|
value : false,
|
||||||
|
description : 'Enable debug logging for the Carlo Control Board'
|
||||||
|
)
|
||||||
|
option('log_carol_led_bd',
|
||||||
|
type : 'boolean',
|
||||||
|
value : false,
|
||||||
|
description : 'Enable debug logging for the Carlo LED Board'
|
||||||
|
)
|
||||||
|
option('log_carol_touch',
|
||||||
|
type : 'boolean',
|
||||||
|
value : false,
|
||||||
|
description : 'Enable debug logging for the Carlo Touchscreen'
|
||||||
|
)
|
||||||
|
option('log_chuni_slider',
|
||||||
|
type : 'boolean',
|
||||||
|
value : false,
|
||||||
|
description : 'Enable debug logging for the Chunithm Slider'
|
||||||
|
)
|
||||||
|
option('log_chusan_slider',
|
||||||
|
type : 'boolean',
|
||||||
|
value : false,
|
||||||
|
description : 'Enable debug logging for the Chusan Slider'
|
||||||
|
)
|
||||||
|
option('log_diva_slider',
|
||||||
|
type : 'boolean',
|
||||||
|
value : false,
|
||||||
|
description : 'Enable debug logging for the Diva Slider'
|
||||||
|
)
|
||||||
|
option('log_mercury_slider',
|
||||||
|
type : 'boolean',
|
||||||
|
value : false,
|
||||||
|
description : 'Enable debug logging for the WACCA Slider'
|
||||||
|
)
|
||||||
|
option('log_clock',
|
||||||
|
type : 'boolean',
|
||||||
|
value : false,
|
||||||
|
description : 'Enable debug logging for clock APIs'
|
||||||
|
)
|
@ -158,7 +158,7 @@ static BOOL WINAPI my_GetSystemTime(SYSTEMTIME *out)
|
|||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
#if defined(LOG_CLOCK)
|
||||||
static int last_second;
|
static int last_second;
|
||||||
|
|
||||||
if (out->wSecond != last_second) {
|
if (out->wSecond != last_second) {
|
||||||
|
Loading…
Reference in New Issue
Block a user