From 7d3cab256b0afa0bfe6a1fcae13e5ca446950900 Mon Sep 17 00:00:00 2001 From: Bottersnike Date: Thu, 20 Jun 2024 01:22:01 +0100 Subject: [PATCH 1/2] Add configurable debug logging --- .gitignore | 3 ++ Makefile | 9 ++++-- amex/jvs.c | 4 +-- board/io3.c | 4 +-- board/led15093.c | 14 +++++----- board/sg-nfc.c | 4 +-- board/sg-reader.c | 4 +-- carolhook/controlbd.c | 14 +++++----- carolhook/ledbd.c | 4 +-- carolhook/touch.c | 10 +++---- chunihook/slider.c | 4 +-- chusanhook/slider.c | 4 +-- divahook/slider.c | 4 +-- jvs/jvs-util.c | 4 +-- mercuryhook/touch.c | 18 ++++++------ meson.build | 37 ++++++++++++++++++++++++ meson.options | 65 +++++++++++++++++++++++++++++++++++++++++++ platform/clock.c | 2 +- 18 files changed, 159 insertions(+), 49 deletions(-) create mode 100644 meson.options diff --git a/.gitignore b/.gitignore index 5b84f6e..d42760f 100644 --- a/.gitignore +++ b/.gitignore @@ -18,3 +18,6 @@ build/ # External dependencies subprojects/capnhook + +# For enabling debug logging on local builds +MesonLocalOptions.mk diff --git a/Makefile b/Makefile index a05bb64..66a6e24 100644 --- a/Makefile +++ b/Makefile @@ -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 diff --git a/amex/jvs.c b/amex/jvs.c index 40d9673..dc55137 100644 --- a/amex/jvs.c +++ b/amex/jvs.c @@ -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"); diff --git a/board/io3.c b/board/io3.c index 4bab05e..24d1b5e 100644 --- a/board/io3.c +++ b/board/io3.c @@ -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); diff --git a/board/led15093.c b/board/led15093.c index 606ce27..f92a6f2 100644 --- a/board/led15093.c +++ b/board/led15093.c @@ -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; // } diff --git a/board/sg-nfc.c b/board/sg-nfc.c index 8f7c9bd..1f023be 100644 --- a/board/sg-nfc.c +++ b/board/sg-nfc.c @@ -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 diff --git a/board/sg-reader.c b/board/sg-reader.c index 24df4df..bcbef56 100644 --- a/board/sg-reader.c +++ b/board/sg-reader.c @@ -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); diff --git a/carolhook/controlbd.c b/carolhook/controlbd.c index 63a65f4..240e35b 100644 --- a/carolhook/controlbd.c +++ b/carolhook/controlbd.c @@ -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; diff --git a/carolhook/ledbd.c b/carolhook/ledbd.c index 1513359..58de42a 100644 --- a/carolhook/ledbd.c +++ b/carolhook/ledbd.c @@ -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; -} \ No newline at end of file +} diff --git a/carolhook/touch.c b/carolhook/touch.c index ba61e42..70c2e92 100644 --- a/carolhook/touch.c +++ b/carolhook/touch.c @@ -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 diff --git a/chunihook/slider.c b/chunihook/slider.c index 753a608..0a42cb3 100644 --- a/chunihook/slider.c +++ b/chunihook/slider.c @@ -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 diff --git a/chusanhook/slider.c b/chusanhook/slider.c index 78f5d53..2bd98d5 100644 --- a/chusanhook/slider.c +++ b/chusanhook/slider.c @@ -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 diff --git a/divahook/slider.c b/divahook/slider.c index 8294923..3046142 100644 --- a/divahook/slider.c +++ b/divahook/slider.c @@ -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 diff --git a/jvs/jvs-util.c b/jvs/jvs-util.c index 1bbe10e..5df33c7 100644 --- a/jvs/jvs-util.c +++ b/jvs/jvs-util.c @@ -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 diff --git a/mercuryhook/touch.c b/mercuryhook/touch.c index 87ba6d5..3f73a2b 100644 --- a/mercuryhook/touch.c +++ b/mercuryhook/touch.c @@ -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)); diff --git a/meson.build b/meson.build index d5d28a6..40f62e3 100644 --- a/meson.build +++ b/meson.build @@ -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') diff --git a/meson.options b/meson.options new file mode 100644 index 0000000..fb39b10 --- /dev/null +++ b/meson.options @@ -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' +) diff --git a/platform/clock.c b/platform/clock.c index b67b111..a263413 100644 --- a/platform/clock.c +++ b/platform/clock.c @@ -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) { From ded89f6343e86c580fcd29c4b2da46a754496c47 Mon Sep 17 00:00:00 2001 From: Bottersnike Date: Mon, 1 Jul 2024 19:28:23 +0100 Subject: [PATCH 2/2] Make fixes based on #22 review --- Makefile | 2 +- meson.options => meson_options.txt | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename meson.options => meson_options.txt (100%) diff --git a/Makefile b/Makefile index 66a6e24..28562a1 100644 --- a/Makefile +++ b/Makefile @@ -14,7 +14,7 @@ DIST_DIR := dist # Add "-D[option]=[value]" here as necessary MESON_OPTIONS := # For options that shouldn't be committed -include MesonLocalOptions.mk +-include MesonLocalOptions.mk # ----------------------------------------------------------------------------- # Targets diff --git a/meson.options b/meson_options.txt similarity index 100% rename from meson.options rename to meson_options.txt