Add QR customfolder support
This commit is contained in:
parent
92c3e6aa81
commit
db6a0c061b
9
dist/config.toml
vendored
9
dist/config.toml
vendored
@ -1,7 +1,12 @@
|
||||
[amauth]
|
||||
server = "127.0.0.1"
|
||||
|
||||
[patches]
|
||||
res = { x = 1920, y = 1080 }
|
||||
unlock_songs = true
|
||||
shared_audio = true
|
||||
vsync = false
|
||||
qr_card_string = ""
|
||||
qr_data_string = ""
|
||||
|
||||
[qr]
|
||||
card = ""
|
||||
data = { serial = "", type = 0, song_no = [] }
|
4
dist/keyconfig.toml
vendored
4
dist/keyconfig.toml
vendored
@ -7,9 +7,9 @@ DEBUG_DOWN = ["DOWNARROW"]
|
||||
DEBUG_ENTER = ["ENTER"]
|
||||
|
||||
COIN_ADD = ["ENTER", "SDL_START"]
|
||||
CARD_INSERT_1 = ["P"]
|
||||
CARD_INSERT_1 = []
|
||||
CARD_INSERT_2 = []
|
||||
QR_CARD_READ = ["O"]
|
||||
QR_CARD_READ = []
|
||||
QR_DATA_READ = ["Q"]
|
||||
|
||||
P1_LEFT_BLUE = ["D", "SDL_LTRIGGER"]
|
||||
|
@ -114,7 +114,10 @@ DllMain (HMODULE module, DWORD reason, LPVOID reserved) {
|
||||
auto configPath = std::filesystem::current_path () / "config.toml";
|
||||
toml_table_t *config = openConfig (configPath);
|
||||
if (config) {
|
||||
server = readConfigString (config, "server", server);
|
||||
auto amauth = openConfigSection(config, "amauth");
|
||||
if (amauth) {
|
||||
server = readConfigString(amauth, "server", server);
|
||||
}
|
||||
toml_free (config);
|
||||
}
|
||||
|
||||
|
@ -71,6 +71,21 @@ readConfigString (toml_table_t *table, const char *key, const char *notFoundValu
|
||||
return data.u.s;
|
||||
}
|
||||
|
||||
std::vector<int64_t>
|
||||
readConfigIntArray (toml_table_t *table, const char *key, std::vector<int64_t> notFoundValue) {
|
||||
toml_array_t *array = toml_array_in (table, key);
|
||||
if (!array) return notFoundValue;
|
||||
|
||||
std::vector<int64_t> datas;
|
||||
for (int i = 0; ; i++) {
|
||||
toml_datum_t data = toml_int_at (array, i);
|
||||
if (!data.ok) break;
|
||||
datas.push_back (data.u.i);
|
||||
}
|
||||
|
||||
return datas;
|
||||
}
|
||||
|
||||
void
|
||||
printColour (int colour, const char *format, ...) {
|
||||
va_list args;
|
||||
|
@ -119,4 +119,5 @@ toml_table_t *openConfigSection (toml_table_t *config, const char *sectionName);
|
||||
bool readConfigBool (toml_table_t *table, const char *key, bool notFoundValue);
|
||||
int64_t readConfigInt (toml_table_t *table, const char *key, int64_t notFoundValue);
|
||||
const char *readConfigString (toml_table_t *table, const char *key, const char *notFoundValue);
|
||||
std::vector<int64_t> readConfigIntArray (toml_table_t *table, const char *key, std::vector<int64_t> notFoundValue);
|
||||
void printColour (int colour, const char *format, ...);
|
||||
|
@ -9,9 +9,9 @@ Keybindings DEBUG_UP = {.keycodes = {VK_UP}};
|
||||
Keybindings DEBUG_DOWN = {.keycodes = {VK_DOWN}};
|
||||
Keybindings DEBUG_ENTER = {.keycodes = {VK_RETURN}};
|
||||
Keybindings COIN_ADD = {.keycodes = {VK_RETURN}, .buttons = {SDL_CONTROLLER_BUTTON_START}};
|
||||
Keybindings CARD_INSERT_1 = {.keycodes = {'P'}};
|
||||
Keybindings CARD_INSERT_1 = {};
|
||||
Keybindings CARD_INSERT_2 = {};
|
||||
Keybindings QR_CARD_READ = {.keycodes = {'O'}};
|
||||
Keybindings QR_CARD_READ = {};
|
||||
Keybindings QR_DATA_READ = {.keycodes = {'Q'}};
|
||||
Keybindings P1_LEFT_BLUE = {.keycodes = {'D'}, .axis = {SDL_AXIS_LTRIGGER_DOWN}};
|
||||
Keybindings P1_LEFT_RED = {.keycodes = {'F'}, .buttons = {SDL_CONTROLLER_BUTTON_LEFTSTICK}};
|
||||
|
@ -13,7 +13,7 @@ DWORD reg = 0;
|
||||
#undef DEFINE_GUID
|
||||
#endif
|
||||
|
||||
#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) const GUID name = { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }
|
||||
#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) const GUID name = {l, w1, w2, {b1, b2, b3, b4, b5, b6, b7, b8}}
|
||||
DEFINE_GUID (IID_CAuthFactory, 0x4603BB03, 0x058D, 0x43D9, 0xB9, 0x6F, 0x63, 0x9B, 0xE9, 0x08, 0xC1, 0xED);
|
||||
DEFINE_GUID (IID_CAuth, 0x045A5150, 0xD2B3, 0x4590, 0xA3, 0x8B, 0xC1, 0x15, 0x86, 0x78, 0xE1, 0xAC);
|
||||
|
||||
|
@ -48,14 +48,17 @@ Init () {
|
||||
auto configPath = std::filesystem::current_path () / "config.toml";
|
||||
toml_table_t *config = openConfig (configPath);
|
||||
if (config) {
|
||||
auto res = openConfigSection (config, "res");
|
||||
if (res) {
|
||||
xRes = readConfigInt (res, "x", xRes);
|
||||
yRes = readConfigInt (res, "y", yRes);
|
||||
auto patches = openConfigSection(config, "patches");
|
||||
if (patches) {
|
||||
auto res = openConfigSection (patches, "res");
|
||||
if (res) {
|
||||
xRes = readConfigInt (res, "x", xRes);
|
||||
yRes = readConfigInt (res, "y", yRes);
|
||||
}
|
||||
unlockSongs = readConfigBool (patches, "unlock_songs", unlockSongs);
|
||||
sharedAudio = readConfigBool (patches, "shared_audio", sharedAudio);
|
||||
vsync = readConfigBool (patches, "vsync", vsync);
|
||||
}
|
||||
unlockSongs = readConfigBool (config, "unlock_songs", unlockSongs);
|
||||
sharedAudio = readConfigBool (config, "shared_audio", sharedAudio);
|
||||
vsync = readConfigBool (config, "vsync", vsync);
|
||||
toml_free (config);
|
||||
}
|
||||
|
||||
|
@ -22,14 +22,17 @@ Init () {
|
||||
auto configPath = std::filesystem::current_path () / "config.toml";
|
||||
toml_table_t *config = openConfig (configPath);
|
||||
if (config) {
|
||||
auto res = openConfigSection (config, "res");
|
||||
if (res) {
|
||||
xRes = readConfigInt (res, "x", xRes);
|
||||
yRes = readConfigInt (res, "y", yRes);
|
||||
auto patches = openConfigSection(config, "patches");
|
||||
if (patches) {
|
||||
auto res = openConfigSection (patches, "res");
|
||||
if (res) {
|
||||
xRes = readConfigInt (res, "x", xRes);
|
||||
yRes = readConfigInt (res, "y", yRes);
|
||||
}
|
||||
unlockSongs = readConfigBool (patches, "unlock_songs", unlockSongs);
|
||||
sharedAudio = readConfigBool (patches, "shared_audio", sharedAudio);
|
||||
vsync = readConfigBool (patches, "vsync", vsync);
|
||||
}
|
||||
unlockSongs = readConfigBool (config, "unlock_songs", unlockSongs);
|
||||
sharedAudio = readConfigBool (config, "shared_audio", sharedAudio);
|
||||
vsync = readConfigBool (config, "vsync", vsync);
|
||||
toml_free (config);
|
||||
}
|
||||
|
||||
|
@ -65,31 +65,64 @@ HOOK_DYNAMIC (bool, __fastcall, Send4, int64_t a1) {
|
||||
HOOK_DYNAMIC (int64_t, __fastcall, copy_data, int64_t this_, void *dest, int length) {
|
||||
if (gState == State::CopyWait) {
|
||||
std::cout << "Copy data, length: " << length << std::endl;
|
||||
|
||||
auto configPath = std::filesystem::current_path () / "config.toml";
|
||||
toml_table_t *config = openConfig (configPath);
|
||||
std::string data = "";
|
||||
|
||||
|
||||
if (gMode == Mode::Card) {
|
||||
std::string card = "";
|
||||
if (config) {
|
||||
data = readConfigString (config, "qr_card_string", "");
|
||||
toml_free (config);
|
||||
auto qr = openConfigSection(config, "qr");
|
||||
if (qr) {
|
||||
card = readConfigString(qr, "card", "");
|
||||
}
|
||||
toml_free(config);
|
||||
}
|
||||
|
||||
memcpy (dest, data.c_str (), data.size () + 1);
|
||||
memcpy (dest, card.c_str (), card.size () + 1);
|
||||
gState = State::AfterCopy1;
|
||||
return data.size () + 1;
|
||||
} else if (gMode == Mode::Data) {
|
||||
return card.size () + 1;
|
||||
} else {
|
||||
std::string serial = "";
|
||||
u16 type = 0;
|
||||
std::vector<i64> songNoes;
|
||||
|
||||
if (config) {
|
||||
data = readConfigString (config, "qr_data_string", "");
|
||||
toml_free (config);
|
||||
auto qr = openConfigSection (config, "qr");
|
||||
if (qr) {
|
||||
auto data = openConfigSection (qr, "data");
|
||||
if (data) {
|
||||
serial = readConfigString (data, "serial", "");
|
||||
type = readConfigInt (data, "type", 0);
|
||||
songNoes = readConfigIntArray (data, "song_no", songNoes);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
BYTE data_length = static_cast<BYTE> (data.size ());
|
||||
std::vector<BYTE> byteBuffer = {0x53, 0x31, 0x32, 0x00, 0x00, 0xFF, 0xFF, data_length, 0x01, 0x00};
|
||||
BYTE serial_length = static_cast<BYTE> (serial.size ());
|
||||
std::vector<BYTE> byteBuffer = {0x53, 0x31, 0x32, 0x00, 0x00, 0xFF, 0xFF, serial_length, 0x01, 0x00};
|
||||
|
||||
for (char c : data)
|
||||
for (char c : serial)
|
||||
byteBuffer.push_back (static_cast<BYTE> (c));
|
||||
|
||||
if (type == 5) {
|
||||
std::vector<BYTE> folderData = {0xFF, 0xFF};
|
||||
|
||||
folderData.push_back (songNoes.size() * 2);
|
||||
|
||||
folderData.push_back (static_cast<u8> (type & 0xFF));
|
||||
folderData.push_back (static_cast<u8> ((type >> 8) & 0xFF));
|
||||
|
||||
for (u16 songNo:songNoes) {
|
||||
folderData.push_back (static_cast<u8> (songNo & 0xFF));
|
||||
folderData.push_back (static_cast<u8> ((songNo >> 8) & 0xFF));
|
||||
}
|
||||
|
||||
for (auto c:folderData) {
|
||||
byteBuffer.push_back (c);
|
||||
}
|
||||
}
|
||||
|
||||
byteBuffer.push_back (0xEE);
|
||||
byteBuffer.push_back (0xFF);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user