Bemanitools v5.26 release
This commit is contained in:
@@ -0,0 +1,275 @@
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "geninput/mapper.h"
|
||||
#include "geninput/mapper-s11n.h"
|
||||
|
||||
#include "util/fs.h"
|
||||
#include "util/mem.h"
|
||||
|
||||
static bool mapper_impl_config_load_actions(struct mapper *m, FILE *f);
|
||||
static bool mapper_impl_config_load_analogs(struct mapper *m, FILE *f);
|
||||
static bool mapper_impl_config_load_lights(struct mapper *m, FILE *f);
|
||||
static void mapper_impl_config_save_actions(struct mapper *m, FILE *f);
|
||||
static void mapper_impl_config_save_analogs(struct mapper *m, FILE *f);
|
||||
static void mapper_impl_config_save_lights(struct mapper *m, FILE *f);
|
||||
|
||||
struct mapper *mapper_impl_config_load(FILE *f)
|
||||
{
|
||||
struct mapper *m;
|
||||
|
||||
hid_mgr_lock(); /* Need to convert from HID objects to /dev nodes */
|
||||
|
||||
m = mapper_impl_create();
|
||||
|
||||
if ( !mapper_impl_config_load_actions(m, f) ||
|
||||
!mapper_impl_config_load_analogs(m, f) ||
|
||||
!mapper_impl_config_load_lights(m, f)) {
|
||||
mapper_impl_destroy(m);
|
||||
m = NULL;
|
||||
}
|
||||
|
||||
hid_mgr_unlock();
|
||||
|
||||
return m;
|
||||
}
|
||||
|
||||
static bool mapper_impl_config_load_actions(struct mapper *m, FILE *f)
|
||||
{
|
||||
char *dev_node;
|
||||
struct mapped_action ma;
|
||||
uint8_t action;
|
||||
uint8_t page;
|
||||
uint8_t bit;
|
||||
uint32_t count;
|
||||
uint32_t i;
|
||||
|
||||
if (!read_u32(f, &count)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
for (i = 0 ; i < count ; i++) {
|
||||
memset(&ma, 0, sizeof(ma));
|
||||
|
||||
if (!read_str(f, &dev_node)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
ma.hid = hid_mgr_get_named_stub(dev_node);
|
||||
free(dev_node);
|
||||
|
||||
if ( !read_u32(f, &ma.control_no) ||
|
||||
!read_u32(f, &ma.value_min) ||
|
||||
!read_u32(f, &ma.value_max) ||
|
||||
!read_u8(f, &action) ||
|
||||
!read_u8(f, &page) ||
|
||||
!read_u8(f, &bit)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
mapper_impl_set_action_map(m, action, page, bit, &ma);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool mapper_impl_config_load_analogs(struct mapper *m, FILE *f)
|
||||
{
|
||||
char *dev_node;
|
||||
struct mapped_analog ma;
|
||||
int32_t sensitivity;
|
||||
uint8_t nanalogs;
|
||||
uint8_t i;
|
||||
|
||||
if (!read_u8(f, &nanalogs)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
mapper_impl_set_nanalogs(m, nanalogs);
|
||||
|
||||
for (i = 0 ; i < nanalogs ; i++) {
|
||||
memset(&ma, 0, sizeof(ma));
|
||||
|
||||
if (!read_str(f, &dev_node)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (dev_node[0] != '\0') {
|
||||
ma.hid = hid_mgr_get_named_stub(dev_node);
|
||||
|
||||
if (!read_u32(f, &ma.control_no)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!read_u32(f, &sensitivity)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
mapper_impl_set_analog_map(m, i, &ma);
|
||||
mapper_impl_set_analog_sensitivity(m, i, sensitivity);
|
||||
}
|
||||
|
||||
free(dev_node);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool mapper_impl_config_load_lights(struct mapper *m, FILE *f)
|
||||
{
|
||||
char *dev_node;
|
||||
struct mapped_light ml;
|
||||
uint8_t game_light;
|
||||
uint8_t nlights;
|
||||
uint32_t count;
|
||||
uint32_t i;
|
||||
|
||||
if (!read_u8(f, &nlights)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
mapper_impl_set_nlights(m, nlights);
|
||||
|
||||
if (!read_u32(f, &count)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
for (i = 0 ; i < count ; i++) {
|
||||
memset(&ml, 0, sizeof(ml));
|
||||
|
||||
if (!read_str(f, &dev_node)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
ml.hid = hid_mgr_get_named_stub(dev_node);
|
||||
free(dev_node);
|
||||
|
||||
if (!read_u32(f, &ml.light_no)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!read_u8(f, &game_light)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
mapper_impl_set_light_map(m, &ml, game_light);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void mapper_impl_config_save(struct mapper *m, FILE *f)
|
||||
{
|
||||
hid_mgr_lock();
|
||||
|
||||
mapper_impl_config_save_actions(m, f);
|
||||
mapper_impl_config_save_analogs(m, f);
|
||||
mapper_impl_config_save_lights(m, f);
|
||||
|
||||
hid_mgr_unlock();
|
||||
}
|
||||
|
||||
static void mapper_impl_config_save_actions(struct mapper *m, FILE *f)
|
||||
{
|
||||
action_iter_t pos;
|
||||
struct mapped_action ma;
|
||||
uint32_t count;
|
||||
uint8_t action;
|
||||
uint8_t page;
|
||||
uint8_t bit;
|
||||
|
||||
/* Count up bindings */
|
||||
|
||||
count = 0;
|
||||
|
||||
for (pos = mapper_impl_iterate_actions(m)
|
||||
; action_iter_is_valid(pos)
|
||||
; action_iter_next(pos)) {
|
||||
count++;
|
||||
}
|
||||
|
||||
action_iter_free(pos);
|
||||
write_u32(f, &count);
|
||||
|
||||
/* Write out bindings */
|
||||
|
||||
for (pos = mapper_impl_iterate_actions(m)
|
||||
; action_iter_is_valid(pos)
|
||||
; action_iter_next(pos)) {
|
||||
action_iter_get_mapping(pos, &ma);
|
||||
action = action_iter_get_action(pos);
|
||||
page = action_iter_get_page(pos);
|
||||
bit = action_iter_get_bit(pos);
|
||||
|
||||
write_str(f, hid_stub_get_dev_node(ma.hid));
|
||||
write_u32(f, &ma.control_no);
|
||||
write_u32(f, &ma.value_min);
|
||||
write_u32(f, &ma.value_max);
|
||||
write_u8(f, &action);
|
||||
write_u8(f, &page);
|
||||
write_u8(f, &bit);
|
||||
}
|
||||
|
||||
action_iter_free(pos);
|
||||
}
|
||||
|
||||
static void mapper_impl_config_save_analogs(struct mapper *m, FILE *f)
|
||||
{
|
||||
struct mapped_analog ma;
|
||||
int32_t sensitivity;
|
||||
uint8_t nanalogs;
|
||||
uint8_t i;
|
||||
|
||||
nanalogs = mapper_impl_get_nanalogs(m);
|
||||
write_u8(f, &nanalogs);
|
||||
|
||||
for (i = 0 ; i < nanalogs ; i++) {
|
||||
mapper_impl_get_analog_map(m, i, &ma);
|
||||
|
||||
if (ma.hid == NULL) {
|
||||
write_str(f, "");
|
||||
} else {
|
||||
sensitivity = mapper_impl_get_analog_sensitivity(m, i);
|
||||
|
||||
write_str(f, hid_stub_get_dev_node(ma.hid));
|
||||
write_u32(f, &ma.control_no);
|
||||
write_u32(f, &sensitivity);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void mapper_impl_config_save_lights(struct mapper *m, FILE *f)
|
||||
{
|
||||
light_iter_t pos;
|
||||
struct mapped_light ml;
|
||||
uint8_t game_light;
|
||||
uint8_t nlights;
|
||||
uint32_t count;
|
||||
|
||||
nlights = mapper_impl_get_nlights(m);
|
||||
write_u8(f, &nlights);
|
||||
|
||||
count = 0;
|
||||
|
||||
for (pos = mapper_impl_iterate_lights(m)
|
||||
; light_iter_is_valid(pos)
|
||||
; light_iter_next(pos)) {
|
||||
count++;
|
||||
}
|
||||
|
||||
write_u32(f, &count);
|
||||
light_iter_free(pos);
|
||||
|
||||
for (pos = mapper_impl_iterate_lights(m)
|
||||
; light_iter_is_valid(pos)
|
||||
; light_iter_next(pos)) {
|
||||
light_iter_get_mapping(pos, &ml);
|
||||
game_light = light_iter_get_game_light(pos);
|
||||
|
||||
write_str(f, hid_stub_get_dev_node(ml.hid));
|
||||
write_u32(f, &ml.light_no);
|
||||
write_u8(f, &game_light);
|
||||
}
|
||||
|
||||
light_iter_free(pos);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user