forked from Dniel97/segatools
Tweak JVS coin count APIs
This makes things more consistent with the button/analog APIs.
This commit is contained in:
parent
40ba10e29a
commit
9ea6e09fdc
@ -459,10 +459,10 @@ static HRESULT io3_cmd_read_coin(
|
||||
/* Write slot detail */
|
||||
|
||||
for (i = 0 ; i < req.nslots ; i++) {
|
||||
if (io3->ops->read_coin_counter != NULL) {
|
||||
ncoins = io3->ops->read_coin_counter(io3->ops_ctx, i);
|
||||
} else {
|
||||
ncoins = 0;
|
||||
|
||||
if (io3->ops->read_coin_counter != NULL) {
|
||||
io3->ops->read_coin_counter(io3->ops_ctx, i, &ncoins);
|
||||
}
|
||||
|
||||
hr = iobuf_write_be16(resp_buf, ncoins);
|
||||
|
@ -18,7 +18,7 @@ struct io3_ops {
|
||||
void (*write_gpio)(void *ctx, uint32_t state);
|
||||
void (*read_switches)(void *ctx, struct io3_switch_state *out);
|
||||
void (*read_analogs)(void *ctx, uint16_t *analogs, uint8_t nanalogs);
|
||||
uint16_t (*read_coin_counter)(void *ctx, uint8_t slot_no);
|
||||
void (*read_coin_counter)(void *ctx, uint8_t slot_no, uint16_t *out);
|
||||
};
|
||||
|
||||
struct io3 {
|
||||
|
@ -21,7 +21,10 @@ struct chunithm_jvs_ir_mask {
|
||||
};
|
||||
|
||||
static void chunithm_jvs_read_switches(void *ctx, struct io3_switch_state *out);
|
||||
static uint16_t chunithm_jvs_read_coin_counter(void *ctx, uint8_t slot_no);
|
||||
static void chunithm_jvs_read_coin_counter(
|
||||
void *ctx,
|
||||
uint8_t slot_no,
|
||||
uint16_t *out);
|
||||
|
||||
static const struct io3_ops chunithm_jvs_io3_ops = {
|
||||
.read_switches = chunithm_jvs_read_switches,
|
||||
@ -81,11 +84,16 @@ static void chunithm_jvs_read_switches(void *ctx, struct io3_switch_state *out)
|
||||
}
|
||||
}
|
||||
|
||||
static uint16_t chunithm_jvs_read_coin_counter(void *ctx, uint8_t slot_no)
|
||||
static void chunithm_jvs_read_coin_counter(
|
||||
void *ctx,
|
||||
uint8_t slot_no,
|
||||
uint16_t *out)
|
||||
{
|
||||
assert(out != NULL);
|
||||
|
||||
if (slot_no > 0) {
|
||||
return 0;
|
||||
return;
|
||||
}
|
||||
|
||||
return chuni_io_jvs_read_coin_counter();
|
||||
chuni_io_jvs_read_coin_counter(out);
|
||||
}
|
||||
|
@ -23,8 +23,12 @@ HRESULT chuni_io_init(void)
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
uint16_t chuni_io_jvs_read_coin_counter(void)
|
||||
void chuni_io_jvs_read_coin_counter(uint16_t *out)
|
||||
{
|
||||
if (out == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (GetAsyncKeyState('3')) {
|
||||
if (!chuni_io_coin) {
|
||||
chuni_io_coin = true;
|
||||
@ -34,7 +38,7 @@ uint16_t chuni_io_jvs_read_coin_counter(void)
|
||||
chuni_io_coin = false;
|
||||
}
|
||||
|
||||
return chuni_io_coins;
|
||||
*out = chuni_io_coins;
|
||||
}
|
||||
|
||||
void chuni_io_jvs_poll(uint8_t *opbtn, uint8_t *beams)
|
||||
|
@ -36,7 +36,7 @@ void chuni_io_jvs_poll(uint8_t *opbtn, uint8_t *beams);
|
||||
for every coin detected by the coin acceptor mechanism. This count does not
|
||||
need to persist beyond the lifetime of the process. */
|
||||
|
||||
uint16_t chuni_io_jvs_read_coin_counter(void);
|
||||
void chuni_io_jvs_read_coin_counter(uint16_t *total);
|
||||
|
||||
/* Set the state of the coin blocker. Parameter is true if the blocker is
|
||||
disengaged (i.e. coins can be inserted) and false if the blocker is engaged
|
||||
|
@ -15,7 +15,10 @@
|
||||
#include "util/dprintf.h"
|
||||
|
||||
static void diva_jvs_read_switches(void *ctx, struct io3_switch_state *out);
|
||||
static uint16_t diva_jvs_read_coin_counter(void *ctx, uint8_t slot_no);
|
||||
static void diva_jvs_read_coin_counter(
|
||||
void *ctx,
|
||||
uint8_t slot_no,
|
||||
uint16_t *out);
|
||||
|
||||
static const struct io3_ops diva_jvs_io3_ops = {
|
||||
.read_switches = diva_jvs_read_switches,
|
||||
@ -73,11 +76,14 @@ static void diva_jvs_read_switches(void *ctx, struct io3_switch_state *out)
|
||||
}
|
||||
}
|
||||
|
||||
static uint16_t diva_jvs_read_coin_counter(void *ctx, uint8_t slot_no)
|
||||
static void diva_jvs_read_coin_counter(
|
||||
void *ctx,
|
||||
uint8_t slot_no,
|
||||
uint16_t *out)
|
||||
{
|
||||
if (slot_no > 0) {
|
||||
return 0;
|
||||
return;
|
||||
}
|
||||
|
||||
return diva_io_jvs_read_coin_counter();
|
||||
diva_io_jvs_read_coin_counter(out);
|
||||
}
|
||||
|
@ -47,8 +47,12 @@ void diva_io_jvs_poll(uint8_t *opbtn_out, uint8_t *gamebtn_out)
|
||||
*gamebtn_out = gamebtn;
|
||||
}
|
||||
|
||||
uint16_t diva_io_jvs_read_coin_counter(void)
|
||||
void diva_io_jvs_read_coin_counter(uint16_t *out)
|
||||
{
|
||||
if (out == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (GetAsyncKeyState('3')) {
|
||||
if (!diva_io_coin) {
|
||||
diva_io_coin = true;
|
||||
@ -58,7 +62,7 @@ uint16_t diva_io_jvs_read_coin_counter(void)
|
||||
diva_io_coin = false;
|
||||
}
|
||||
|
||||
return diva_io_coins;
|
||||
*out = diva_io_coins;
|
||||
}
|
||||
|
||||
void diva_io_jvs_set_coin_blocker(bool open)
|
||||
|
@ -30,7 +30,7 @@ void diva_io_jvs_poll(uint8_t *opbtn, uint8_t *gamebtn);
|
||||
for every coin detected by the coin acceptor mechanism. This count does not
|
||||
need to persist beyond the lifetime of the process. */
|
||||
|
||||
uint16_t diva_io_jvs_read_coin_counter(void);
|
||||
void diva_io_jvs_read_coin_counter(uint16_t *out);
|
||||
|
||||
/* Set the state of the coin blocker. Parameter is true if the blocker is
|
||||
disengaged (i.e. coins can be inserted) and false if the blocker is engaged
|
||||
|
@ -20,7 +20,10 @@ static void idz_jvs_read_analogs(
|
||||
uint16_t *analogs,
|
||||
uint8_t nanalogs);
|
||||
static void idz_jvs_read_switches(void *ctx, struct io3_switch_state *out);
|
||||
static uint16_t idz_jvs_read_coin_counter(void *ctx, uint8_t slot_no);
|
||||
static void idz_jvs_read_coin_counter(
|
||||
void *ctx,
|
||||
uint8_t slot_no,
|
||||
uint16_t *out);
|
||||
|
||||
static const struct io3_ops idz_jvs_io3_ops = {
|
||||
.read_switches = idz_jvs_read_switches,
|
||||
@ -150,11 +153,14 @@ static void idz_jvs_read_analogs(
|
||||
}
|
||||
}
|
||||
|
||||
static uint16_t idz_jvs_read_coin_counter(void *ctx, uint8_t slot_no)
|
||||
static void idz_jvs_read_coin_counter(
|
||||
void *ctx,
|
||||
uint8_t slot_no,
|
||||
uint16_t *out)
|
||||
{
|
||||
if (slot_no > 0) {
|
||||
return 0;
|
||||
return;
|
||||
}
|
||||
|
||||
return idz_io_jvs_read_coin_counter();
|
||||
idz_io_jvs_read_coin_counter(out);
|
||||
}
|
||||
|
@ -136,7 +136,7 @@ void idz_io_jvs_read_analogs(struct idz_io_analog_state *out)
|
||||
out->brake = xi.Gamepad.bLeftTrigger << 8;
|
||||
}
|
||||
|
||||
uint16_t idz_io_jvs_read_coin_counter(void)
|
||||
void idz_io_jvs_read_coin_counter(uint16_t *out)
|
||||
{
|
||||
if (GetAsyncKeyState('3')) {
|
||||
if (!idz_io_coin) {
|
||||
@ -147,5 +147,5 @@ uint16_t idz_io_jvs_read_coin_counter(void)
|
||||
idz_io_coin = false;
|
||||
}
|
||||
|
||||
return idz_io_coins;
|
||||
*out = idz_io_coins;
|
||||
}
|
||||
|
@ -32,6 +32,6 @@ void idz_io_jvs_read_buttons(uint8_t *opbtn, uint8_t *gamebtn);
|
||||
|
||||
void idz_io_jvs_read_shifter(uint8_t *gear);
|
||||
|
||||
uint16_t idz_io_jvs_read_coin_counter(void);
|
||||
void idz_io_jvs_read_coin_counter(uint16_t *total);
|
||||
|
||||
// TODO force feedback once that gets reverse engineered
|
||||
|
Loading…
Reference in New Issue
Block a user