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:
parent
65a45740d2
commit
128496901e
@ -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
3
doc/tools/jbiotest.md
Normal 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.
|
8
src/main/jbiotest/Module.mk
Normal file
8
src/main/jbiotest/Module.mk
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
exes += jbiotest \
|
||||||
|
|
||||||
|
libs_jbiotest := \
|
||||||
|
jbio \
|
||||||
|
util \
|
||||||
|
|
||||||
|
src_jbiotest := \
|
||||||
|
main.c \
|
233
src/main/jbiotest/main.c
Normal file
233
src/main/jbiotest/main.c
Normal 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;
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user