Files
djhackersdev_bemanitools/src/main/sdvxio/sdvxio.c
T
Will Xyen 4c0f60fc93 sdvx: Allow setting digital amp level from sdvxio
For SDVX 1-4: passes amp values through as-is

For SDVX5: ignores the amp volume control (as the game uses windows volume controls, which will work without any hooks)
2020-08-15 02:11:45 +00:00

96 lines
1.7 KiB
C

#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include "bemanitools/glue.h"
#include "bemanitools/input.h"
#include "bemanitools/sdvxio.h"
static uint16_t sdvx_io_gpio[2];
static uint8_t sdvx_io_gpio_sys;
void sdvx_io_set_loggers(
log_formatter_t misc,
log_formatter_t info,
log_formatter_t warning,
log_formatter_t fatal)
{
input_set_loggers(misc, info, warning, fatal);
}
bool sdvx_io_init(
thread_create_t thread_create,
thread_join_t thread_join,
thread_destroy_t thread_destroy)
{
input_init(thread_create, thread_join, thread_destroy);
mapper_config_load("sdvx");
return true;
}
void sdvx_io_fini(void)
{
input_fini();
}
void sdvx_io_set_gpio_lights(uint32_t gpio_lights)
{
size_t i;
for (i = 0; i < 16; i++) {
if (gpio_lights & (1 << i)) {
mapper_write_light(i, 255);
} else {
mapper_write_light(i, 0);
}
}
}
void sdvx_io_set_pwm_light(uint8_t light_no, uint8_t intensity)
{
mapper_write_light(light_no + 0x10, intensity);
}
bool sdvx_io_write_output(void)
{
return true;
}
bool sdvx_io_read_input(void)
{
uint32_t pack;
pack = mapper_update();
sdvx_io_gpio_sys = pack & 0xFF;
sdvx_io_gpio[0] = (pack >> 8) & 0x00FF;
sdvx_io_gpio[1] = (pack >> 16) & 0x00FF;
return 0;
}
uint8_t sdvx_io_get_input_gpio_sys(void)
{
return sdvx_io_gpio_sys;
}
uint16_t sdvx_io_get_input_gpio(uint8_t gpio_bank)
{
if (gpio_bank > 1) {
return 0;
}
return sdvx_io_gpio[gpio_bank];
}
uint16_t sdvx_io_get_spinner_pos(uint8_t spinner_no)
{
return mapper_read_analog(spinner_no) * 4;
}
bool sdvx_io_set_amp_volume(uint8_t primary, uint8_t headphone, uint8_t subwoofer)
{
return true;
}