From a8fa3bcbf53042c666b91c841af2251538602cb6 Mon Sep 17 00:00:00 2001 From: Hay1tsme Date: Mon, 20 Jan 2025 03:55:38 -0500 Subject: [PATCH] exvs2: fix JVS-related crash --- board/najv4.c | 3 +++ jvs/jvs-bus.h | 1 + platform/jvs.c | 16 ++++++++++++++++ subprojects/capnhook.wrap | 2 +- 4 files changed, 21 insertions(+), 1 deletion(-) diff --git a/board/najv4.c b/board/najv4.c index e2c0b46..909de38 100644 --- a/board/najv4.c +++ b/board/najv4.c @@ -192,6 +192,7 @@ void najv4_init( najv4->jvs.next = next; najv4->jvs.transact = najv4_transact; najv4->jvs.sense = najv4_sense; + najv4->jvs.sense_out = true; najv4->addr = 0xFF; najv4->ops = ops; najv4->ops_ctx = ops_ctx; @@ -697,6 +698,7 @@ static HRESULT najv4_cmd_reset(struct najv4 *najv4, struct const_iobuf *req_buf) dprintf("JVS I/O: Reset (param %02x)\n", req.unknown); najv4->addr = 0xFF; + najv4->jvs.sense_out = true; if (najv4->ops->reset != NULL) { najv4->ops->reset(najv4->ops_ctx); @@ -731,6 +733,7 @@ static HRESULT najv4_cmd_assign_addr( } najv4->addr = req.addr; + najv4->jvs.sense_out = false; return iobuf_write_8(resp_buf, 0x01); } diff --git a/jvs/jvs-bus.h b/jvs/jvs-bus.h index 820ba20..0f58f7a 100644 --- a/jvs/jvs-bus.h +++ b/jvs/jvs-bus.h @@ -13,6 +13,7 @@ struct jvs_node { size_t nbytes, struct iobuf *resp); bool (*sense)(struct jvs_node *node); + bool sense_out; }; void jvs_bus_transact( diff --git a/platform/jvs.c b/platform/jvs.c index f2cd60d..4a2372c 100644 --- a/platform/jvs.c +++ b/platform/jvs.c @@ -1,4 +1,10 @@ #include +#ifdef __GNUC__ +#include +#else +#include +#endif +#include #include #include @@ -85,6 +91,16 @@ static HRESULT jvs_handle_irp_locked(struct irp *irp) } } + if (irp->op == IRP_OP_IOCTL) { + switch (irp->ioctl) { + case IOCTL_SERIAL_GET_MODEMSTATUS: + jvs_uart.cts_on = !jvs_root->sense_out; // WAJVIO.dll is cool + dprintf("JVS: Set CTS to %X\n", jvs_uart.cts_on); + break; + default: break; + } + } + hr = uart_handle_irp(&jvs_uart, irp); if (FAILED(hr) || irp->op != IRP_OP_WRITE) { diff --git a/subprojects/capnhook.wrap b/subprojects/capnhook.wrap index 2358a9b..345cbf4 100644 --- a/subprojects/capnhook.wrap +++ b/subprojects/capnhook.wrap @@ -1,4 +1,4 @@ [wrap-git] directory = capnhook url = https://github.com/Hay1tsme/capnhook -revision = b595e4bf8a274ba3bdaf583e13a7ebc7efe0f48f \ No newline at end of file +revision = cbffaed8041fd675685236781f2042339f54202f \ No newline at end of file