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