Bemanitools v5.26 release
This commit is contained in:
@@ -0,0 +1,149 @@
|
||||
#define LOG_MODULE "jbhook-io"
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include "bemanitools/jbio.h"
|
||||
|
||||
#include "imports/avs.h"
|
||||
|
||||
#include "jbhook/io.h"
|
||||
|
||||
#include "util/log.h"
|
||||
|
||||
enum jbhook_io_p4io_command {
|
||||
JUHOOK_IO_P4IO_CMD_OUTPUTS = 0x18,
|
||||
};
|
||||
|
||||
struct jbhook_io_p4io_outputs {
|
||||
uint32_t outputs;
|
||||
};
|
||||
|
||||
static void jbhook_io_jamma2_read(void* resp, uint32_t nbytes);
|
||||
static uint32_t jbhook_command_handle(uint8_t cmd, const void* payload,
|
||||
uint32_t payload_len, void* resp, uint32_t resp_max_len);
|
||||
|
||||
static const struct p4ioemu_device_msg_hook jbhook_io_msg = {
|
||||
.jamma2_read = jbhook_io_jamma2_read,
|
||||
.command_handle = jbhook_command_handle,
|
||||
.roundplug_read_id = NULL,
|
||||
.roundplug_read_mem = NULL
|
||||
};
|
||||
|
||||
/*
|
||||
0:0 ???
|
||||
0:1 b2
|
||||
0:2 b6
|
||||
0:3 b10
|
||||
0:4 b14
|
||||
0:5 b1
|
||||
0:6 b5
|
||||
0:7 b9
|
||||
|
||||
1:0 ???
|
||||
1:1 b4
|
||||
1:2 b8
|
||||
1:3 b12
|
||||
1:4 b16
|
||||
1:5 b3
|
||||
1:6 b7
|
||||
1:7 b11
|
||||
|
||||
2:0 b13
|
||||
2:1 ???
|
||||
2:2 ???
|
||||
2:3 ???
|
||||
2:4 b15
|
||||
2:5 ???
|
||||
2:6 ???
|
||||
2:7 ???
|
||||
|
||||
3:0 coin
|
||||
3:1 service
|
||||
3:2 ???
|
||||
3:3 ???
|
||||
3:4 test
|
||||
3:5 ???
|
||||
3:6 ???
|
||||
3:7 ???
|
||||
*/
|
||||
static const uint32_t jbhook_io_panel_mappings[] = {
|
||||
(1 << 5),
|
||||
(1 << 1),
|
||||
(1 << 13),
|
||||
(1 << 9),
|
||||
(1 << 6),
|
||||
(1 << 2),
|
||||
(1 << 14),
|
||||
(1 << 10),
|
||||
(1 << 7),
|
||||
(1 << 3),
|
||||
(1 << 15),
|
||||
(1 << 11),
|
||||
(1 << 16),
|
||||
(1 << 4),
|
||||
(1 << 20),
|
||||
(1 << 12),
|
||||
};
|
||||
|
||||
static const uint32_t jbhook_io_sys_button_mappings[] = {
|
||||
(1 << 28),
|
||||
(1 << 25),
|
||||
};
|
||||
|
||||
static void jbhook_io_jamma2_read(void* resp, uint32_t nbytes)
|
||||
{
|
||||
uint32_t* inputs = (uint32_t*) resp;
|
||||
uint16_t panels;
|
||||
uint8_t buttons;
|
||||
|
||||
/* lower three bytes low active, highest byte high active */
|
||||
*inputs = 0x00FFFFFF;
|
||||
|
||||
if (!jb_io_read_inputs()) {
|
||||
log_warning("Reading inputs from jbio failed");
|
||||
return;
|
||||
}
|
||||
|
||||
panels = jb_io_get_panel_inputs();
|
||||
buttons = jb_io_get_sys_inputs();
|
||||
|
||||
for (uint8_t i = 0; i < 16; i++) {
|
||||
if (panels & (1 << i)) {
|
||||
*inputs &= ~jbhook_io_panel_mappings[i];
|
||||
}
|
||||
}
|
||||
|
||||
for (uint8_t i = 0; i < 2; i++) {
|
||||
if (buttons & (1 << i)) {
|
||||
*inputs |= jbhook_io_sys_button_mappings[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static uint32_t jbhook_command_handle(uint8_t cmd, const void* payload,
|
||||
uint32_t payload_len, void* resp, uint32_t resp_max_len)
|
||||
{
|
||||
switch (cmd) {
|
||||
case JUHOOK_IO_P4IO_CMD_OUTPUTS:
|
||||
{
|
||||
// const struct jbhook_io_p4io_outputs* req =
|
||||
// (const struct jbhook_io_p4io_outputs*) payload;
|
||||
|
||||
//log_misc("JUHOOK_IO_P4IO_CMD_OUTPUTS: 0x%X", req->outputs);
|
||||
|
||||
/* coin blocker: off 0x20, on 0x00 */
|
||||
|
||||
memset(resp, 0, 4);
|
||||
|
||||
return 4;
|
||||
}
|
||||
|
||||
default:
|
||||
return 0xFFFFFFFF;
|
||||
}
|
||||
}
|
||||
|
||||
const struct p4ioemu_device_msg_hook* jbhook_io_init(void)
|
||||
{
|
||||
return &jbhook_io_msg;
|
||||
}
|
||||
Reference in New Issue
Block a user