From 836ee62c932c9fc2294214748a4d08cf12726fee Mon Sep 17 00:00:00 2001 From: akiroz Date: Tue, 29 Mar 2022 09:22:31 +0800 Subject: [PATCH] Move chusan init out of dllmain --- src/main.zig | 57 +++++++++++++++++++++++----------------------------- 1 file changed, 25 insertions(+), 32 deletions(-) diff --git a/src/main.zig b/src/main.zig index a7c4175..19eb4bb 100644 --- a/src/main.zig +++ b/src/main.zig @@ -82,6 +82,27 @@ pub fn main() !void { fn tasoller_init() !void { + if(cfg.?.chusan == 1) { + std.log.info("[chuniio] Initializing mode: chusan", .{}); + const szName = W("Global\\ChuniioTasoller"); + const hMapFile = CreateFileMapping(INVALID_HANDLE_VALUE, null, PAGE_READWRITE, 0, 0x24, szName) orelse { + std.log.err("[chuniio] CreateFileMapping: {any}", .{GetLastError()}); + return error.AccessError; + }; + const pBuf = MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, 0x24) orelse { + std.log.err("[chuniio] MapViewOfFile: {any}", .{GetLastError()}); + return error.AccessError; + }; + usb_in = @ptrCast([*]u8, pBuf)[0..0x24]; + if(builtin.cpu.arch == .x86_64) return; + } else { + std.log.info("[chuniio] Initializing mode: chuni", .{}); + usb_in = gpa.allocator().alloc(u8, 0x24) catch |err| { + std.log.err("[chuniio] alloc: {any}", .{err}); + return error.AccessError; + }; + } + const hDevInfo = SetupDiGetClassDevsW(&GUID_DEVINTERFACE_USB_DEVICE, null, null, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE); if(hDevInfo == INVALID_HANDLE_VALUE) { std.log.err("[chuniio] SetupDiGetClassDevs: {any}", .{GetLastError()}); @@ -194,43 +215,13 @@ pub export fn DllMain(hDllHandle: HANDLE, dwReason: DWORD, lpreserved: LPVOID) B .coin_key = @intCast(i32, GetPrivateProfileIntA("io3", "coin", 0x33, cfg_file)), .chusan = @intCast(i32, GetPrivateProfileIntA("chuniio", "chusan", 0, cfg_file)), }; - - // Chuni mode must not init at DllMain - if(cfg.?.chusan == 0) return win32.zig.TRUE; - - std.log.info("[chuniio] Initializing mode: chusan", .{}); - const szName = W("Global\\ChuniioTasoller"); - const hMapFile = CreateFileMapping(INVALID_HANDLE_VALUE, null, PAGE_READWRITE, 0, 0x24, szName) orelse { - std.log.err("[chuniio] CreateFileMapping: {any}", .{GetLastError()}); - return win32.zig.FALSE; - }; - const pBuf = MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, 0x24) orelse { - std.log.err("[chuniio] MapViewOfFile: {any}", .{GetLastError()}); - return win32.zig.FALSE; - }; - usb_in = @ptrCast([*]u8, pBuf)[0..0x24]; - - if(builtin.cpu.arch == .i386) { - tasoller_init() catch { - return win32.zig.FALSE; - }; - } return win32.zig.TRUE; } export fn chuni_io_jvs_init() HRESULT { - if(cfg.?.chusan == 1) return S_OK; - - std.log.info("[chuniio] Initializing mode: chuni", .{}); - usb_in = gpa.allocator().alloc(u8, 0x24) catch |err| { - std.log.err("[chuniio] alloc: {any}", .{err}); - return E_FAIL; - }; - tasoller_init() catch { - return E_FAIL; - }; - + if(cfg.?.chusan == 1 and builtin.cpu.arch != .x86_64) return S_OK; + tasoller_init() catch return E_FAIL; return S_OK; } @@ -255,6 +246,8 @@ export fn chuni_io_jvs_read_coin_counter(total: ?*c_ushort) void { } export fn chuni_io_slider_init() HRESULT { + if(cfg.?.chusan == 0) return S_OK; + tasoller_init() catch return E_FAIL; return S_OK; }