Pre-work launcher refactoring #278

Merged
icex2 merged 8 commits from pre-work-launcher-refactoring into master 2024-02-01 00:47:14 +03:00
32 changed files with 688 additions and 171 deletions
+13 -8
View File
@@ -80,7 +80,7 @@ cflags += \
# Each AVS-dependent project should consume the earliest AVS import definition
# that is still ABI-compatible with the real build its target links against.
avsvers_32 := 1700 1603 1601 1508 1403 1304 1101 1002 803 0
avsvers_32 := 1700 1603 1601 1508 1403 1306 1304 1101 1002 803 0
avsvers_64 := 1700 1603 1601 1509 1508
imps += avs avs-ea3
@@ -91,6 +91,7 @@ include src/main/acioemu/Module.mk
include src/main/aciomgr/Module.mk
include src/main/aciotest/Module.mk
include src/main/asio/Module.mk
include src/main/avs-util/Module.mk
include src/main/bio2drv/Module.mk
include src/main/bio2emu-iidx/Module.mk
include src/main/bio2emu/Module.mk
@@ -685,9 +686,9 @@ $(zipdir)/ddr-12.zip: \
$(V)zip -j $@ $^
$(zipdir)/ddr-13.zip: \
build/bin/avs2_1304-32/launcher.exe \
build/bin/avs2_1304-32/ddrhook2.dll \
build/bin/avs2_1304-32/unicorntail.dll \
build/bin/avs2_1306-32/launcher.exe \
build/bin/avs2_1306-32/ddrhook2.dll \
build/bin/avs2_1306-32/unicorntail.dll \
build/bin/indep-32/config.exe \
build/bin/indep-32/ddrio.dll \
build/bin/indep-32/ddrio-mm.dll \
@@ -700,7 +701,7 @@ $(zipdir)/ddr-13.zip: \
$(V)echo ... $@
$(V)zip -j $@ $^
$(zipdir)/ddr-14-to-16.zip: \
$(zipdir)/ddr-14-to-18.zip: \
build/bin/avs2_1508-32/launcher.exe \
build/bin/avs2_1508-32/ddrhook2.dll \
build/bin/avs2_1508-32/unicorntail.dll \
1
@@ -709,6 +710,8 @@ $(zipdir)/ddr-14-to-16.zip: \
build/bin/indep-32/eamio.dll \
build/bin/indep-32/geninput.dll \
dist/ddr/config.bat \
dist/ddr/gamestart-17.bat \
dist/ddr/gamestart-18.bat \
dist/ddr/gamestart-14.bat \
dist/ddr/gamestart-15.bat \
dist/ddr/gamestart-16.bat \
@@ -716,7 +719,7 @@ $(zipdir)/ddr-14-to-16.zip: \
$(V)echo ... $@
$(V)zip -j $@ $^
$(zipdir)/ddr-16-x64.zip: \
$(zipdir)/ddr-16-to-18-x64.zip: \
build/bin/avs2_1603-64/launcher.exe \
build/bin/avs2_1603-64/ddrhook2.dll \
build/bin/avs2_1603-64/unicorntail.dll \
1
@@ -725,6 +728,8 @@ $(zipdir)/ddr-16-x64.zip: \
build/bin/indep-64/eamio.dll \
build/bin/indep-64/geninput.dll \
dist/ddr/config.bat \
dist/ddr/gamestart-17.bat \
dist/ddr/gamestart-18.bat \
dist/ddr/gamestart-16.bat \
| $(zipdir)/
$(V)echo ... $@
@@ -827,8 +832,8 @@ $(BUILDDIR)/bemanitools.zip: \
$(zipdir)/ddr-12.zip \
$(zipdir)/ddr-12-us.zip \
$(zipdir)/ddr-13.zip \
$(zipdir)/ddr-14-to-16.zip \
$(zipdir)/ddr-16-x64.zip \
$(zipdir)/ddr-14-to-18.zip \
$(zipdir)/ddr-16-to-18-x64.zip \
$(zipdir)/ddr-hwio-x86.zip \
$(zipdir)/ddr-hwio-x64.zip \
$(zipdir)/doc.zip \
+6 -3
View File
@@ -40,9 +40,12 @@ The following games are supported with their corresponding hook-libraries.
- Dance Dance Revolution X (`ddr-11.zip`): [ddrhook1](doc/ddrhook/ddrhook1.md)
- Dance Dance Revolution X2 (US/EU regions) (`ddr-12-us.zip`): [ddrhook1](doc/ddrhook/ddrhook1.md)
- Dance Dance Revolution X2 (JP region) (`ddr-12.zip`): [ddrhook2](doc/ddrhook/ddrhook2.md)
- Dance Dance Revolution 2013 (`ddr-14-to-16.zip`): [ddrhook2](doc/ddrhook/ddrhook2.md)
- Dance Dance Revolution 2014 (`ddr-14-to-16.zip`): [ddrhook2](doc/ddrhook/ddrhook2.md)
- Dance Dance Revolution A (`ddr-14-to-16.zip`): [ddrhook2](doc/ddrhook/ddrhook2.md)
- Dance Dance Revolution X3 vs. 2ndMIX (`ddr-13.zip`): [ddrhook2](doc/ddrhook/ddrhook2.md)
- Dance Dance Revolution 2013 (`ddr-14-to-18.zip`): [ddrhook2](doc/ddrhook/ddrhook2.md)
- Dance Dance Revolution 2014 (`ddr-14-to-18.zip`): [ddrhook2](doc/ddrhook/ddrhook2.md)
- Dance Dance Revolution A (`ddr-14-to-18.zip`): [ddrhook2](doc/ddrhook/ddrhook2.md)
- Dance Dance Revolution A20 (`ddr-14-to-18.zip`): [ddrhook2](doc/ddrhook/ddrhook2.md)
- Dance Dance Revolution A20+ (`ddr-14-to-18.zip`): [ddrhook2](doc/ddrhook/ddrhook2.md)
- [Beatmania IIDX](doc/iidxhook/README.md)
- Beatmania IIDX 9th Style (`iidx-09-to-12.zip`): [iidxhook1](doc/iidxhook/iidxhook1.md)
- Beatmania IIDX 10th Style (`iidx-09-to-12.zip`): [iidxhook1](doc/iidxhook/iidxhook1.md)
+2
View File
@@ -9,6 +9,8 @@ The following games are supported by this hook library:
- Dance Dance Revolution 2013
- Dance Dance Revolution 2014
- Dance Dance Revolution A
- Dance Dance Revolution A20
- Dance Dance Revolution A20+
Note that different builds of the same hook library are required to run the different versions. See
different distribution packages, e.g. `ddr-12.zip`, `ddr-13.zip` etc.
+104 -17
View File
@@ -4,6 +4,7 @@
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include <sys/stat.h>
enum property_create_flag {
PROPERTY_FLAG_READ = 0x1,
@@ -26,18 +27,39 @@ enum property_node_traversal {
};
enum property_type {
PROPERTY_TYPE_VOID = 1,
PROPERTY_TYPE_S8 = 2,
PROPERTY_TYPE_U8 = 3,
PROPERTY_TYPE_S16 = 4,
PROPERTY_TYPE_U16 = 5,
PROPERTY_TYPE_S32 = 6,
PROPERTY_TYPE_U32 = 7,
PROPERTY_TYPE_S64 = 8,
PROPERTY_TYPE_U64 = 9,
PROPERTY_TYPE_BIN = 10,
PROPERTY_TYPE_STR = 11,
PROPERTY_TYPE_BOOL = 52
PROPERTY_TYPE_VOID = 0x01,
PROPERTY_TYPE_S8 = 0x02,
PROPERTY_TYPE_U8 = 0x03,
PROPERTY_TYPE_S16 = 0x04,
PROPERTY_TYPE_U16 = 0x05,
PROPERTY_TYPE_S32 = 0x06,
PROPERTY_TYPE_U32 = 0x07,
PROPERTY_TYPE_S64 = 0x08,
PROPERTY_TYPE_U64 = 0x09,
PROPERTY_TYPE_BIN = 0x0A,
PROPERTY_TYPE_STR = 0x0B,
PROPERTY_TYPE_IP4 = 0x0C,
PROPERTY_TYPE_TIME = 0x0D,
PROPERTY_TYPE_FLOAT = 0x0E,
PROPERTY_TYPE_DOUBLE = 0x0F,
PROPERTY_TYPE_4U8 = 0x25,
PROPERTY_TYPE_ATTR = 0x2E,
PROPERTY_TYPE_BOOL = 0x34,
// Missing __type attribute
PROPERTY_TYPE_VOID_WITH_ATTRIBUTES = 0x40 | PROPERTY_TYPE_VOID,
PROPERTY_TYPE_ARRAY_S8 = 0x40 | PROPERTY_TYPE_S8,
PROPERTY_TYPE_ARRAY_U8 = 0x40 | PROPERTY_TYPE_U8,
PROPERTY_TYPE_ARRAY_S16 = 0x40 | PROPERTY_TYPE_S16,
PROPERTY_TYPE_ARRAY_U16 = 0x40 | PROPERTY_TYPE_U16,
PROPERTY_TYPE_ARRAY_S32 = 0x40 | PROPERTY_TYPE_S32,
PROPERTY_TYPE_ARRAY_U32 = 0x40 | PROPERTY_TYPE_U32,
PROPERTY_TYPE_ARRAY_S64 = 0x40 | PROPERTY_TYPE_S64,
PROPERTY_TYPE_ARRAY_U64 = 0x40 | PROPERTY_TYPE_U64,
PROPERTY_TYPE_ARRAY_TIME = 0x40 | PROPERTY_TYPE_TIME,
PROPERTY_TYPE_ARRAY_BOOL = 0x40 | PROPERTY_TYPE_BOOL,
PROPERTY_TYPE_STR_WITH_ATTRIBUTES = 0x40 | PROPERTY_TYPE_STR,
};
struct property;
@@ -66,6 +88,7 @@ enum psmap_type {
PSMAP_TYPE_STR = 10,
PSMAP_TYPE_ATTR = 45,
PSMAP_TYPE_BOOL = 50,
PSMAP_TYPE_TERMINATOR = 0xFF,
};
#define PSMAP_FLAG_HAVE_DEFAULT 0x01
@@ -102,7 +125,7 @@ struct property_psmap {
#define PSMAP_END \
{ \
0xFF, 0, 0, 0, NULL, 0 \
PSMAP_TYPE_TERMINATOR, 0, 0, 0, NULL, 0 \
} \
} \
;
@@ -160,6 +183,11 @@ void avs_boot(
void avs_shutdown(void);
typedef uint32_t avs_desc;
typedef int avs_error;
#define AVS_IS_ERROR(x) x < 0
void log_body_fatal(const char *module, const char *fmt, ...);
void log_body_info(const char *module, const char *fmt, ...);
void log_body_misc(const char *module, const char *fmt, ...);
@@ -187,6 +215,7 @@ int property_insert_read(
uint32_t context);
int property_mem_write(struct property *prop, void *bytes, int nbytes);
void *property_desc_to_buffer(struct property *prop);
avs_error property_query_size(struct property *prop);
void property_file_write(struct property *prop, const char *path);
int property_set_flag(struct property *prop, int flags, int mask);
void property_destroy(struct property *prop);
@@ -203,8 +232,8 @@ int property_psmap_export(
const struct property_psmap *psmap);
struct property_node *property_node_clone(
struct property *new_parent,
int unk0,
struct property *parent_prop,
struct property_node *parent_node,
struct property_node *src,
bool deep);
struct property_node *property_node_create(
@@ -226,15 +255,73 @@ void property_node_remove(struct property_node *node);
enum property_type property_node_type(struct property_node *node);
struct property_node *property_node_traversal(
struct property_node *node, enum property_node_traversal direction);
void property_node_datasize(struct property_node *node);
int property_node_datasize(struct property_node *node);
avs_error property_node_read(struct property_node *node, enum property_type type, void* data, uint32_t data_size);
static inline void property_remove(struct property *prop, struct property_node *node, const char *path)
{
struct property_node *cur = property_search(prop, node, path);
while (cur) {
struct property_node *next = property_node_traversal(node, TRAVERSE_NEXT_SEARCH_RESULT);
property_node_remove(cur);
cur = next;
}
}
bool std_getenv(const char *key, char *val, uint32_t nbytes);
void std_setenv(const char *key, const char *val);
void* avs_fs_open(const char* path, int mode, int flags);
struct avs_stat {
uint64_t st_atime;
uint64_t st_mtime;
uint64_t st_ctime;
uint32_t unk1;
uint32_t filesize;
struct stat padding;
};
#if AVS_VERSION <= 1306
enum avs_file_mode {
AVS_FILE_READ = 0x00,
AVS_FILE_WRITE = 0x01,
AVS_FILE_READ_WRITE = 0x02,
AVS_FILE_CREATE = 0x10,
AVS_FILE_TRUNCATE = 0x20,
AVS_FILE_EXCLUSIVE = 0x80,
};
#else
enum avs_file_mode {
AVS_FILE_READ = 0x01,
AVS_FILE_WRITE = 0x02,
AVS_FILE_CREATE = 0x10,
AVS_FILE_TRUNCATE = 0x20,
AVS_FILE_EXCLUSIVE = 0x80,
};
#endif
enum avs_file_flag {
AVS_FILE_FLAG_SHARE_READ = 0x124,
AVS_FILE_FLAG_SHARE_WRITE = 0x92,
};
enum avs_seek_origin {
AVS_SEEK_SET = 0,
AVS_SEEK_CUR = 1,
AVS_SEEK_END = 2,
};
avs_desc avs_fs_open(const char *path, uint16_t mode, int flags);
int avs_fs_close(avs_desc desc);
size_t avs_fs_read(avs_desc desc, char *buf, uint32_t sz);
int avs_fs_lseek(avs_desc desc, long pos, int whence);
int avs_fs_lstat(const char *path, struct avs_stat *st);
int avs_fs_copy(const char *src, const char *dest);
int avs_fs_addfs(void *filesys_struct);
int avs_fs_mount(
const char *mountpoint, const char *fsroot, const char *fstype, void *data);
avs_desc avs_fs_opendir(const char *path);
const char* avs_fs_readdir(avs_desc dir);
void avs_fs_closedir(avs_desc dir);
bool avs_is_active();
+7
View File
@@ -2,6 +2,12 @@ LIBRARY libavs-win32
EXPORTS
avs_boot
avs_fs_close
avs_fs_copy
avs_fs_lseek
avs_fs_lstat
avs_fs_open
avs_fs_read
avs_net_ctrl
avs_shutdown
avs_thread_create
@@ -26,6 +32,7 @@ EXPORTS
property_node_clone
property_node_create
property_node_name
property_node_read
property_node_refer
property_node_remove
property_node_type
+11
View File
@@ -2,6 +2,15 @@ LIBRARY libavs-win32
EXPORTS
avs_boot
avs_fs_close
avs_fs_copy
avs_fs_lseek
avs_fs_lstat
avs_fs_open
avs_fs_read
avs_fs_opendir
avs_fs_readdir
avs_fs_closedir
avs_net_ctrl
avs_shutdown
avs_thread_create
@@ -27,11 +36,13 @@ EXPORTS
property_node_create
property_node_datasize
property_node_name
property_node_read
property_node_refer
property_node_remove
property_node_type
property_node_traversal
property_node_refdata
property_query_size
property_psmap_export
property_psmap_import
std_getenv
+16
View File
@@ -2,6 +2,15 @@ LIBRARY libavs-win32
EXPORTS
avs_boot @22 NONAME
avs_fs_close @60 NONAME
avs_fs_copy @63 NONAME
avs_fs_lseek @70 NONAME
avs_fs_lstat @71 NONAME
avs_fs_open @75 NONAME
avs_fs_read @77 NONAME
avs_fs_opendir @76 NONAME
avs_fs_readdir @78 NONAME
avs_fs_closedir @61 NONAME
avs_net_ctrl @107 NONAME
avs_shutdown @140 NONAME
avs_thread_create @156 NONAME
@@ -19,8 +28,15 @@ EXPORTS
property_insert_read @255 NONAME
property_node_create @266 NONAME
property_node_datasize @267 NONAME
property_node_name @274 NONAME
property_node_read @276 NONAME
property_node_refer @278 NONAME
property_node_remove @279 NONAME
property_node_type @282 NONAME
property_node_clone @280 NONAME
property_node_traversal @282 NONAME
property_node_refdata @277 NONAME
property_query_size @290 NONAME
property_psmap_import @288 NONAME
property_psmap_export @287 NONAME
property_read_query_memsize @291 NONAME
+15
View File
@@ -2,7 +2,15 @@ LIBRARY libavs-win32
EXPORTS
avs_boot @237 NONAME
avs_fs_close @276 NONAME
avs_fs_copy @283 NONAME
avs_fs_lseek @16 NONAME
avs_fs_lstat @97 NONAME
avs_fs_open @178 NONAME
avs_fs_read @306 NONAME
avs_fs_opendir @216 NONAME
avs_fs_readdir @130 NONAME
avs_fs_closedir @131 NONAME
avs_net_ctrl @15 NONAME
avs_shutdown @333 NONAME
avs_thread_create @183 NONAME
@@ -19,8 +27,15 @@ EXPORTS
property_insert_read @23 NONAME
property_node_create @316 NONAME
property_node_datasize @249 NONAME
property_node_name @255 NONAME
property_node_read @2 NONAME
property_node_refer @268 NONAME
property_node_remove @129 NONAME
property_node_type @329 NONAME
property_node_clone @130 NONAME
property_node_traversal @93 NONAME
property_node_refdata @330 NONAME == XC058ba5000151
property_query_size @250 NONAME == XC058ba5000101
property_psmap_import @102 NONAME
property_psmap_export @110 NONAME
property_read_query_memsize @100 NONAME
+5
View File
@@ -0,0 +1,5 @@
LIBRARY libavs-win32-ea3
EXPORTS
ea3_boot @94 NONAME
ea3_shutdown @97 NONAME
+44
View File
@@ -0,0 +1,44 @@
LIBRARY libavs-win32
EXPORTS
avs_boot @237 NONAME == XC058ba50000f4
avs_fs_close @276 NONAME == XC058ba500011b
avs_fs_copy @283 NONAME == XC058ba5000122
avs_fs_lseek @16 NONAME == XC058ba500000f
avs_fs_lstat @97 NONAME == XC058ba5000063
avs_fs_open @178 NONAME == XC058ba50000b6
avs_fs_read @306 NONAME == XC058ba5000139
avs_fs_opendir @216 NONAME == XC058ba50000dd
avs_fs_readdir @130 NONAME == XC058ba5000086
avs_fs_closedir @131 NONAME == XC058ba5000087
avs_net_ctrl @15 NONAME == XC058ba500000e
avs_shutdown @333 NONAME == XC058ba5000154
avs_thread_create @183 NONAME == XC058ba50000bb
avs_thread_destroy @76 NONAME == XC058ba500004e
avs_thread_exit @147 NONAME == XC058ba5000097
avs_thread_join @92 NONAME == XC058ba500005e
log_body_misc @44 NONAME == XC058ba500002d
log_body_info @339 NONAME == XC058ba500015a
log_body_warning @219 NONAME == XC058ba50000e1
log_body_fatal @128 NONAME == XC058ba5000084
property_create @256 NONAME == XC058ba5000107
property_desc_to_buffer @201 NONAME == XC058ba50000cd
property_destroy @264 NONAME == XC058ba500010f
property_insert_read @23 NONAME == XC058ba5000016
property_node_create @316 NONAME == XC058ba5000143
property_node_datasize @249 NONAME == XC058ba5000100
property_node_name @255 NONAME == XC058ba5000106
property_node_read @2 NONAME == XC058ba5000001
property_node_refer @268 NONAME == XC058ba5000113
property_node_remove @129 NONAME == XC058ba5000085
property_node_type @329 NONAME == XC058ba5000150
property_node_clone @252 NONAME == XC058ba5000103
property_node_traversal @93 NONAME == XC058ba500005f
property_node_refdata @330 NONAME == XC058ba5000151
property_query_size @250 NONAME == XC058ba5000101
property_psmap_import @102 NONAME == XC058ba5000068
property_psmap_export @110 NONAME == XC058ba5000071
property_read_query_memsize @100 NONAME == XC058ba5000066
property_search @244 NONAME == XC058ba50000fb
std_getenv @226 NONAME == XC058ba50000e8
std_setenv @114 NONAME == XC058ba5000075
+16
View File
@@ -2,6 +2,15 @@ LIBRARY libavs-win32
EXPORTS
avs_boot @298 NONAME
avs_fs_close @573 NONAME == XC0bbe97000119
avs_fs_copy @573 NONAME == XC0bbe97000120
avs_fs_lseek @573 NONAME ==
avs_fs_lstat @573 NONAME == XC0bbe9700005f
avs_fs_open @573 NONAME == XC0bbe970000b3
avs_fs_read @573 NONAME ==
avs_fs_opendir @573 NONAME == XC0bbe970000db
avs_fs_readdir @573 NONAME ==
avs_fs_closedir @573 NONAME ==
avs_net_ctrl @100 NONAME
avs_shutdown @299 NONAME
avs_thread_create @6 NONAME
@@ -15,7 +24,14 @@ EXPORTS
property_desc_to_buffer @131 NONAME
property_destroy @130 NONAME
property_insert_read @133 NONAME
property_node_name @573 NONAME ==
property_node_read @573 NONAME ==
property_node_remove @148 NONAME
property_node_type @573 NONAME ==
property_node_clone @149 NONAME
property_node_traversal @151 NONAME
property_node_refdata @573 NONAME ==
property_query_size @573 NONAME ==
property_psmap_import @163 NONAME
property_psmap_export @164 NONAME
property_read_query_memsize @161 NONAME
+13
View File
@@ -5,8 +5,13 @@ EXPORTS
avs_fs_close @65 NONAME
avs_fs_lseek @59 NONAME
avs_fs_lseek64 @60 NONAME
avs_fs_lstat @79 NONAME
avs_fs_open @58 NONAME
avs_fs_read @61 NONAME
avs_fs_copy @81 NONAME
avs_fs_opendir @72 NONAME == XCd229cc0000f0
avs_fs_readdir @73 NONAME == XCd229cc0000bb
avs_fs_closedir @74 NONAME == XCd229cc0000b8
avs_net_ctrl @98 NONAME
avs_shutdown @286 NONAME
avs_thread_create @6 NONAME
@@ -22,8 +27,16 @@ EXPORTS
property_destroy @128 NONAME
property_insert_read @131 NONAME
property_node_create @145 NONAME
property_node_name @150 NONAME
property_node_read @154 NONAME == XCd229cc0000f3
property_node_refer @158 NONAME
property_node_remove @146 NONAME
property_node_type @151 NONAME == XCd229cc000071
property_node_clone @147 NONAME
property_node_traversal @149 NONAME
property_node_refdata @148 NONAME == XCd229cc00009f
property_node_datasize @153 NONAME == XCd229cc000083
property_query_size @142 NONAME == XCd229cc000032
property_psmap_export @162 NONAME
property_psmap_import @161 NONAME
property_read_query_memsize @159 NONAME
+17
View File
@@ -1,6 +1,15 @@
LIBRARY libavs-win32
EXPORTS
avs_fs_close @65 NONAME
avs_fs_copy @81 NONAME
avs_fs_lseek @59 NONAME
avs_fs_lstat @79 NONAME
avs_fs_open @58 NONAME
avs_fs_read @61 NONAME
avs_fs_opendir @72 NONAME == XCnbrep7000047
avs_fs_readdir @73 NONAME == XCnbrep7000048
avs_fs_closedir @74 NONAME == XCnbrep7000049
avs_thread_create @5 NONAME
avs_thread_destroy @7 NONAME
avs_thread_exit @11 NONAME
@@ -12,7 +21,15 @@ EXPORTS
property_insert_read @128 NONAME
property_search @141 NONAME
property_node_create @142 NONAME
property_node_name @147 NONAME == XCnbrep7000092
property_node_remove @143 NONAME
property_node_type @148 NONAME == XCnbrep7000093
property_node_clone @144 NONAME
property_node_traversal @146 NONAME
property_node_refdata @145 NONAME == XCnbrep7000090
property_node_datasize @150 NONAME == XCnbrep7000095
property_node_read @151 NONAME == XCnbrep7000096
property_query_size @139 NONAME == XCnbrep700008a
property_node_refer @155 NONAME
property_read_query_memsize @156 NONAME
property_psmap_export @159 NONAME
+17
View File
@@ -1,6 +1,15 @@
LIBRARY libavs-win32
EXPORTS
avs_fs_close @86 NONAME == XCnbrep7000055
avs_fs_copy @102 NONAME == XCnbrep7000065
avs_fs_lseek @80 NONAME == XCnbrep700004f
avs_fs_lstat @100 NONAME == XCnbrep7000063
avs_fs_open @79 NONAME == XCnbrep700004e
avs_fs_read @82 NONAME == XCnbrep7000051
avs_fs_opendir @93 NONAME == XCnbrep700005c
avs_fs_readdir @94 NONAME == XCnbrep700005d
avs_fs_closedir @95 NONAME == XCnbrep700005e
avs_thread_create @5 NONAME
avs_thread_destroy @7 NONAME
avs_thread_exit @11 NONAME
@@ -12,7 +21,15 @@ EXPORTS
property_insert_read @149 NONAME
property_search @162 NONAME
property_node_create @163 NONAME
property_node_name @168 NONAME == XCnbrep70000a7
property_node_remove @164 NONAME
property_node_type @169 NONAME == XCnbrep70000a8
property_node_clone @165 NONAME
property_node_traversal @167 NONAME
property_node_refdata @166 NONAME == XCnbrep70000a5
property_node_datasize @171 NONAME == XCnbrep70000aa
property_query_size @160 NONAME == XCnbrep700009f
property_node_read @172 NONAME == XCnbrep70000ab
property_node_refer @176 NONAME
property_read_query_memsize @177 NONAME
property_psmap_import @179 NONAME
+17
View File
@@ -6,7 +6,16 @@ EXPORTS
avs_thread_exit @11 NONAME
avs_thread_join @12 NONAME
avs_fs_addfs @73 NONAME
avs_fs_close @86 NONAME == XCgsqzn0000055
avs_fs_copy @102 NONAME == XCgsqzn0000065
avs_fs_lseek @80 NONAME == XCgsqzn000004f
avs_fs_lstat @100 NONAME == XCgsqzn0000063
avs_fs_mount @76 NONAME
avs_fs_open @79 NONAME == XCgsqzn000004e
avs_fs_read @82 NONAME == XCgsqzn0000051
avs_fs_opendir @93 NONAME == XCgsqzn000005c
avs_fs_readdir @94 NONAME == XCgsqzn000005d
avs_fs_closedir @95 NONAME == XCgsqzn000005e
avs_net_ctrl @119 NONAME
property_create @145 NONAME
property_destroy @146 NONAME
@@ -14,7 +23,15 @@ EXPORTS
property_insert_read @149 NONAME
property_search @162 NONAME
property_node_create @163 NONAME
property_node_name @168 NONAME == XCgsqzn00000a7
property_node_remove @164 NONAME
property_node_type @169 NONAME == XCgsqzn00000a8
property_node_clone @165 NONAME
property_node_traversal @167 NONAME
property_node_refdata @166 NONAME == XCgsqzn00000a5
property_node_datasize @171 NONAME == XCgsqzn00000aa
property_node_read @172 NONAME == XCgsqzn00000ab
property_query_size @160 NONAME == XCgsqzn000009f
property_node_refer @176 NONAME
property_read_query_memsize @177 NONAME
property_psmap_import @179 NONAME
+7
View File
@@ -2,6 +2,12 @@ LIBRARY libavs-win32
EXPORTS
avs_boot
avs_fs_close
avs_fs_copy
avs_fs_lseek
avs_fs_lstat
avs_fs_open
avs_fs_read
avs_net_ctrl
avs_shutdown
avs_thread_create
@@ -27,6 +33,7 @@ EXPORTS
property_node_create
property_node_datasize
property_node_name
property_node_read
property_node_refer
property_node_remove
property_node_type
+13
View File
@@ -3,10 +3,15 @@ LIBRARY libavs-win64
EXPORTS
avs_boot @285 NONAME
avs_fs_close @65 NONAME
avs_fs_copy @81 NONAME
avs_fs_lseek @59 NONAME
avs_fs_lseek64 @60 NONAME
avs_fs_lstat @79 NONAME
avs_fs_open @58 NONAME
avs_fs_read @61 NONAME
avs_fs_opendir @72 NONAME == XCd229cc0000f0
avs_fs_readdir @73 NONAME == XCd229cc0000bb
avs_fs_closedir @74 NONAME == XCd229cc0000b8
avs_net_ctrl @98 NONAME
avs_shutdown @286 NONAME
avs_thread_create @6 NONAME
@@ -22,8 +27,16 @@ EXPORTS
property_destroy @128 NONAME
property_insert_read @131 NONAME
property_node_create @145 NONAME
property_node_name @150 NONAME
property_node_read @154 NONAME == XCd229cc0000f3
property_node_refer @158 NONAME
property_node_remove @146 NONAME
property_node_type @151 NONAME == XCd229cc000071
property_node_clone @147 NONAME
property_node_traversal @149 NONAME
property_node_refdata @148 NONAME == XCd229cc00009f
property_node_datasize @153 NONAME == XCd229cc000083
property_query_size @142 NONAME == XCd229cc000032
property_psmap_export @162 NONAME
property_psmap_import @161 NONAME
property_read_query_memsize @159 NONAME
+13
View File
@@ -3,10 +3,15 @@ LIBRARY libavs-win64
EXPORTS
avs_boot @285 NONAME
avs_fs_close @65 NONAME
avs_fs_copy @81 NONAME
avs_fs_lseek @59 NONAME
avs_fs_lseek64 @60 NONAME
avs_fs_lstat @78 NONAME
avs_fs_open @58 NONAME
avs_fs_read @61 NONAME
avs_fs_opendir @573 NONAME ==
avs_fs_readdir @573 NONAME ==
avs_fs_closedir @573 NONAME ==
avs_net_ctrl @98 NONAME
avs_shutdown @286 NONAME
avs_thread_create @6 NONAME
@@ -22,8 +27,16 @@ EXPORTS
property_destroy @128 NONAME
property_insert_read @131 NONAME
property_node_create @145 NONAME
property_node_name @573 NONAME ==
property_node_read @573 NONAME ==
property_query_size @573 NONAME ==
property_node_refer @158 NONAME
property_node_remove @146 NONAME
property_node_type @573 NONAME ==
property_node_clone @147 NONAME
property_node_traversal @149 NONAME
property_node_refdata @573 NONAME ==
property_node_datasize @573 NONAME ==
property_psmap_export @162 NONAME
property_psmap_import @161 NONAME
property_read_query_memsize @159 NONAME
+17
View File
@@ -1,6 +1,15 @@
LIBRARY libavs-win64
EXPORTS
avs_fs_close @65 NONAME
avs_fs_copy @81 NONAME
avs_fs_lseek @59 NONAME
avs_fs_lstat @79 NONAME
avs_fs_open @58 NONAME
avs_fs_read @61 NONAME
avs_fs_opendir @72 NONAME == XCnbrep7000047
avs_fs_readdir @73 NONAME == XCnbrep7000048
avs_fs_closedir @74 NONAME == XCnbrep7000049
avs_thread_create @5 NONAME
avs_thread_destroy @7 NONAME
avs_thread_exit @11 NONAME
@@ -12,7 +21,15 @@ EXPORTS
property_insert_read @128 NONAME
property_search @141 NONAME
property_node_create @142 NONAME
property_node_name @147 NONAME == XCnbrep7000092
property_node_remove @143 NONAME
property_node_type @148 NONAME == XCnbrep7000093
property_node_clone @144 NONAME
property_node_traversal @146 NONAME
property_node_refdata @145 NONAME == XCnbrep7000090
property_node_datasize @150 NONAME == XCnbrep7000095
property_node_read @151 NONAME == XCnbrep7000096
property_query_size @139 NONAME == XCnbrep700008a
property_node_refer @155 NONAME
property_read_query_memsize @156 NONAME
property_psmap_export @159 NONAME
+17
View File
@@ -1,6 +1,15 @@
LIBRARY libavs-win64
EXPORTS
avs_fs_close @86 NONAME == XCnbrep7000055
avs_fs_copy @102 NONAME == XCnbrep7000065
avs_fs_lseek @80 NONAME == XCnbrep700004f
avs_fs_lstat @100 NONAME == XCnbrep7000063
avs_fs_open @79 NONAME == XCnbrep700004e
avs_fs_read @82 NONAME == XCnbrep7000051
avs_fs_opendir @93 NONAME == XCnbrep700005c
avs_fs_readdir @94 NONAME == XCnbrep700005d
avs_fs_closedir @95 NONAME == XCnbrep700005e
avs_thread_create @5 NONAME
avs_thread_destroy @7 NONAME
avs_thread_exit @11 NONAME
@@ -12,7 +21,15 @@ EXPORTS
property_insert_read @149 NONAME
property_search @162 NONAME
property_node_create @163 NONAME
property_node_name @168 NONAME == XCnbrep70000a7
property_node_remove @164 NONAME
property_node_type @169 NONAME == XCnbrep70000a8
property_node_clone @165 NONAME
property_node_traversal @167 NONAME
property_node_refdata @166 NONAME == XCnbrep70000a5
property_node_datasize @171 NONAME == XCnbrep70000aa
property_node_read @172 NONAME == XCnbrep70000ab
property_query_size @160 NONAME == XCnbrep700009f
property_node_refer @176 NONAME
property_read_query_memsize @177 NONAME
property_psmap_import @179 NONAME
+17
View File
@@ -6,7 +6,16 @@ EXPORTS
avs_thread_exit @11 NONAME
avs_thread_join @12 NONAME
avs_fs_addfs @73 NONAME
avs_fs_close @86 NONAME == XCgsqzn0000055
avs_fs_copy @102 NONAME == XCgsqzn0000065
avs_fs_lseek @80 NONAME == XCgsqzn000004f
avs_fs_lstat @100 NONAME == XCgsqzn0000063
avs_fs_mount @76 NONAME
avs_fs_open @79 NONAME == XCgsqzn000004e
avs_fs_read @82 NONAME == XCgsqzn0000051
avs_fs_opendir @93 NONAME == XCgsqzn000005c
avs_fs_readdir @94 NONAME == XCgsqzn000005d
avs_fs_closedir @95 NONAME == XCgsqzn000005e
avs_net_ctrl @119 NONAME
property_create @145 NONAME
property_destroy @146 NONAME
@@ -14,7 +23,15 @@ EXPORTS
property_insert_read @149 NONAME
property_search @162 NONAME
property_node_create @163 NONAME
property_node_name @168 NONAME == XCgsqzn00000a7
property_node_remove @164 NONAME
property_node_type @169 NONAME == XCgsqzn00000a8
property_node_clone @165 NONAME
property_node_traversal @167 NONAME
property_node_refdata @166 NONAME == XCgsqzn00000a5
property_node_datasize @171 NONAME == XCgsqzn00000aa
property_node_read @172 NONAME == XCgsqzn00000ab
property_query_size @160 NONAME == XCgsqzn000009f
property_node_refer @176 NONAME
property_read_query_memsize @177 NONAME
property_psmap_import @179 NONAME
+1 -1
View File
@@ -511,7 +511,7 @@ static void ac_io_emu_icca_cipher_set_key(
resp.cmd.raw[0] = (reader_key >> 24) & 0xFF;
resp.cmd.raw[1] = (reader_key >> 16) & 0xFF;
resp.cmd.raw[2] = (reader_key >> 8) & 0xFF;
resp.cmd.raw[3] = (reader_key) &0xFF;
resp.cmd.raw[3] = (reader_key) & 0xFF;
// so I looked these constants up, this isn't actually a secure key
// generator it's actually Marsaglia's "KISS" algorithm with different
+64 -66
View File
@@ -29,81 +29,79 @@ bool aciotest_bi2a_iidx_handler_update(
return false;
}
printf(
"|---------------------------------------|\n"
"| R Y G B Neons B G Y R |\n"
"| %d %d %d %d %d %d %d %d %d |\n"
"|---------------------------------------|\n"
"| NOW PLAYING: %c%c%c%c%c%c%c%c%c |\n"
"|---------------------------------------|\n"
"| Effect %d S1 S2 S3 S4 S5 Test %d|\n"
"|StartP1 %d %02d %02d %02d %02d %02d StartP2 %d|\n"
"| VEFX %d Service %d|\n"
"_________________________________________\n"
"| __ __ |\n"
"| / \\ _ / \\ |\n"
"| | %03d| %d %d %d |%d| %d %d %d | %03d| |\n"
"| \\___/ %d %d %d %d |_| %d %d %d %d \\___/ |\n"
"| |\n"
"|---------------------------------------|\n"
"|---------------------------------------|\n",
"|---------------------------------------|\n"
"| R Y G B Neons B G Y R |\n"
"| %d %d %d %d %d %d %d %d %d |\n"
"|---------------------------------------|\n"
"| NOW PLAYING: %c%c%c%c%c%c%c%c%c |\n"
"|---------------------------------------|\n"
"| Effect %d S1 S2 S3 S4 S5 Test %d|\n"
"|StartP1 %d %02d %02d %02d %02d %02d StartP2 %d|\n"
"| VEFX %d Service %d|\n"
"_________________________________________\n"
"| __ __ |\n"
"| / \\ _ / \\ |\n"
"| | %03d| %d %d %d |%d| %d %d %d | %03d| |\n"
"| \\___/ %d %d %d %d |_| %d %d %d %d \\___/ |\n"
"| |\n"
"|---------------------------------------|\n"
"|---------------------------------------|\n",
pout.SPOTLIGHT2[0].l_state,
pout.SPOTLIGHT2[1].l_state,
pout.SPOTLIGHT2[2].l_state,
pout.SPOTLIGHT2[3].l_state,
pout.NEONLAMP.l_state,
pout.SPOTLIGHT1[0].l_state,
pout.SPOTLIGHT1[1].l_state,
pout.SPOTLIGHT1[2].l_state,
pout.SPOTLIGHT1[3].l_state,
pout.SPOTLIGHT2[0].l_state,
pout.SPOTLIGHT2[1].l_state,
pout.SPOTLIGHT2[2].l_state,
pout.SPOTLIGHT2[3].l_state,
pout.NEONLAMP.l_state,
pout.SPOTLIGHT1[0].l_state,
pout.SPOTLIGHT1[1].l_state,
pout.SPOTLIGHT1[2].l_state,
pout.SPOTLIGHT1[3].l_state,
pout.SEG16[0],
pout.SEG16[1],
pout.SEG16[2],
pout.SEG16[3],
pout.SEG16[4],
pout.SEG16[5],
pout.SEG16[6],
pout.SEG16[7],
pout.SEG16[8],
pout.SEG16[0],
pout.SEG16[1],
pout.SEG16[2],
pout.SEG16[3],
pout.SEG16[4],
pout.SEG16[5],
pout.SEG16[6],
pout.SEG16[7],
pout.SEG16[8],
pin.PANEL.y_effect,
pin.SYSTEM.v_test,
pin.PANEL.y_effect,
pin.SYSTEM.v_test,
pin.PANEL.y_start1,
pin.SLIDER1.s_val,
pin.SLIDER2.s_val,
pin.SLIDER3.s_val,
pin.SLIDER4.s_val,
pin.SLIDER5.s_val,
pin.PANEL.y_start2,
pin.PANEL.y_start1,
pin.SLIDER1.s_val,
pin.SLIDER2.s_val,
pin.SLIDER3.s_val,
pin.SLIDER4.s_val,
pin.SLIDER5.s_val,
pin.PANEL.y_start2,
pin.PANEL.y_vefx,
pin.SYSTEM.v_service,
pin.PANEL.y_vefx,
pin.SYSTEM.v_service,
pin.TURNTABLE1,
pin.P1SW2.b_val,
pin.P1SW4.b_val,
pin.P1SW6.b_val,
pin.SYSTEM.v_coin,
pin.P2SW2.b_val,
pin.P2SW4.b_val,
pin.P2SW6.b_val,
pin.TURNTABLE2,
pin.TURNTABLE1,
pin.P1SW2.b_val,
pin.P1SW4.b_val,
pin.P1SW6.b_val,
pin.SYSTEM.v_coin,
pin.P2SW2.b_val,
pin.P2SW4.b_val,
pin.P2SW6.b_val,
pin.TURNTABLE2,
pin.P1SW1.b_val,
pin.P1SW3.b_val,
pin.P1SW5.b_val,
pin.P1SW7.b_val,
pin.P2SW1.b_val,
pin.P2SW3.b_val,
pin.P2SW5.b_val,
pin.P2SW7.b_val
pin.P1SW1.b_val,
pin.P1SW3.b_val,
pin.P1SW5.b_val,
pin.P1SW7.b_val,
pin.P2SW1.b_val,
pin.P2SW3.b_val,
pin.P2SW5.b_val,
pin.P2SW7.b_val
);
);
return true;
}
+16 -18
View File
@@ -1,14 +1,14 @@
#include <stdbool.h>
#include <stdint.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include "aciodrv/device.h"
#include "aciotest/bi2a-sdvx.h"
#include "aciotest/bi2a-iidx.h"
#include "aciotest/bi2a-sdvx.h"
#include "aciotest/handler.h"
#include "aciotest/icca.h"
#include "aciotest/kfca.h"
@@ -58,25 +58,23 @@ static bool aciotest_assign_handler(
if (bi2a_mode == 255) {
printf(
"Unknown BI2A mode specified, please check your command.\n"
"Using bi2a-sdvx mode as default, press ENTER to continue\n"
);
"Using bi2a-sdvx mode as default, press ENTER to continue\n");
bi2a_mode = 0;
getchar();
}
switch (bi2a_mode)
{
case 0:
handler->init = aciotest_bi2a_sdvx_handler_init;
handler->update = aciotest_bi2a_sdvx_handler_update;
break;
case 1:
handler->init = aciotest_bi2a_iidx_handler_init;
handler->update = aciotest_bi2a_iidx_handler_update;
break;
switch (bi2a_mode) {
case 0:
handler->init = aciotest_bi2a_sdvx_handler_init;
handler->update = aciotest_bi2a_sdvx_handler_update;
break;
case 1:
handler->init = aciotest_bi2a_iidx_handler_init;
handler->update = aciotest_bi2a_iidx_handler_update;
break;
default:
break;
default:
break;
}
return true;
}
@@ -107,9 +105,9 @@ int main(int argc, char **argv)
}
if (argc == 4) {
if(!strcmp(argv[3],"bi2a-iidx")) {
if (!strcmp(argv[3], "bi2a-iidx")) {
bi2a_mode = 1;
} else if(!strcmp(argv[3],"bi2a-sdvx")) {
} else if (!strcmp(argv[3], "bi2a-sdvx")) {
bi2a_mode = 0;
}
}
+6
View File
@@ -0,0 +1,6 @@
libs += avs-util
libs_avs-util := \
src_avs-util := \
error.c \
+99
View File
@@ -0,0 +1,99 @@
#include "avs-util/error.h"
#include "util/defs.h"
struct avs_util_avs_error_str {
avs_error error;
const char *msg;
};
static const char *avs_util_error_unknown = "unknown error";
// Source: https://github.com/spicetools/spicetools
static const struct avs_util_avs_error_str AVS_UTIL_ERRORS[] = {
{0x80092000, "invalid type"},
{0x80092001, "type cannot use as array"},
{0x80092002, "invalid"},
{0x80092003, "too large data size"},
{0x80092004, "too small buffer size"},
{0x80092005, "passcode 0 is not allowed"},
{0x80092040, "invalid node name"},
{0x80092041, "invalid attribute name"},
{0x80092042, "reserved attribute name"},
{0x80092043, "cannot find node/attribute"},
{0x80092080, "cannot allocate node"},
{0x80092081, "cannot allocate node value"},
{0x80092082, "cannot allocate mdigest for finger-print"},
{0x80092083, "cannot allocate nodename"},
{0x800920C0, "node type differs"},
{0x800920C1, "node type is VOID"},
{0x800920C2, "node is array"},
{0x800920C3, "node is not array"},
{0x80092100, "node is create-disabled"},
{0x80092101, "node is read-disabled"},
{0x80092102, "node is write-disabled"},
{0x80092103, "flag is already locked"},
{0x80092104, "passcode differs"},
{0x80092105, "insert_read() is applied to attribute"},
{0x80092106, "part_write() is applied to attribute"},
{0x80092107, "MODE_EXTEND flag differs"},
{0x80092140, "root node already exists"},
{0x80092141, "attribute cannot have children"},
{0x80092142, "node/attribute already exists"},
{0x80092143, "number of nodes exceeds 65535"},
{0x80092144, "cannot interpret as number"},
{0x80092145, "property is empty"},
{0x80092180, "I/O error"},
{0x80092181, "unexpected EOF"},
{0x80092182, "unknown format"},
{0x800921C0, "broken magic"},
{0x800921C1, "broken metadata"},
{0x800921C2, "broken databody"},
{0x800921C3, "invalid type"},
{0x800921C4, "too large data size"},
{0x800921C5, "too long node/attribute name"},
{0x800921C6, "attribute name is too long"},
{0x800921C7, "node/attribute already exists"},
{0x80092200, "invalid encoding"},
{0x80092201, "invalid XML token"},
{0x80092202, "XML syntax error"},
{0x80092203, "start tag / end tag mismatch"},
{0x80092204, "too large node data (__size mismatch)"},
{0x80092205, "too deep node tree"},
{0x80092206, "invalid type"},
{0x80092207, "invalid size"},
{0x80092208, "invalid count"},
{0x80092209, "invalid value"},
{0x8009220A, "invalid node name"},
{0x8009220B, "invalid attribute name"},
{0x8009220C, "reserved attribute name"},
{0x8009220D, "node/attribute already exists"},
{0x8009220E, "too many elements in node data"},
{0x80092240, "JSON syntax error"},
{0x80092241, "invalid JSON literal"},
{0x80092242, "invalid JSON number"},
{0x80092243, "invalid JSON string"},
{0x80092244, "invalid JSON object name"},
{0x80092245, "object name already exists"},
{0x80092246, "too long JSON object name"},
{0x80092247, "too deep JSON object/array nesting"},
{0x80092248, "cannot convert JSON array to property"},
{0x80092249, "cannot convert empty JSON object to property"},
{0x8009224A, "root node already exists"},
{0x8009224B, "cannot convert root node to TYPE_ARRAY"},
{0x8009224C, "name represents reserved attribute"},
{0x80092280, "finger-print differs"},
{0x800922C0, "operation is not supported"}};
const char *avs_util_error_str(avs_error error)
{
int i;
for (i = 0; i < lengthof(AVS_UTIL_ERRORS); i++) {
if (error == AVS_UTIL_ERRORS[i].error) {
return AVS_UTIL_ERRORS[i].msg;
}
}
return avs_util_error_unknown;
}
+8
View File
@@ -0,0 +1,8 @@
#ifndef AVS_UTIL_ERROR_H
#define AVS_UTIL_ERROR_H
#include "imports/avs.h"
const char *avs_util_error_str(avs_error error);
#endif
+38 -45
View File
@@ -28,7 +28,8 @@ typedef uint32_t (*ddr_io_read_pad_t)(void);
typedef void (*ddr_io_set_lights_extio_t)(uint32_t extio_lights);
typedef void (*ddr_io_set_lights_p3io_t)(uint32_t p3io_lights);
typedef void (*ddr_io_set_lights_hdxs_panel_t)(uint32_t hdxs_lights);
typedef void (*ddr_io_set_lights_hdxs_rgb_t)(uint8_t idx, uint8_t r, uint8_t g, uint8_t b);
typedef void (*ddr_io_set_lights_hdxs_rgb_t)(
uint8_t idx, uint8_t r, uint8_t g, uint8_t b);
typedef void (*ddr_io_fini_t)(void);
static HMODULE _child_ddr_io_module;
@@ -66,10 +67,7 @@ static int _io_thread_proc(void *ctx)
uint32_t local_tmp;
atomic_store_explicit(
&_io_thread_proc_running,
true,
memory_order_seq_cst);
atomic_store_explicit(&_io_thread_proc_running, true, memory_order_seq_cst);
log_info("IO thread running");
@@ -85,18 +83,16 @@ static int _io_thread_proc(void *ctx)
local_tmp = _child_ddr_io_read_pad();
atomic_store_explicit(
&_child_ddr_io_data_pad,
local_tmp,
memory_order_relaxed);
&_child_ddr_io_data_pad, local_tmp, memory_order_relaxed);
// Only update outputs when they change gives this loop a major performance boost
// The write calls on a p3io for the outputs are very expensive (~12 ms) as they
// are executed over the ACIO protocol compared to only the input read
// calls (~4 ms) which have a dedicated IOCTL call/endpoint
// Only update outputs when they change gives this loop a major
// performance boost The write calls on a p3io for the outputs are very
// expensive (~12 ms) as they are executed over the ACIO protocol
// compared to only the input read calls (~4 ms) which have a dedicated
// IOCTL call/endpoint
local_tmp = atomic_load_explicit(
&_child_ddr_io_data_extio_lights,
memory_order_relaxed);
&_child_ddr_io_data_extio_lights, memory_order_relaxed);
if (local_tmp != prev_child_ddr_io_data_extio_lights) {
_child_ddr_io_set_lights_extio(local_tmp);
@@ -104,9 +100,8 @@ static int _io_thread_proc(void *ctx)
}
local_tmp = atomic_load_explicit(
&_child_ddr_io_data_p3io_lights,
memory_order_relaxed);
&_child_ddr_io_data_p3io_lights, memory_order_relaxed);
if (local_tmp != prev_child_ddr_io_data_p3io_lights) {
_child_ddr_io_set_lights_p3io(local_tmp);
prev_child_ddr_io_data_p3io_lights = local_tmp;
@@ -121,22 +116,23 @@ static int _io_thread_proc(void *ctx)
time_end = time_get_counter();
total_time = time_get_elapsed_us(time_end - time_start);
log_info("IO thread performance: total iterations %lld, avg. loop cycle time %f us",
loop_counter, ((double) total_time) / loop_counter);
log_info(
"IO thread performance: total iterations %lld, avg. loop cycle time %f "
"us",
loop_counter,
((double) total_time) / loop_counter);
atomic_store_explicit(
&_io_thread_proc_running,
false,
memory_order_seq_cst);
&_io_thread_proc_running, false, memory_order_seq_cst);
log_info("IO thread shut down");
return 0;
}
static void* _load_function(HMODULE module, const char* name)
static void *_load_function(HMODULE module, const char *name)
{
void* ptr;
void *ptr;
ptr = GetProcAddress(module, name);
@@ -175,13 +171,19 @@ bool ddr_io_init(
return false;
}
_child_ddr_io_set_loggers = _load_function(_child_ddr_io_module, "ddr_io_set_loggers");
_child_ddr_io_set_loggers =
_load_function(_child_ddr_io_module, "ddr_io_set_loggers");
_child_ddr_io_init = _load_function(_child_ddr_io_module, "ddr_io_init");
_child_ddr_io_read_pad = _load_function(_child_ddr_io_module, "ddr_io_read_pad");
_child_ddr_io_set_lights_extio = _load_function(_child_ddr_io_module, "ddr_io_set_lights_extio");
_child_ddr_io_set_lights_p3io = _load_function(_child_ddr_io_module, "ddr_io_set_lights_p3io");
_child_ddr_io_set_lights_hdxs_panel = _load_function(_child_ddr_io_module, "ddr_io_set_lights_hdxs_panel");
_child_ddr_io_set_lights_hdxs_rgb = _load_function(_child_ddr_io_module, "ddr_io_set_lights_hdxs_rgb");
_child_ddr_io_read_pad =
_load_function(_child_ddr_io_module, "ddr_io_read_pad");
_child_ddr_io_set_lights_extio =
_load_function(_child_ddr_io_module, "ddr_io_set_lights_extio");
_child_ddr_io_set_lights_p3io =
_load_function(_child_ddr_io_module, "ddr_io_set_lights_p3io");
_child_ddr_io_set_lights_hdxs_panel =
_load_function(_child_ddr_io_module, "ddr_io_set_lights_hdxs_panel");
_child_ddr_io_set_lights_hdxs_rgb =
_load_function(_child_ddr_io_module, "ddr_io_set_lights_hdxs_rgb");
_child_ddr_io_fini = _load_function(_child_ddr_io_module, "ddr_io_fini");
_child_ddr_io_set_loggers(
@@ -199,10 +201,7 @@ bool ddr_io_init(
return false;
}
atomic_store_explicit(
&_io_thread_proc_loop,
true,
memory_order_seq_cst);
atomic_store_explicit(&_io_thread_proc_loop, true, memory_order_seq_cst);
if (!thread_create(_io_thread_proc, NULL, 16384, 0)) {
log_warning("Creating IO thread failed");
@@ -224,17 +223,13 @@ uint32_t ddr_io_read_pad(void)
void ddr_io_set_lights_extio(uint32_t extio_lights)
{
atomic_store_explicit(
&_child_ddr_io_data_extio_lights,
extio_lights,
memory_order_relaxed);
&_child_ddr_io_data_extio_lights, extio_lights, memory_order_relaxed);
}
void ddr_io_set_lights_p3io(uint32_t p3io_lights)
{
atomic_store_explicit(
&_child_ddr_io_data_p3io_lights,
p3io_lights,
memory_order_relaxed);
&_child_ddr_io_data_p3io_lights, p3io_lights, memory_order_relaxed);
}
void ddr_io_set_lights_hdxs_panel(uint32_t lights)
@@ -249,14 +244,12 @@ void ddr_io_set_lights_hdxs_rgb(uint8_t idx, uint8_t r, uint8_t g, uint8_t b)
void ddr_io_fini(void)
{
atomic_store_explicit(
&_io_thread_proc_loop,
false,
memory_order_seq_cst);
atomic_store_explicit(&_io_thread_proc_loop, false, memory_order_seq_cst);
log_info("Shutting down IO thread and waiting for it to finish...");
while (atomic_load_explicit(&_io_thread_proc_running, memory_order_seq_cst)) {
while (
atomic_load_explicit(&_io_thread_proc_running, memory_order_seq_cst)) {
Sleep(1);
}
+4 -3
View File
@@ -50,8 +50,9 @@ arrays_fail:
caps_fail:
/**
* Still allow the device to be used as input.
* Useful for devices like the Sony DUALSHOCK 4, where it indicates it can receive outputs
* but it errors out when trying to initialize an output report.
* Useful for devices like the Sony DUALSHOCK 4, where it indicates it can
* receive outputs but it errors out when trying to initialize an output
* report.
*/
return true;
}
@@ -213,7 +214,7 @@ r_init_fail:
meta->nreports = 0;
free(meta->reports);
meta->reports = NULL;
meta->nlights = 0;
meta->nbuttons = 0;
// Failed out before allocating memory
+13 -9
View File
@@ -48,8 +48,8 @@ static void p3io_cmd_get_cab_type_or_dipsw(
static void p3io_cmd_get_video_freq(
const struct p3io_req_get_video_freq *req,
struct p3io_resp_get_video_freq *resp);
static void
p3io_cmd_unknown_2b(const struct p3io_req_unknown_2b *req, struct p3io_resp_unknown_2b *resp);
static void p3io_cmd_unknown_2b(
const struct p3io_req_unknown_2b *req, struct p3io_resp_unknown_2b *resp);
static void
p3io_cmd_init(const struct p3io_req_init *req, struct p3io_resp_init *resp);
static void p3io_cmd_get_coinstock(
@@ -57,8 +57,9 @@ static void p3io_cmd_get_coinstock(
static void p3io_cmd_set_coin_counter(
const struct p3io_req_set_coin_counter *req,
struct p3io_resp_set_coin_counter *resp);
static void
p3io_cmd_unknown(const struct p3io_req_unknown_generic *req, struct p3io_resp_unknown_generic *resp);
static void p3io_cmd_unknown(
const struct p3io_req_unknown_generic *req,
struct p3io_resp_unknown_generic *resp);
void p3io_emu_init(const struct p3io_ops *ops, void *ctx)
{
@@ -518,8 +519,8 @@ static void p3io_cmd_get_video_freq(
}
}
static void
p3io_cmd_unknown_2b(const struct p3io_req_unknown_2b *req, struct p3io_resp_unknown_2b *resp)
static void p3io_cmd_unknown_2b(
const struct p3io_req_unknown_2b *req, struct p3io_resp_unknown_2b *resp)
{
log_misc("Unknown 2b");
@@ -573,10 +574,13 @@ static void p3io_cmd_set_coin_counter(
resp->status = 0;
}
static void
p3io_cmd_unknown(const struct p3io_req_unknown_generic *req, struct p3io_resp_unknown_generic *resp)
static void p3io_cmd_unknown(
const struct p3io_req_unknown_generic *req,
struct p3io_resp_unknown_generic *resp)
{
log_warning("Unsupported P3IO command, sending default response (might not work/crash though): %02x",
log_warning(
"Unsupported P3IO command, sending default response (might not "
"work/crash though): %02x",
req->hdr.cmd);
p3io_resp_hdr_init(&resp->hdr, sizeof(*resp), &req->hdr);
+49 -1
View File
@@ -1,7 +1,55 @@
#include <windows.h>
#define LOG_MODULE "util-proc"
#include <windows.h>
#include <winnt.h>
#include <stdbool.h>
#include <stdint.h>
#include "util/log.h"
bool proc_is_running_as_admin_user()
{
SID_IDENTIFIER_AUTHORITY authority = SECURITY_NT_AUTHORITY;
PSID sid;
BOOL res;
BOOL is_admin;
res = AllocateAndInitializeSid(
&authority,
2,
SECURITY_BUILTIN_DOMAIN_RID,
DOMAIN_ALIAS_RID_ADMINS,
0,
0,
0,
0,
0,
0,
&sid);
if (!res) {
log_warning(
"Failed to allocate memory for is admin check: %lX",
GetLastError());
return false;
}
is_admin = false;
res = CheckTokenMembership(NULL, sid, &is_admin);
if (!res) {
log_warning(
"Failed to check admin group membership: %lX", GetLastError());
return false;
}
FreeSid(sid);
return is_admin;
}
void proc_terminate_current_process(uint32_t exit_code)
{
HANDLE hnd;
+3
View File
@@ -1,5 +1,8 @@
#pragma once
#include <stdbool.h>
#include <stdint.h>
bool proc_is_running_as_admin_user();
void proc_terminate_current_process(uint32_t exit_code);