diff --git a/Module.mk b/Module.mk index 4178a424..00290d5f 100644 --- a/Module.mk +++ b/Module.mk @@ -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 \ @@ -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 \ @@ -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 \ diff --git a/README.md b/README.md index 5a089e16..6827f954 100644 --- a/README.md +++ b/README.md @@ -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) diff --git a/doc/ddrhook/ddrhook2.md b/doc/ddrhook/ddrhook2.md index 111909a5..c739be15 100644 --- a/doc/ddrhook/ddrhook2.md +++ b/doc/ddrhook/ddrhook2.md @@ -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. diff --git a/src/imports/avs.h b/src/imports/avs.h index ff48a33e..a2d439ec 100644 --- a/src/imports/avs.h +++ b/src/imports/avs.h @@ -4,6 +4,7 @@ #include #include #include +#include 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(); diff --git a/src/imports/import_32_0_avs.def b/src/imports/import_32_0_avs.def index cb2ea9d1..273e5be8 100644 --- a/src/imports/import_32_0_avs.def +++ b/src/imports/import_32_0_avs.def @@ -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 diff --git a/src/imports/import_32_1002_avs.def b/src/imports/import_32_1002_avs.def index 6d1fd136..e2ff5ae5 100644 --- a/src/imports/import_32_1002_avs.def +++ b/src/imports/import_32_1002_avs.def @@ -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 diff --git a/src/imports/import_32_1101_avs.def b/src/imports/import_32_1101_avs.def index cfc6f9b5..10c59e4f 100644 --- a/src/imports/import_32_1101_avs.def +++ b/src/imports/import_32_1101_avs.def @@ -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 diff --git a/src/imports/import_32_1304_avs.def b/src/imports/import_32_1304_avs.def index 489944a7..f83d5a5f 100644 --- a/src/imports/import_32_1304_avs.def +++ b/src/imports/import_32_1304_avs.def @@ -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 diff --git a/src/imports/import_32_1306_avs-ea3.def b/src/imports/import_32_1306_avs-ea3.def new file mode 100644 index 00000000..2606209e --- /dev/null +++ b/src/imports/import_32_1306_avs-ea3.def @@ -0,0 +1,5 @@ +LIBRARY libavs-win32-ea3 + +EXPORTS + ea3_boot @94 NONAME + ea3_shutdown @97 NONAME diff --git a/src/imports/import_32_1306_avs.def b/src/imports/import_32_1306_avs.def new file mode 100644 index 00000000..f963ec88 --- /dev/null +++ b/src/imports/import_32_1306_avs.def @@ -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 diff --git a/src/imports/import_32_1403_avs.def b/src/imports/import_32_1403_avs.def index 32d68b11..de171c12 100644 --- a/src/imports/import_32_1403_avs.def +++ b/src/imports/import_32_1403_avs.def @@ -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 diff --git a/src/imports/import_32_1508_avs.def b/src/imports/import_32_1508_avs.def index 05419ed7..d1625126 100644 --- a/src/imports/import_32_1508_avs.def +++ b/src/imports/import_32_1508_avs.def @@ -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 diff --git a/src/imports/import_32_1601_avs.def b/src/imports/import_32_1601_avs.def index e260a8c6..74332d48 100644 --- a/src/imports/import_32_1601_avs.def +++ b/src/imports/import_32_1601_avs.def @@ -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 diff --git a/src/imports/import_32_1603_avs.def b/src/imports/import_32_1603_avs.def index 98f5fe7a..21f55c1e 100644 --- a/src/imports/import_32_1603_avs.def +++ b/src/imports/import_32_1603_avs.def @@ -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 diff --git a/src/imports/import_32_1700_avs.def b/src/imports/import_32_1700_avs.def index d8944d9b..7dc4eaa8 100644 --- a/src/imports/import_32_1700_avs.def +++ b/src/imports/import_32_1700_avs.def @@ -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 diff --git a/src/imports/import_32_803_avs.def b/src/imports/import_32_803_avs.def index a7f59b51..37f2b3e6 100644 --- a/src/imports/import_32_803_avs.def +++ b/src/imports/import_32_803_avs.def @@ -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 diff --git a/src/imports/import_64_1508_avs.def b/src/imports/import_64_1508_avs.def index bc9fbf06..6aeaba1d 100644 --- a/src/imports/import_64_1508_avs.def +++ b/src/imports/import_64_1508_avs.def @@ -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 diff --git a/src/imports/import_64_1509_avs.def b/src/imports/import_64_1509_avs.def index ae6110a2..fde35d65 100644 --- a/src/imports/import_64_1509_avs.def +++ b/src/imports/import_64_1509_avs.def @@ -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 diff --git a/src/imports/import_64_1601_avs.def b/src/imports/import_64_1601_avs.def index 5bbe4528..418395f7 100644 --- a/src/imports/import_64_1601_avs.def +++ b/src/imports/import_64_1601_avs.def @@ -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 diff --git a/src/imports/import_64_1603_avs.def b/src/imports/import_64_1603_avs.def index 0355922f..b106ab1b 100644 --- a/src/imports/import_64_1603_avs.def +++ b/src/imports/import_64_1603_avs.def @@ -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 diff --git a/src/imports/import_64_1700_avs.def b/src/imports/import_64_1700_avs.def index fe8cc6e6..8cddba8a 100644 --- a/src/imports/import_64_1700_avs.def +++ b/src/imports/import_64_1700_avs.def @@ -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 diff --git a/src/main/acioemu/icca.c b/src/main/acioemu/icca.c index 134b14fc..e7713e52 100644 --- a/src/main/acioemu/icca.c +++ b/src/main/acioemu/icca.c @@ -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 diff --git a/src/main/aciotest/bi2a-iidx.c b/src/main/aciotest/bi2a-iidx.c index bd391cf8..01315675 100644 --- a/src/main/aciotest/bi2a-iidx.c +++ b/src/main/aciotest/bi2a-iidx.c @@ -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", - - 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], - - 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_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.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 - - ); + "|---------------------------------------|\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.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_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.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 + + ); return true; } diff --git a/src/main/aciotest/main.c b/src/main/aciotest/main.c index a0da1391..4a301c41 100644 --- a/src/main/aciotest/main.c +++ b/src/main/aciotest/main.c @@ -1,14 +1,14 @@ #include #include -#include #include +#include #include #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; - - default: - 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; } 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; } } diff --git a/src/main/avs-util/Module.mk b/src/main/avs-util/Module.mk new file mode 100644 index 00000000..8db06918 --- /dev/null +++ b/src/main/avs-util/Module.mk @@ -0,0 +1,6 @@ +libs += avs-util + +libs_avs-util := \ + +src_avs-util := \ + error.c \ diff --git a/src/main/avs-util/error.c b/src/main/avs-util/error.c new file mode 100644 index 00000000..ab09c014 --- /dev/null +++ b/src/main/avs-util/error.c @@ -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; +} \ No newline at end of file diff --git a/src/main/avs-util/error.h b/src/main/avs-util/error.h new file mode 100644 index 00000000..35988515 --- /dev/null +++ b/src/main/avs-util/error.h @@ -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 \ No newline at end of file diff --git a/src/main/ddrio-async/ddrio.c b/src/main/ddrio-async/ddrio.c index 9b857fd6..fe81f68e 100644 --- a/src/main/ddrio-async/ddrio.c +++ b/src/main/ddrio-async/ddrio.c @@ -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); } diff --git a/src/main/geninput/hid-meta-out.c b/src/main/geninput/hid-meta-out.c index 94402835..4f87602a 100644 --- a/src/main/geninput/hid-meta-out.c +++ b/src/main/geninput/hid-meta-out.c @@ -50,8 +50,9 @@ bool hid_meta_out_init( 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 @@ static bool hid_meta_out_init_arrays(struct hid_meta_out *meta) meta->nreports = 0; free(meta->reports); meta->reports = NULL; - + meta->nlights = 0; meta->nbuttons = 0; // Failed out before allocating memory diff --git a/src/main/p3ioemu/emu.c b/src/main/p3ioemu/emu.c index dbf2c8a5..6486d595 100644 --- a/src/main/p3ioemu/emu.c +++ b/src/main/p3ioemu/emu.c @@ -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); diff --git a/src/main/util/proc.c b/src/main/util/proc.c index 19cec50d..84731133 100644 --- a/src/main/util/proc.c +++ b/src/main/util/proc.c @@ -1,7 +1,55 @@ +#define LOG_MODULE "util-proc" + #include +#include +#include #include +#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; diff --git a/src/main/util/proc.h b/src/main/util/proc.h index 3dc69062..be47a40d 100644 --- a/src/main/util/proc.h +++ b/src/main/util/proc.h @@ -1,5 +1,8 @@ #pragma once +#include #include +bool proc_is_running_as_admin_user(); + void proc_terminate_current_process(uint32_t exit_code); \ No newline at end of file