Bemanitools v5.26 release
This commit is contained in:
@@ -0,0 +1,6 @@
|
||||
libs += ezusb2-iidx
|
||||
|
||||
libs_ezusb2-iidx := \
|
||||
|
||||
src_ezusb2-iidx := \
|
||||
ezusb2-iidx.c \
|
||||
@@ -0,0 +1,28 @@
|
||||
#define LOG_MODULE "ezusb2-iidx"
|
||||
|
||||
#include "ezusb2/ezusb2.h"
|
||||
|
||||
#include "msg.h"
|
||||
|
||||
enum ezusb2_iidx_msg_pipe {
|
||||
EZUSB2_IIDX_MSG_PIPE_INTERRUPT_OUT = 0x01,
|
||||
EZUSB2_IIDX_MSG_PIPE_BULK_OUT = 0x02,
|
||||
|
||||
EZUSB2_IIDX_MSG_PIPE_INTERRUPT_IN = 0x81,
|
||||
/* yes, 0x86 and NOT 0x82... */
|
||||
EZUSB2_IIDX_MSG_PIPE_BULK_IN = 0x86
|
||||
};
|
||||
|
||||
bool ezusb2_iidx_interrupt_read(HANDLE handle,
|
||||
struct ezusb2_iidx_msg_interrupt_read_packet* packet)
|
||||
{
|
||||
return ezusb2_endpoint_transfer(handle, EZUSB2_IIDX_MSG_PIPE_INTERRUPT_IN,
|
||||
(void*) packet, sizeof(struct ezusb2_iidx_msg_interrupt_read_packet));
|
||||
}
|
||||
|
||||
bool ezusb2_iidx_interrupt_write(HANDLE handle,
|
||||
const struct ezusb2_iidx_msg_interrupt_write_packet* packet)
|
||||
{
|
||||
return ezusb2_endpoint_transfer(handle, EZUSB2_IIDX_MSG_PIPE_INTERRUPT_OUT,
|
||||
(void*) packet, sizeof(struct ezusb2_iidx_msg_interrupt_write_packet));
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
#ifndef EZUSB2_IIDX_H
|
||||
#define EZUSB2_IIDX_H
|
||||
|
||||
#include <stdbool.h>
|
||||
|
||||
#include <windows.h>
|
||||
|
||||
#include "msg.h"
|
||||
|
||||
bool ezusb2_iidx_interrupt_read(HANDLE handle,
|
||||
struct ezusb2_iidx_msg_interrupt_read_packet* packet);
|
||||
|
||||
bool ezusb2_iidx_interrupt_write(HANDLE handle,
|
||||
const struct ezusb2_iidx_msg_interrupt_write_packet* packet);
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,102 @@
|
||||
#ifndef EZUSB2_IIDX_MSG_H
|
||||
#define EZUSB2_IIDX_MSG_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stddef.h>
|
||||
|
||||
#pragma pack(push, 1)
|
||||
struct ezusb2_iidx_msg_interrupt_write_packet {
|
||||
uint8_t unk0;
|
||||
uint8_t unk1;
|
||||
uint8_t node;
|
||||
uint8_t cmd;
|
||||
uint8_t cmd_detail[2];
|
||||
uint8_t unk2;
|
||||
uint8_t unk3;
|
||||
uint8_t panel_lights;
|
||||
uint8_t unk4;
|
||||
uint8_t unk5;
|
||||
uint16_t deck_lights;
|
||||
uint8_t unk6;
|
||||
uint8_t top_lamps;
|
||||
uint8_t top_neons;
|
||||
uint8_t seg16[9];
|
||||
/* Pad to 64 byte total size because the endpoint expects this buffer size.
|
||||
Requests are hanging on ioctl calls otherwise. */
|
||||
uint8_t padding[39];
|
||||
};
|
||||
#pragma pack(pop)
|
||||
|
||||
/* Some static asserts to ensure that lights are at correct offsets */
|
||||
_Static_assert(offsetof(struct ezusb2_iidx_msg_interrupt_write_packet,
|
||||
panel_lights) == 8, "panel_lights is at wrong offset for fx2 packet");
|
||||
_Static_assert(offsetof(struct ezusb2_iidx_msg_interrupt_write_packet,
|
||||
deck_lights) == 11, "deck_lights is at wrong offset for fx2 packet");
|
||||
_Static_assert(offsetof(struct ezusb2_iidx_msg_interrupt_write_packet,
|
||||
top_lamps) == 14, "top_lamps is at wrong offset for fx2 packet");
|
||||
_Static_assert(offsetof(struct ezusb2_iidx_msg_interrupt_write_packet,
|
||||
top_neons) == 15, "top_neons is at wrong offset for fx2 packet");
|
||||
_Static_assert(offsetof(struct ezusb2_iidx_msg_interrupt_write_packet,
|
||||
padding[39]) == 64, "Last padding element is at wrong offset for fx2 write packet");
|
||||
|
||||
struct ezusb2_iidx_msg_interrupt_read_packet {
|
||||
/*
|
||||
Pad mappings:
|
||||
0: P1_Start
|
||||
1: P2_Start
|
||||
2: VEFX
|
||||
3: Effector
|
||||
4: Test
|
||||
5: Service
|
||||
6: unknown/not used
|
||||
7: unknown/not used
|
||||
|
||||
8: unknown/not used
|
||||
9: unknown/not used
|
||||
10: unknown/not used
|
||||
11: unknown/not used
|
||||
12: unknown/not used
|
||||
13: unknown/not used
|
||||
14: unknown/not used
|
||||
15: unknown/not used
|
||||
|
||||
16: P1_1
|
||||
17: P1_2
|
||||
18: P1_3
|
||||
19: P1_4
|
||||
20: P1_5
|
||||
21: P1_6
|
||||
22: P1_7
|
||||
23: P2_1
|
||||
|
||||
24: P2_2
|
||||
25: P2_3
|
||||
26: P2_4
|
||||
27: P2_5
|
||||
28: P2_6
|
||||
29: P2_7
|
||||
30: Coin mech
|
||||
31: Not used
|
||||
*/
|
||||
uint8_t unk0;
|
||||
uint8_t unk1;
|
||||
uint8_t unk2;
|
||||
uint8_t seq_no;
|
||||
uint8_t status;
|
||||
uint8_t unk3;
|
||||
uint8_t unk4;
|
||||
uint8_t unk5;
|
||||
uint32_t inverted_pad;
|
||||
uint8_t unk6;
|
||||
uint8_t p2_turntable;
|
||||
uint8_t p1_turntable;
|
||||
uint8_t sliders[3];
|
||||
/* Pad to 64 byte total size because the endpoint expects this buffer size.
|
||||
Requests are hanging on ioctl calls otherwise. */
|
||||
uint8_t padding[46];
|
||||
};
|
||||
|
||||
_Static_assert(offsetof(struct ezusb2_iidx_msg_interrupt_read_packet,
|
||||
padding[45]) == 63, "Last padding element is at wrong offset for fx2 read packet");
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user