forked from Dniel97/segatools
board/io4.c: add configuration section to enable/disable emulation
This commit is contained in:
parent
e677a1b4f3
commit
cd5ae172b8
@ -31,3 +31,11 @@ void aime_config_load(struct aime_config *cfg, const wchar_t *filename)
|
|||||||
aime_dll_config_load(&cfg->dll, filename);
|
aime_dll_config_load(&cfg->dll, filename);
|
||||||
cfg->enable = GetPrivateProfileIntW(L"aime", L"enable", 1, filename);
|
cfg->enable = GetPrivateProfileIntW(L"aime", L"enable", 1, filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void io4_config_load(struct io4_config *cfg, const wchar_t *filename)
|
||||||
|
{
|
||||||
|
assert(cfg != NULL);
|
||||||
|
assert(filename != NULL);
|
||||||
|
|
||||||
|
cfg->enable = GetPrivateProfileIntW(L"io4", L"enable", 1, filename);
|
||||||
|
}
|
||||||
|
@ -3,6 +3,8 @@
|
|||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
|
|
||||||
|
#include "board/io4.h"
|
||||||
#include "board/sg-reader.h"
|
#include "board/sg-reader.h"
|
||||||
|
|
||||||
void aime_config_load(struct aime_config *cfg, const wchar_t *filename);
|
void aime_config_load(struct aime_config *cfg, const wchar_t *filename);
|
||||||
|
void io4_config_load(struct io4_config *cfg, const wchar_t *filename);
|
||||||
|
11
board/io4.c
11
board/io4.c
@ -8,6 +8,7 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "board/config.h"
|
||||||
#include "board/guid.h"
|
#include "board/guid.h"
|
||||||
#include "board/io4.h"
|
#include "board/io4.h"
|
||||||
|
|
||||||
@ -97,12 +98,20 @@ static uint8_t io4_system_status;
|
|||||||
static const struct io4_ops *io4_ops;
|
static const struct io4_ops *io4_ops;
|
||||||
static void *io4_ops_ctx;
|
static void *io4_ops_ctx;
|
||||||
|
|
||||||
HRESULT io4_hook_init(const struct io4_ops *ops, void *ctx)
|
HRESULT io4_hook_init(
|
||||||
|
const struct io4_config *cfg,
|
||||||
|
const struct io4_ops *ops,
|
||||||
|
void *ctx)
|
||||||
{
|
{
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
|
|
||||||
|
assert(cfg != NULL);
|
||||||
assert(ops != NULL);
|
assert(ops != NULL);
|
||||||
|
|
||||||
|
if (!cfg->enable) {
|
||||||
|
return S_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
async_init(&io4_async, NULL);
|
async_init(&io4_async, NULL);
|
||||||
|
|
||||||
hr = iohook_open_nul_fd(&io4_fd);
|
hr = iohook_open_nul_fd(&io4_fd);
|
||||||
|
@ -11,6 +11,10 @@ enum {
|
|||||||
IO4_BUTTON_SERVICE = 1 << 6,
|
IO4_BUTTON_SERVICE = 1 << 6,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct io4_config {
|
||||||
|
bool enable;
|
||||||
|
};
|
||||||
|
|
||||||
struct io4_state {
|
struct io4_state {
|
||||||
uint16_t adcs[8];
|
uint16_t adcs[8];
|
||||||
uint16_t spinners[4];
|
uint16_t spinners[4];
|
||||||
@ -22,4 +26,7 @@ struct io4_ops {
|
|||||||
HRESULT (*poll)(void *ctx, struct io4_state *state);
|
HRESULT (*poll)(void *ctx, struct io4_state *state);
|
||||||
};
|
};
|
||||||
|
|
||||||
HRESULT io4_hook_init(const struct io4_ops *ops, void *ctx);
|
HRESULT io4_hook_init(
|
||||||
|
const struct io4_config *cfg,
|
||||||
|
const struct io4_ops *ops,
|
||||||
|
void *ctx);
|
||||||
|
@ -37,6 +37,7 @@ void mu3_hook_config_load(
|
|||||||
platform_config_load(&cfg->platform, filename);
|
platform_config_load(&cfg->platform, filename);
|
||||||
aime_config_load(&cfg->aime, filename);
|
aime_config_load(&cfg->aime, filename);
|
||||||
dvd_config_load(&cfg->dvd, filename);
|
dvd_config_load(&cfg->dvd, filename);
|
||||||
|
io4_config_load(&cfg->io4, filename);
|
||||||
gfx_config_load(&cfg->gfx, filename);
|
gfx_config_load(&cfg->gfx, filename);
|
||||||
mu3_dll_config_load(&cfg->dll, filename);
|
mu3_dll_config_load(&cfg->dll, filename);
|
||||||
}
|
}
|
||||||
|
@ -15,6 +15,7 @@ struct mu3_hook_config {
|
|||||||
struct platform_config platform;
|
struct platform_config platform;
|
||||||
struct aime_config aime;
|
struct aime_config aime;
|
||||||
struct dvd_config dvd;
|
struct dvd_config dvd;
|
||||||
|
struct io4_config io4;
|
||||||
struct gfx_config gfx;
|
struct gfx_config gfx;
|
||||||
struct mu3_dll_config dll;
|
struct mu3_dll_config dll;
|
||||||
};
|
};
|
||||||
|
@ -71,7 +71,7 @@ static DWORD CALLBACK mu3_pre_startup(void)
|
|||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
hr = mu3_io4_hook_init();
|
hr = mu3_io4_hook_init(&mu3_hook_cfg.io4);
|
||||||
|
|
||||||
if (FAILED(hr)) {
|
if (FAILED(hr)) {
|
||||||
goto fail;
|
goto fail;
|
||||||
|
@ -16,13 +16,13 @@ static const struct io4_ops mu3_io4_ops = {
|
|||||||
.poll = mu3_io4_poll,
|
.poll = mu3_io4_poll,
|
||||||
};
|
};
|
||||||
|
|
||||||
HRESULT mu3_io4_hook_init(void)
|
HRESULT mu3_io4_hook_init(const struct io4_config *cfg)
|
||||||
{
|
{
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
|
|
||||||
assert(mu3_dll.init != NULL);
|
assert(mu3_dll.init != NULL);
|
||||||
|
|
||||||
hr = io4_hook_init(&mu3_io4_ops, NULL);
|
hr = io4_hook_init(cfg, &mu3_io4_ops, NULL);
|
||||||
|
|
||||||
if (FAILED(hr)) {
|
if (FAILED(hr)) {
|
||||||
return hr;
|
return hr;
|
||||||
|
@ -2,4 +2,6 @@
|
|||||||
|
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
|
||||||
HRESULT mu3_io4_hook_init(void);
|
#include "board/io4.h"
|
||||||
|
|
||||||
|
HRESULT mu3_io4_hook_init(const struct io4_config *cfg);
|
||||||
|
Loading…
Reference in New Issue
Block a user