Move chusan init out of dllmain
This commit is contained in:
parent
b0c1480673
commit
836ee62c93
57
src/main.zig
57
src/main.zig
@ -82,6 +82,27 @@ pub fn main() !void {
|
|||||||
|
|
||||||
fn tasoller_init() !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);
|
const hDevInfo = SetupDiGetClassDevsW(&GUID_DEVINTERFACE_USB_DEVICE, null, null, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);
|
||||||
if(hDevInfo == INVALID_HANDLE_VALUE) {
|
if(hDevInfo == INVALID_HANDLE_VALUE) {
|
||||||
std.log.err("[chuniio] SetupDiGetClassDevs: {any}", .{GetLastError()});
|
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)),
|
.coin_key = @intCast(i32, GetPrivateProfileIntA("io3", "coin", 0x33, cfg_file)),
|
||||||
.chusan = @intCast(i32, GetPrivateProfileIntA("chuniio", "chusan", 0, 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;
|
return win32.zig.TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
export fn chuni_io_jvs_init() HRESULT {
|
export fn chuni_io_jvs_init() HRESULT {
|
||||||
if(cfg.?.chusan == 1) return S_OK;
|
if(cfg.?.chusan == 1 and builtin.cpu.arch != .x86_64) return S_OK;
|
||||||
|
tasoller_init() catch return E_FAIL;
|
||||||
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;
|
|
||||||
};
|
|
||||||
|
|
||||||
return S_OK;
|
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 {
|
export fn chuni_io_slider_init() HRESULT {
|
||||||
|
if(cfg.?.chusan == 0) return S_OK;
|
||||||
|
tasoller_init() catch return E_FAIL;
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user