1
0
mirror of https://github.com/djhackersdev/bemanitools.git synced 2025-01-31 12:13:42 +01:00

Add jbiotest for testing jubeat IO impls

This commit is contained in:
Will T 2020-09-12 09:12:35 +00:00 committed by adfe3beeadc615e0fa48b493761cc42aae47d399
parent 65a45740d2
commit 128496901e
4 changed files with 247 additions and 0 deletions

View File

@ -129,6 +129,7 @@ include src/main/iidxio-ezusb2/Module.mk
include src/main/iidxiotest/Module.mk include src/main/iidxiotest/Module.mk
include src/main/inject/Module.mk include src/main/inject/Module.mk
include src/main/jbio/Module.mk include src/main/jbio/Module.mk
include src/main/jbiotest/Module.mk
include src/main/jbhook/Module.mk include src/main/jbhook/Module.mk
include src/main/jbhook1/Module.mk include src/main/jbhook1/Module.mk
include src/main/launcher/Module.mk include src/main/launcher/Module.mk
@ -174,6 +175,7 @@ $(zipdir)/tools.zip: \
build/bin/indep-32/iidxiotest.exe \ build/bin/indep-32/iidxiotest.exe \
build/bin/indep-32/iidx-ezusb-exit-hook.dll \ build/bin/indep-32/iidx-ezusb-exit-hook.dll \
build/bin/indep-32/iidx-ezusb2-exit-hook.dll \ build/bin/indep-32/iidx-ezusb2-exit-hook.dll \
build/bin/indep-32/jbiotest.exe \
build/bin/indep-32/pcbidgen.exe \ build/bin/indep-32/pcbidgen.exe \
dist/iidx/ezusb-boot.bat \ dist/iidx/ezusb-boot.bat \
dist/iidx/ezusb2-boot.bat \ dist/iidx/ezusb2-boot.bat \
@ -191,6 +193,7 @@ $(zipdir)/tools-x64.zip: \
build/bin/indep-64/iidxiotest.exe \ build/bin/indep-64/iidxiotest.exe \
build/bin/indep-64/iidx-ezusb-exit-hook.dll \ build/bin/indep-64/iidx-ezusb-exit-hook.dll \
build/bin/indep-64/iidx-ezusb2-exit-hook.dll \ build/bin/indep-64/iidx-ezusb2-exit-hook.dll \
build/bin/indep-64/jbiotest.exe \
| $(zipdir)/ | $(zipdir)/
$(V)echo ... $@ $(V)echo ... $@
$(V)zip -j $@ $^ $(V)zip -j $@ $^

3
doc/tools/jbiotest.md Normal file
View File

@ -0,0 +1,3 @@
Testing tool for development of jbio libraries used for emulating the main io
hardware on bemanitools for jubeat. Just place jbiotest.exe and your
custom jbio.dll in the same folder and run jbiotest.exe.

View File

@ -0,0 +1,8 @@
exes += jbiotest \
libs_jbiotest := \
jbio \
util \
src_jbiotest := \
main.c \

233
src/main/jbiotest/main.c Normal file
View File

@ -0,0 +1,233 @@
#include <stdbool.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include "bemanitools/jbio.h"
#include "util/log.h"
#include "util/thread.h"
typedef struct {
uint8_t r, g, b;
} rgb_t;
enum jbio_light_mode {
LIGHTS_OFF,
LIGHTS_ON,
LIGHTS_INPUT
};
#define IS_BIT_SET(var, bit) ((((var) >> (bit)) & 1) > 0)
/**
* Tool to test your implementations of jbio.
*/
int main(int argc, char **argv)
{
log_to_writer(log_writer_stdout, NULL);
jb_io_set_loggers(
log_impl_misc, log_impl_info, log_impl_warning, log_impl_fatal);
if (!jb_io_init(crt_thread_create, crt_thread_join, crt_thread_destroy)) {
printf("Initializing jbio failed\n");
return -1;
}
printf(">>> Initializing jbio successful, press enter to continue <<<\n");
if (getchar() != '\n') {
return 0;
}
/* inputs */
uint8_t input_sys = 0;
uint16_t input_panel = 0;
/* outputs */
rgb_t lights[6] = {0};
bool loop = true;
uint8_t cnt = 0;
enum jbio_light_mode light_mode = LIGHTS_OFF;
while (loop) {
if (!jb_io_read_inputs()) {
printf("ERROR: Input read fail\n");
return -2;
}
/* get inputs */
input_sys = jb_io_get_sys_inputs();
input_panel = jb_io_get_panel_inputs();
system("cls");
printf(
"Press escape to open menu\n"
"%d\n"
".___________________________________.\n"
"|'. .'|\n"
"| '. Top .' |\n"
"| '. R:%03d G:%03d B:%03d .' |\n"
"| '.___________________.' |\n"
"| | Front | |\n"
"| Left | R:%03d G:%03d B:%03d | Right |\n"
"| R:%03d | | R:%03d |\n"
"| G:%03d | Title | G:%03d |\n"
"| B:%03d | R:%03d G:%03d B:%03d | B:%03d |\n"
"| | | |\n"
"| | Woofer | |\n"
"| | R:%03d G:%03d B:%03d | |\n"
"|_______|___________________|_______|\n"
"\n"
" Test: %d Service: %d Coin: %d\n"
" .___.___.___.___.\n"
" | %d | %d | %d | %d |\n"
" |---|---|---|---|\n"
" | %d | %d | %d | %d |\n"
" |---|---|---|---|\n"
" | %d | %d | %d | %d |\n"
" |---|---|---|---|\n"
" | %d | %d | %d | %d |\n"
" `---`---`---`---`\n",
cnt,
lights[JB_IO_RGB_LED_TOP].r,
lights[JB_IO_RGB_LED_TOP].g,
lights[JB_IO_RGB_LED_TOP].b,
lights[JB_IO_RGB_LED_FRONT].r,
lights[JB_IO_RGB_LED_FRONT].g,
lights[JB_IO_RGB_LED_FRONT].b,
lights[JB_IO_RGB_LED_LEFT].r,
lights[JB_IO_RGB_LED_RIGHT].r,
lights[JB_IO_RGB_LED_LEFT].g,
lights[JB_IO_RGB_LED_RIGHT].g,
lights[JB_IO_RGB_LED_LEFT].b,
lights[JB_IO_RGB_LED_TITLE].r,
lights[JB_IO_RGB_LED_TITLE].g,
lights[JB_IO_RGB_LED_TITLE].b,
lights[JB_IO_RGB_LED_RIGHT].b,
lights[JB_IO_RGB_LED_WOOFER].r,
lights[JB_IO_RGB_LED_WOOFER].g,
lights[JB_IO_RGB_LED_WOOFER].b,
IS_BIT_SET(input_sys, JB_IO_SYS_TEST),
IS_BIT_SET(input_sys, JB_IO_SYS_SERVICE),
IS_BIT_SET(input_sys, JB_IO_SYS_COIN),
IS_BIT_SET(input_panel, JB_IO_PANEL_01),
IS_BIT_SET(input_panel, JB_IO_PANEL_02),
IS_BIT_SET(input_panel, JB_IO_PANEL_03),
IS_BIT_SET(input_panel, JB_IO_PANEL_04),
IS_BIT_SET(input_panel, JB_IO_PANEL_05),
IS_BIT_SET(input_panel, JB_IO_PANEL_06),
IS_BIT_SET(input_panel, JB_IO_PANEL_07),
IS_BIT_SET(input_panel, JB_IO_PANEL_08),
IS_BIT_SET(input_panel, JB_IO_PANEL_09),
IS_BIT_SET(input_panel, JB_IO_PANEL_10),
IS_BIT_SET(input_panel, JB_IO_PANEL_11),
IS_BIT_SET(input_panel, JB_IO_PANEL_12),
IS_BIT_SET(input_panel, JB_IO_PANEL_13),
IS_BIT_SET(input_panel, JB_IO_PANEL_14),
IS_BIT_SET(input_panel, JB_IO_PANEL_15),
IS_BIT_SET(input_panel, JB_IO_PANEL_16));
/* set outputs */
switch (light_mode) {
case LIGHTS_OFF:
memset(lights, 0x00, sizeof(lights));
break;
case LIGHTS_ON:
memset(lights, 0xFF, sizeof(lights));
if (input_panel) {
/* disable all on when a single button is pressed */
light_mode = LIGHTS_OFF;
}
break;
case LIGHTS_INPUT: {
uint32_t all_inputs = input_panel | (input_sys << 16);
for (int i = 0; i < 6; i++) {
lights[i].r = (all_inputs & 1) ? 0xFF : 0x00;
lights[i].g = (all_inputs & 2) ? 0xFF : 0x00;
lights[i].b = (all_inputs & 4) ? 0xFF : 0x00;
all_inputs >>= 3;
}
break;
}
}
for (int i = 0; i < 6; i++) {
jb_io_set_rgb_led(i, lights[i].r, lights[i].g, lights[i].b);
}
if (!jb_io_write_outputs()) {
printf("ERROR: Writing outputs failed\n");
return -4;
}
/* avoid CPU banging */
Sleep(5);
++cnt;
/* process menu */
if ((GetAsyncKeyState(VK_ESCAPE) & 0x8000) != 0) {
system("cls");
Sleep(5);
printf(
"Menu options:\n"
" 0: Exit menu and continue loop\n"
" 1: Exit\n"
" 2: Set all lights on (cleared by pressing any panel)\n"
" 3: Tie each R/G/B to inputs (panels + test + service)\n"
" 4: Set all lights off\n"
"Waiting for input: ");
char c = getchar();
switch (c) {
case '1': {
/* one last update to turn off the lights */
for (int i = 0; i < 6; i++) {
jb_io_set_rgb_led(i, 0, 0, 0);
}
if (!jb_io_write_outputs()) {
printf("ERROR: Writing outputs failed\n");
return -4;
}
loop = false;
break;
}
case '2': {
light_mode = LIGHTS_ON;
break;
}
case '3': {
light_mode = LIGHTS_INPUT;
break;
}
case '4': {
light_mode = LIGHTS_OFF;
break;
}
case '0':
default:
break;
}
}
}
system("cls");
jb_io_fini();
return 0;
}