Add configurable debug logging

This commit is contained in:
Bottersnike 2024-06-20 01:22:01 +01:00
parent b0f307f427
commit 7d3cab256b
Signed by: Bottersnike
SSH Key Fingerprint: SHA256:3g0ghwd4dNX1k1RX8qazbiT+3RIYn/daeBevHZVCiU0
18 changed files with 159 additions and 49 deletions

3
.gitignore vendored
View File

@ -18,3 +18,6 @@ build/
# External dependencies
subprojects/capnhook
# For enabling debug logging on local builds
MesonLocalOptions.mk

View File

@ -11,6 +11,11 @@ DOC_DIR := doc
DIST_DIR := dist
# Add "-D[option]=[value]" here as necessary
MESON_OPTIONS :=
# For options that shouldn't be committed
include MesonLocalOptions.mk
# -----------------------------------------------------------------------------
# Targets
# -----------------------------------------------------------------------------
@ -19,9 +24,9 @@ include Package.mk
.PHONY: build # Build the project
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)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)
.PHONY: dist # Build and create a zip distribution package

View File

@ -185,14 +185,14 @@ static HRESULT jvs_ioctl_sense(struct irp *irp)
static HRESULT jvs_ioctl_transact(struct irp *irp)
{
#if 0
#if defined(LOG_JVS)
dprintf("\nJVS Port: Outbound frame:\n");
dump_const_iobuf(&irp->write);
#endif
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");
dump_iobuf(&irp->read);
dprintf("\n");

View File

@ -230,7 +230,7 @@ static HRESULT io3_cmd(
case JVS_CMD_READ_ANALOGS:
return io3_cmd_read_analogs(io3, req, resp);
case JVS_CMD_READ_ROTARYS:
return io3_cmd_read_rotarys(io3, req, resp);
@ -390,7 +390,7 @@ static HRESULT io3_cmd_read_switches(
return hr;
}
#if 0
#if defined(LOG_IO3)
dprintf("JVS I/O: Read switches, np=%i, bpp=%i\n",
req.num_players,
req.bytes_per_player);

View File

@ -1,6 +1,6 @@
/*
SEGA 837-15093-XX LED Controller Board emulator
Supported variants:
837-15093
@ -106,7 +106,7 @@ static uint8_t led15093_host_adr = 1;
static io_led_init_t led_init;
static io_led_set_leds_t set_leds;
HRESULT led15093_hook_init(const struct led15093_config *cfg, io_led_init_t _led_init,
HRESULT led15093_hook_init(const struct led15093_config *cfg, io_led_init_t _led_init,
io_led_set_leds_t _set_leds, unsigned int first_port, unsigned int num_boards, uint8_t board_adr, uint8_t host_adr)
{
@ -236,12 +236,12 @@ static HRESULT led15093_handle_irp_locked(int board, struct irp *irp)
}
}
*/
if (irp->op == IRP_OP_OPEN) {
dprintf("LED 15093: Starting backend DLL\n");
// int res = led_init();
hr = led_init();
/*
if (res != 0) {
dprintf("LED 15093: Backend error, LED board disconnected: "
@ -267,7 +267,7 @@ static HRESULT led15093_handle_irp_locked(int board, struct irp *irp)
}
for (;;) {
#if 0
#if defined(LOG_LED15093)
dprintf("TX Buffer:\n");
dump_iobuf(&boarduart->written);
#endif
@ -294,7 +294,7 @@ static HRESULT led15093_handle_irp_locked(int board, struct irp *irp)
return hr;
}
#if 0
#if defined(LOG_LED15093)
dprintf("Deframe Buffer:\n");
dump_iobuf(&req_iobuf);
#endif
@ -717,7 +717,7 @@ static HRESULT led15093_req_set_imm_led(int board, const struct led15093_req_set
resp.status = v->status_code;
if (req->cmd == LED_15093_CMD_SET_IMM_LED) {
resp.cmd = LED_15093_CMD_SET_IMM_LED;
}
}
// else {
// resp.cmd = LED_15093_CMD_SET_IMM_LED_LEGACY;
// }

View File

@ -420,7 +420,7 @@ static HRESULT sg_nfc_cmd_felica_encap(
f_res.nbytes = sizeof(res->payload);
f_res.pos = 1;
#if 0
#if defined(LOG_NFC)
dprintf("FELICA OUTBOUND:\n");
dump_const_iobuf(&f_req);
#endif
@ -434,7 +434,7 @@ static HRESULT sg_nfc_cmd_felica_encap(
sg_res_init(&res->res, &req->req, f_res.pos);
res->payload[0] = f_res.pos;
#if 0
#if defined(LOG_NFC)
dprintf("FELICA INBOUND:\n");
dump_iobuf(&f_res);
#endif

View File

@ -115,14 +115,14 @@ static HRESULT sg_reader_handle_irp_locked(struct irp *irp)
{
HRESULT hr;
#if 0
#if defined(LOG_NFC)
if (irp->op == IRP_OP_WRITE) {
dprintf("WRITE:\n");
dump_const_iobuf(&irp->write);
}
#endif
#if 0
#if defined(LOG_NFC)
if (irp->op == IRP_OP_READ) {
dprintf("READ:\n");
dump_iobuf(&sg_reader_uart.readable);

View File

@ -78,7 +78,7 @@ static HRESULT controlbd_frame_decode(struct controlbd_req_any *req, struct iobu
uint8_t checksum_pos = src->pos - 1;
uint8_t calculated_checksum = 0;
uint8_t checksum = 0;
if (src->pos < 6) {
dprintf("Control Board: Decode Error, request too short (pos is 0x%08X)\n", (int)src->pos);
return SEC_E_BUFFER_TOO_SMALL;
@ -137,7 +137,7 @@ static HRESULT controlbd_handle_irp_locked(struct irp *irp)
for (;;) {
if (controlbd_uart.written.bytes[0] == 0xE0) {
#if 0
#if defined(LOG_CAROL_CONTROL_BD)
dprintf("Control Board: TX Buffer:\n");
dump_iobuf(&controlbd_uart.written);
#endif
@ -147,12 +147,12 @@ static HRESULT controlbd_handle_irp_locked(struct irp *irp)
return hr;
}
hr = controlbd_req_dispatch(&req);
hr = controlbd_req_dispatch(&req);
if (FAILED(hr)) {
dprintf("Control Board: Dispatch Error: 0X%X\n", (int) hr);
return hr;
}
#if 0
#if defined(LOG_CAROL_CONTROL_BD)
dprintf("Control Board: RX Buffer:\n");
dump_iobuf(&controlbd_uart.readable);
#endif
@ -206,7 +206,7 @@ static HRESULT controlbd_req_dispatch(const struct controlbd_req_any *req)
case CONTROLBD_CMD_FIRM_SUM:
return controlbd_req_firmware_checksum();
case CONTROLBD_CMD_TIMEOUT:
case CONTROLBD_CMD_TIMEOUT:
dprintf("Control Board: Acknowledge Timeout\n");
return controlbd_req_ack_any(req->hdr.cmd);
@ -278,7 +278,7 @@ static HRESULT controlbd_req_get_board_info(void)
resp.rev = 0x90;
resp.bfr_size = 0x0001;
resp.ack = 1;
strcpy_s(resp.bd_no, sizeof(resp.bd_no), "15312 ");
strcpy_s(resp.chip_no, sizeof(resp.chip_no), "6699 ");
resp.chip_no[5] = 0xFF;
@ -317,7 +317,7 @@ static HRESULT controlbd_req_polling(const struct controlbd_req_any *req)
resp.unk7 = 3;
resp.unk8 = 1;
resp.unk9 = 1;
resp.btns_pressed = 0; // bit 1 is pen button, bit 2 is dodge
resp.coord_x = 0x0;
resp.coord_y = 0x0;

View File

@ -94,7 +94,7 @@ static HRESULT ledbd_handle_irp_locked(struct irp *irp)
}
for (;;) {
#if 0
#if defined(LOG_CAROL_LED_BD)
dprintf("LED Board: TX Buffer:\n");
dump_iobuf(&ledbd_uart.written);
#endif
@ -165,4 +165,4 @@ static HRESULT ledbd_req_unkF0(uint8_t cmd)
iobuf_write(&ledbd_uart.readable, resp, 16);
return S_OK;
}
}

View File

@ -54,7 +54,7 @@ HRESULT touch_hook_init(const struct touch_config *cfg)
if (!cfg->enable) {
return S_OK;
}
InitializeCriticalSection(&touch_lock);
uart_init(&touch_uart, 1);
@ -112,7 +112,7 @@ static HRESULT touch_handle_irp_locked(struct irp *irp)
}
for (;;) {
#if 0
#if defined(LOG_CAROL_TOUCH)
dprintf("Touchscreen: TX Buffer:\n");
dump_iobuf(&touch_uart.written);
#endif
@ -188,7 +188,7 @@ static void touch_scan_auto(const bool is_pressed, const uint16_t mouse_x, const
resp.touches[0].touch_id = 1;
tmp_x = mouse_x & 0x7FFF;
tmp_y = mouse_y & 0x7FFF;
resp.touches[0].x1 = tmp_x & 0x7F;
resp.touches[0].x2 = (tmp_x >> 7) & 0x7F;
resp.touches[0].y1 = tmp_y & 0x7F;
@ -201,7 +201,7 @@ static void touch_scan_auto(const bool is_pressed, const uint16_t mouse_x, const
dprintf("Touch: Mouse down! x %02X %02X y: %02X %02X\n", resp.touches[0].x1, resp.touches[0].x2, resp.touches[0].y1, resp.touches[0].y2);
#endif
last_x1 = resp.touches[0].x1;
last_x2 = resp.touches[0].x2;
last_y1 = resp.touches[0].y1;
@ -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));
LeaveCriticalSection(&touch_lock);
#if 0
#if defined(LOG_CAROL_TOUCH)
dprintf("Touch: RX Buffer: (pos %08x)\n", (uint32_t)touch_uart.readable.pos);
dump_iobuf(&touch_uart.readable);
#endif

View File

@ -98,7 +98,7 @@ static HRESULT slider_handle_irp_locked(struct irp *irp)
}
for (;;) {
#if 0
#if defined(LOG_CHUNI_SLIDER)
dprintf("TX Buffer:\n");
dump_iobuf(&slider_uart.written);
#endif
@ -117,7 +117,7 @@ static HRESULT slider_handle_irp_locked(struct irp *irp)
return hr;
}
#if 0
#if defined(LOG_CHUNI_SLIDER)
dprintf("Deframe Buffer:\n");
dump_iobuf(&req_iobuf);
#endif

View File

@ -98,7 +98,7 @@ static HRESULT slider_handle_irp_locked(struct irp *irp)
}
for (;;) {
#if 0
#if defined(LOG_CHUSAN_SLIDER)
dprintf("TX Buffer:\n");
dump_iobuf(&slider_uart.written);
#endif
@ -117,7 +117,7 @@ static HRESULT slider_handle_irp_locked(struct irp *irp)
return hr;
}
#if 0
#if defined(LOG_CHUSAN_SLIDER)
dprintf("Deframe Buffer:\n");
dump_iobuf(&req_iobuf);
#endif

View File

@ -99,7 +99,7 @@ static HRESULT slider_handle_irp_locked(struct irp *irp)
}
for (;;) {
#if 0
#if defined(LOG_DIVA_SLIDER)
dprintf("TX Buffer:\n");
dump_iobuf(&slider_uart.written);
#endif
@ -118,7 +118,7 @@ static HRESULT slider_handle_irp_locked(struct irp *irp)
return hr;
}
#if 0
#if defined(LOG_DIVA_SLIDER)
dprintf("Deframe Buffer:\n");
dump_iobuf(&req_iobuf);
#endif

View File

@ -46,7 +46,7 @@ void jvs_crack_request(
return;
}
#if 0
#if defined(LOG_JVS)
dprintf("Decoded request:\n");
dump_iobuf(&decode);
#endif
@ -96,7 +96,7 @@ void jvs_crack_request(
resp_bytes[2] = 0x01; /* Status: Success */
}
#if 0
#if defined(LOG_JVS)
dprintf("Encoding response:\n");
dump_iobuf(&encode);
#endif

View File

@ -130,7 +130,7 @@ static HRESULT touch0_handle_irp_locked(struct irp *irp)
}
for (;;) {
#if 0
#if defined(LOG_MERCURY_SLIDER)
dprintf("TX0 Buffer:\n");
dump_iobuf(&touch0_uart.written);
#endif
@ -177,7 +177,7 @@ static HRESULT touch1_handle_irp_locked(struct irp *irp)
}
for (;;) {
#if 0
#if defined(LOG_MERCURY_SLIDER)
dprintf("TX1 Buffer:\n");
dump_iobuf(&touch1_uart.written);
#endif
@ -305,11 +305,11 @@ static HRESULT touch_handle_get_unit_board_ver(const struct touch_req *req)
resp.cmd = 0xa8;
resp.checksum = 0;
if (req->side == 0) {
if (req->side == 0) {
resp.version[6] = 'R';
resp.checksum = calc_checksum(&resp, sizeof(resp));
#if 0
#if defined(LOG_MERCURY_SLIDER)
for (int i = 0; i < sizeof(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.checksum = calc_checksum(&resp, sizeof(resp));
#if 0
#if defined(LOG_MERCURY_SLIDER)
for (int i = 0; i < sizeof(resp.version); i++) {
dprintf("0x%02x ", resp.version[i]);
}
@ -370,7 +370,7 @@ static HRESULT touch_handle_mystery2(const struct touch_req *req)
if (req->side == 0) {
hr = iobuf_write(&touch0_uart.readable, &resp, sizeof(resp));
}
}
else {
hr = iobuf_write(&touch1_uart.readable, &resp, sizeof(resp));
}
@ -388,7 +388,7 @@ static HRESULT touch_handle_start_auto_scan(const struct touch_req *req)
dprintf("Wacca Touch%d: Start Auto", req->side);
#if 0
#if defined(LOG_MERCURY_SLIDER)
for (int i = 0; i < req->data_length; i++)
dprintf("0x%02x ", req->data[i]);
#endif
@ -451,13 +451,13 @@ static void touch_res_auto_scan(const bool *state)
counter++;
}
}
memcpy(frame0.data1, dataR, sizeof(dataR));
memcpy(frame0.data2, data2, sizeof(data2));
memcpy(frame1.data1, dataL, sizeof(dataL));
memcpy(frame1.data2, data2, sizeof(data2));
frame0.checksum = 0;
frame0.checksum = calc_checksum(&frame0, sizeof(frame0));

View File

@ -39,6 +39,43 @@ if cc.get_id() != 'msvc'
)
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')
dinput8_lib = cc.find_library('dinput8')
dxguid_lib = cc.find_library('dxguid')

65
meson.options Normal file
View 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'
)

View File

@ -158,7 +158,7 @@ static BOOL WINAPI my_GetSystemTime(SYSTEMTIME *out)
return ok;
}
#if 0
#if defined(LOG_CLOCK)
static int last_second;
if (out->wSecond != last_second) {