mirror of
https://git.sr.ht/~thestr4ng3r/chiaki
synced 2025-08-20 13:33:13 -07:00
Connect and read Setsu Motion Device in GUI
This commit is contained in:
parent
32e1539c22
commit
170dcd4d65
2 changed files with 66 additions and 10 deletions
|
@ -13,6 +13,7 @@
|
||||||
|
|
||||||
#if CHIAKI_GUI_ENABLE_SETSU
|
#if CHIAKI_GUI_ENABLE_SETSU
|
||||||
#include <setsu.h>
|
#include <setsu.h>
|
||||||
|
#include <chiaki/orientation.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "exception.h"
|
#include "exception.h"
|
||||||
|
@ -74,6 +75,9 @@ class StreamSession : public QObject
|
||||||
Setsu *setsu;
|
Setsu *setsu;
|
||||||
QMap<QPair<QString, SetsuTrackingId>, uint8_t> setsu_ids;
|
QMap<QPair<QString, SetsuTrackingId>, uint8_t> setsu_ids;
|
||||||
ChiakiControllerState setsu_state;
|
ChiakiControllerState setsu_state;
|
||||||
|
SetsuDevice *setsu_motion_device;
|
||||||
|
ChiakiOrientationTracker orient_tracker;
|
||||||
|
bool orient_dirty;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
ChiakiControllerState keyboard_state;
|
ChiakiControllerState keyboard_state;
|
||||||
|
|
|
@ -153,11 +153,20 @@ StreamSession::StreamSession(const StreamSessionConnectInfo &connect_info, QObje
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if CHIAKI_GUI_ENABLE_SETSU
|
#if CHIAKI_GUI_ENABLE_SETSU
|
||||||
|
setsu_motion_device = nullptr;
|
||||||
chiaki_controller_state_set_idle(&setsu_state);
|
chiaki_controller_state_set_idle(&setsu_state);
|
||||||
|
orient_dirty = false;
|
||||||
|
chiaki_orientation_tracker_init(&orient_tracker);
|
||||||
setsu = setsu_new();
|
setsu = setsu_new();
|
||||||
auto timer = new QTimer(this);
|
auto timer = new QTimer(this);
|
||||||
connect(timer, &QTimer::timeout, this, [this]{
|
connect(timer, &QTimer::timeout, this, [this]{
|
||||||
setsu_poll(setsu, SessionSetsuCb, this);
|
setsu_poll(setsu, SessionSetsuCb, this);
|
||||||
|
if(orient_dirty)
|
||||||
|
{
|
||||||
|
// TODO: put orient/gyro/acc into setsu_state
|
||||||
|
// and SendFeedbackState();
|
||||||
|
orient_dirty = false;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
timer->start(SETSU_UPDATE_INTERVAL_MS);
|
timer->start(SETSU_UPDATE_INTERVAL_MS);
|
||||||
#endif
|
#endif
|
||||||
|
@ -409,20 +418,56 @@ void StreamSession::HandleSetsuEvent(SetsuEvent *event)
|
||||||
switch(event->type)
|
switch(event->type)
|
||||||
{
|
{
|
||||||
case SETSU_EVENT_DEVICE_ADDED:
|
case SETSU_EVENT_DEVICE_ADDED:
|
||||||
setsu_connect(setsu, event->path, event->dev_type);
|
switch(event->dev_type)
|
||||||
|
{
|
||||||
|
case SETSU_DEVICE_TYPE_TOUCHPAD:
|
||||||
|
// connect all the touchpads!
|
||||||
|
if(setsu_connect(setsu, event->path, event->dev_type))
|
||||||
|
CHIAKI_LOGI(GetChiakiLog(), "Connected Setsu Touchpad Device %s", event->path);
|
||||||
|
else
|
||||||
|
CHIAKI_LOGE(GetChiakiLog(), "Failed to connect to Setsu Touchpad Device %s", event->path);
|
||||||
|
break;
|
||||||
|
case SETSU_DEVICE_TYPE_MOTION:
|
||||||
|
// connect only one motion since multiple make no sense
|
||||||
|
if(setsu_motion_device)
|
||||||
|
{
|
||||||
|
CHIAKI_LOGI(GetChiakiLog(), "Setsu Motion Device %s detected there is already one connected",
|
||||||
|
event->path);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
setsu_motion_device = setsu_connect(setsu, event->path, event->dev_type);
|
||||||
|
if(setsu_motion_device)
|
||||||
|
CHIAKI_LOGI(GetChiakiLog(), "Connected Setsu Motion Device %s", event->path);
|
||||||
|
else
|
||||||
|
CHIAKI_LOGE(GetChiakiLog(), "Failed to connect to Setsu Motion Device %s", event->path);
|
||||||
|
break;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case SETSU_EVENT_DEVICE_REMOVED:
|
case SETSU_EVENT_DEVICE_REMOVED:
|
||||||
for(auto it=setsu_ids.begin(); it!=setsu_ids.end();)
|
switch(event->dev_type)
|
||||||
{
|
{
|
||||||
if(it.key().first == event->path)
|
case SETSU_DEVICE_TYPE_TOUCHPAD:
|
||||||
{
|
CHIAKI_LOGI(GetChiakiLog(), "Setsu Touchpad Device %s disconnected", event->path);
|
||||||
chiaki_controller_state_stop_touch(&setsu_state, it.value());
|
for(auto it=setsu_ids.begin(); it!=setsu_ids.end();)
|
||||||
setsu_ids.erase(it++);
|
{
|
||||||
}
|
if(it.key().first == event->path)
|
||||||
else
|
{
|
||||||
it++;
|
chiaki_controller_state_stop_touch(&setsu_state, it.value());
|
||||||
|
setsu_ids.erase(it++);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
it++;
|
||||||
|
}
|
||||||
|
SendFeedbackState();
|
||||||
|
break;
|
||||||
|
case SETSU_DEVICE_TYPE_MOTION:
|
||||||
|
if(!setsu_motion_device || strcmp(setsu_device_get_path(setsu_motion_device), event->path))
|
||||||
|
break;
|
||||||
|
CHIAKI_LOGI(GetChiakiLog(), "Setsu Motion Device %s disconnected", event->path);
|
||||||
|
setsu_motion_device = nullptr;
|
||||||
|
SendFeedbackState();
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
SendFeedbackState();
|
|
||||||
break;
|
break;
|
||||||
case SETSU_EVENT_TOUCH_DOWN:
|
case SETSU_EVENT_TOUCH_DOWN:
|
||||||
break;
|
break;
|
||||||
|
@ -460,6 +505,13 @@ void StreamSession::HandleSetsuEvent(SetsuEvent *event)
|
||||||
case SETSU_EVENT_BUTTON_UP:
|
case SETSU_EVENT_BUTTON_UP:
|
||||||
setsu_state.buttons &= ~CHIAKI_CONTROLLER_BUTTON_TOUCHPAD;
|
setsu_state.buttons &= ~CHIAKI_CONTROLLER_BUTTON_TOUCHPAD;
|
||||||
break;
|
break;
|
||||||
|
case SETSU_EVENT_MOTION:
|
||||||
|
chiaki_orientation_tracker_update(&orient_tracker,
|
||||||
|
event->motion.gyro_x, event->motion.gyro_y, event->motion.gyro_z,
|
||||||
|
event->motion.accel_x, event->motion.accel_y, event->motion.accel_z,
|
||||||
|
event->motion.timestamp);
|
||||||
|
orient_dirty = true;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue