Add Rumble to GUI

This commit is contained in:
Florian Märkl 2021-01-01 13:56:30 +01:00
commit 042e02eb3e
No known key found for this signature in database
GPG key ID: 125BC8A5A6A1E857
5 changed files with 21 additions and 9 deletions

View file

@ -73,6 +73,7 @@ class Controller : public QObject
int GetDeviceID(); int GetDeviceID();
QString GetName(); QString GetName();
ChiakiControllerState GetState(); ChiakiControllerState GetState();
void SetRumble(uint8_t left, uint8_t right);
signals: signals:
void StateChanged(); void StateChanged();

View file

@ -92,13 +92,13 @@ class StreamSession : public QObject
QMap<Qt::Key, int> key_map; QMap<Qt::Key, int> key_map;
void PushAudioFrame(int16_t *buf, size_t samples_count); void PushAudioFrame(int16_t *buf, size_t samples_count);
void Event(ChiakiEvent *event);
#if CHIAKI_GUI_ENABLE_SETSU #if CHIAKI_GUI_ENABLE_SETSU
void HandleSetsuEvent(SetsuEvent *event); void HandleSetsuEvent(SetsuEvent *event);
#endif #endif
private slots: private slots:
void InitAudio(unsigned int channels, unsigned int rate); void InitAudio(unsigned int channels, unsigned int rate);
void Event(ChiakiEvent *event);
public: public:
explicit StreamSession(const StreamSessionConnectInfo &connect_info, QObject *parent = nullptr); explicit StreamSession(const StreamSessionConnectInfo &connect_info, QObject *parent = nullptr);

View file

@ -291,3 +291,12 @@ ChiakiControllerState Controller::GetState()
#endif #endif
return state; return state;
} }
void Controller::SetRumble(uint8_t left, uint8_t right)
{
#ifdef CHIAKI_GUI_ENABLE_SDL_GAMECONTROLLER
if(!controller)
return;
SDL_GameControllerRumble(controller, (uint16_t)left << 8, (uint16_t)right << 8, 5000);
#endif
}

View file

@ -313,13 +313,11 @@ void StreamSession::SendFeedbackState()
ChiakiControllerState state; ChiakiControllerState state;
chiaki_controller_state_set_idle(&state); chiaki_controller_state_set_idle(&state);
#if CHIAKI_GUI_ENABLE_SDL_GAMECONTROLLER
for(auto controller : controllers) for(auto controller : controllers)
{ {
auto controller_state = controller->GetState(); auto controller_state = controller->GetState();
chiaki_controller_state_or(&state, &state, &controller_state); chiaki_controller_state_or(&state, &state, &controller_state);
} }
#endif
#if CHIAKI_GUI_ENABLE_SETSU #if CHIAKI_GUI_ENABLE_SETSU
chiaki_controller_state_or(&state, &state, &setsu_state); chiaki_controller_state_or(&state, &state, &setsu_state);
@ -381,11 +379,15 @@ void StreamSession::Event(ChiakiEvent *event)
case CHIAKI_EVENT_LOGIN_PIN_REQUEST: case CHIAKI_EVENT_LOGIN_PIN_REQUEST:
emit LoginPINRequested(event->login_pin_request.pin_incorrect); emit LoginPINRequested(event->login_pin_request.pin_incorrect);
break; break;
case CHIAKI_EVENT_RUMBLE: case CHIAKI_EVENT_RUMBLE: {
// TODO uint8_t left = event->rumble.left;
//CHIAKI_LOGD(GetChiakiLog(), "Rumble %#02x, %#02x, %#02x", uint8_t right = event->rumble.right;
// event->rumble.unknown, event->rumble.left, event->rumble.right); QMetaObject::invokeMethod(this, [this, left, right]() {
for(auto controller : controllers)
controller->SetRumble(left, right);
});
break; break;
}
default: default:
break; break;
} }

View file

@ -117,8 +117,8 @@ typedef struct chiaki_audio_stream_info_event_t
typedef struct chiaki_rumble_event_t typedef struct chiaki_rumble_event_t
{ {
uint8_t unknown; uint8_t unknown;
uint8_t left; uint8_t left; // low-frequency
uint8_t right; uint8_t right; // high-frequency
} ChiakiRumbleEvent; } ChiakiRumbleEvent;
typedef enum { typedef enum {