From 210998698122da8e2de5826c02ceb57730e2e4d2 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 26 Apr 2023 11:22:22 -0600 Subject: [PATCH] update input qt --- simple64-input-qt/configdialog.cpp | 3 ++- simple64-input-qt/main.cpp | 33 ++++++++++++++++++++++++++---- simple64-input-qt/main.h | 1 + simple64-input-qt/vruwords.h | 2 +- 4 files changed, 33 insertions(+), 6 deletions(-) diff --git a/simple64-input-qt/configdialog.cpp b/simple64-input-qt/configdialog.cpp index e361ae2..73c8047 100644 --- a/simple64-input-qt/configdialog.cpp +++ b/simple64-input-qt/configdialog.cpp @@ -85,7 +85,8 @@ ControllerTab::ControllerTab(unsigned int controller, QSettings* settings, QSett gamepadSelect->insertItem(0, "Auto"); gamepadSelect->addItem("Keyboard"); - gamepadSelect->addItem("Emulate VRU"); + if (controller == 4) + gamepadSelect->addItem("Emulate VRU"); gamepadSelect->addItem("None"); gamepadSelect->setCurrentText(controllerSettings->value("Controller" + QString::number(controller) + "/Gamepad").toString()); connect(gamepadSelect, &QComboBox::currentTextChanged, [=](QString text) { diff --git a/simple64-input-qt/main.cpp b/simple64-input-qt/main.cpp index 6065f82..20bfba6 100644 --- a/simple64-input-qt/main.cpp +++ b/simple64-input-qt/main.cpp @@ -363,7 +363,7 @@ EXPORT void CALL SendVRUWord(uint16_t length, uint16_t *word, uint8_t lang) } else { - words.append(encoded_string.toLower().toUtf8().constData()); + words.append(encoded_string.toLower()); word_indexes.append(word_list_count); } } @@ -374,6 +374,7 @@ EXPORT void CALL SendVRUWord(uint16_t length, uint16_t *word, uint8_t lang) { words.append(value_list.at(i).toString().toLower()); word_indexes.append(word_list_count); + DebugMessage(M64MSG_VERBOSE, "word loaded: %s, index: %d", words.last().toUtf8().constData(), word_indexes.last()); } } @@ -387,7 +388,7 @@ EXPORT void CALL SendVRUWord(uint16_t length, uint16_t *word, uint8_t lang) doc.setArray(array); if (recognizer) VoskFreeRecognizer(recognizer); - recognizer = VoskNewRecognizer(model, (float)hardware_spec->freq, doc.toJson()); + recognizer = VoskNewRecognizer(model, (float)hardware_spec->freq, doc.toJson().constData()); VoskSetAlternatives(recognizer, 3); } } @@ -426,6 +427,7 @@ EXPORT void CALL ClearVRUWords(uint8_t length) word_indexes.clear(); if (recognizer) VoskFreeRecognizer(recognizer); + DebugMessage(M64MSG_VERBOSE, "word list cleared"); recognizer = nullptr; } @@ -481,6 +483,7 @@ EXPORT void CALL ReadVRUResults(uint16_t *error_flags, uint16_t *num_results, ui *error_flags = 0x4000; match[0] = 0; // we match index 0, but mark the error flag saying we are really not sure found.append("0"); + DebugMessage(M64MSG_INFO, "heard a noise, but no word match"); } *num_results = found.size(); @@ -684,6 +687,27 @@ EXPORT void CALL GetKeys( int Control, BUTTONS *Keys ) if (controller[Control].control->Present == 0) return; + if (controller[Control].joystick && SDL_JoystickGetAttached(controller[Control].joystick) == SDL_FALSE) + { + for (int j = 0; j < SDL_NumJoysticks(); ++j) + { + if (controller[Control].device_path == SDL_JoystickPathForIndex(j)) + { + if (SDL_IsGameController(j)) + { + SDL_GameControllerClose(controller[Control].gamepad); + controller[Control].gamepad = SDL_GameControllerOpen(j); + controller[Control].joystick = SDL_GameControllerGetJoystick(controller[Control].gamepad); + } + else + { + SDL_JoystickClose(controller[Control].joystick); + controller[Control].joystick = SDL_JoystickOpen(j); + } + break; + } + } + } setPak(Control); if (controller[Control].control->Type == CONT_TYPE_VRU) { @@ -738,8 +762,7 @@ static int setupVosk() VoskSetLogLevel(-1); - QByteArray vruword_array(vruwords); - QJsonDocument vruwordjson = QJsonDocument::fromJson(vruword_array); + QJsonDocument vruwordjson = QJsonDocument::fromJson(vruwords.toUtf8()); vruwordsobject = vruwordjson.object(); l_TalkingState = 0; @@ -867,6 +890,8 @@ EXPORT void CALL InitiateControllers(CONTROL_INFO ControlInfo) if (controller[i].gamepad) controller[i].joystick = SDL_GameControllerGetJoystick(controller[i].gamepad); + if (controller[i].joystick) + controller[i].device_path = SDL_JoystickPath(controller[i].joystick); controller[i].profile = gameControllerSettings->value("Controller" + QString::number(i + 1) + "/Profile").toString(); if (!gameSettings->childGroups().contains(controller[i].profile)) diff --git a/simple64-input-qt/main.h b/simple64-input-qt/main.h index 0326304..89669a3 100644 --- a/simple64-input-qt/main.h +++ b/simple64-input-qt/main.h @@ -9,6 +9,7 @@ typedef struct CONTROL *control; // pointer to CONTROL struct in Core library SDL_GameController *gamepad; SDL_Joystick *joystick; + QString device_path; QString profile; int deadzone; int range; diff --git a/simple64-input-qt/vruwords.h b/simple64-input-qt/vruwords.h index 3d51a49..12bbdcf 100644 --- a/simple64-input-qt/vruwords.h +++ b/simple64-input-qt/vruwords.h @@ -2,7 +2,7 @@ #ifndef VRUWORDS_H #define VRUWORDS_H -const char * vruwords = "{\"03A50024000303CF00A80003036000EA\": [\"pikachu\"], \ +QString vruwords = "{\"03A50024000303CF00A80003036000EA\": [\"pikachu\"], \ \"03A50045000303CF00A80003036000EA\": [\"pikachu\"], \ \"03A50024000303C900450003036000EA\": [\"pikachu\"], \ \"03A8018F000303CF00A80003036000EA\": [\"pikachu\"], \