diff options
Diffstat (limited to 'src/input_common/drivers')
| -rw-r--r-- | src/input_common/drivers/joycon.cpp | 29 | ||||
| -rw-r--r-- | src/input_common/drivers/joycon.h | 5 |
2 files changed, 25 insertions, 9 deletions
diff --git a/src/input_common/drivers/joycon.cpp b/src/input_common/drivers/joycon.cpp index cf54f1b53..6c03e0953 100644 --- a/src/input_common/drivers/joycon.cpp +++ b/src/input_common/drivers/joycon.cpp | |||
| @@ -191,6 +191,10 @@ void Joycons::RegisterNewDevice(SDL_hid_device_info* device_info) { | |||
| 191 | .on_amiibo_data = {[this, port](const std::vector<u8>& amiibo_data) { | 191 | .on_amiibo_data = {[this, port](const std::vector<u8>& amiibo_data) { |
| 192 | OnAmiiboUpdate(port, amiibo_data); | 192 | OnAmiiboUpdate(port, amiibo_data); |
| 193 | }}, | 193 | }}, |
| 194 | .on_camera_data = {[this, port](const std::vector<u8>& camera_data, | ||
| 195 | Joycon::IrsResolution format) { | ||
| 196 | OnCameraUpdate(port, camera_data, format); | ||
| 197 | }}, | ||
| 194 | }; | 198 | }; |
| 195 | 199 | ||
| 196 | handle->InitializeDevice(); | 200 | handle->InitializeDevice(); |
| @@ -265,9 +269,14 @@ Common::Input::DriverResult Joycons::SetLeds(const PadIdentifier& identifier, | |||
| 265 | handle->SetLedConfig(static_cast<u8>(led_config))); | 269 | handle->SetLedConfig(static_cast<u8>(led_config))); |
| 266 | } | 270 | } |
| 267 | 271 | ||
| 268 | Common::Input::DriverResult Joycons::SetCameraFormat(const PadIdentifier& identifier_, | 272 | Common::Input::DriverResult Joycons::SetCameraFormat(const PadIdentifier& identifier, |
| 269 | Common::Input::CameraFormat camera_format) { | 273 | Common::Input::CameraFormat camera_format) { |
| 270 | return Common::Input::DriverResult::NotSupported; | 274 | auto handle = GetHandle(identifier); |
| 275 | if (handle == nullptr) { | ||
| 276 | return Common::Input::DriverResult::InvalidHandle; | ||
| 277 | } | ||
| 278 | return static_cast<Common::Input::DriverResult>(handle->SetIrsConfig( | ||
| 279 | Joycon::IrsMode::ImageTransfer, static_cast<Joycon::IrsResolution>(camera_format))); | ||
| 271 | }; | 280 | }; |
| 272 | 281 | ||
| 273 | Common::Input::NfcState Joycons::SupportsNfc(const PadIdentifier& identifier_) const { | 282 | Common::Input::NfcState Joycons::SupportsNfc(const PadIdentifier& identifier_) const { |
| @@ -288,18 +297,16 @@ Common::Input::DriverResult Joycons::SetPollingMode(const PadIdentifier& identif | |||
| 288 | } | 297 | } |
| 289 | 298 | ||
| 290 | switch (polling_mode) { | 299 | switch (polling_mode) { |
| 291 | case Common::Input::PollingMode::NFC: | ||
| 292 | return static_cast<Common::Input::DriverResult>(handle->SetNfcMode()); | ||
| 293 | break; | ||
| 294 | case Common::Input::PollingMode::Active: | 300 | case Common::Input::PollingMode::Active: |
| 295 | return static_cast<Common::Input::DriverResult>(handle->SetActiveMode()); | 301 | return static_cast<Common::Input::DriverResult>(handle->SetActiveMode()); |
| 296 | break; | ||
| 297 | case Common::Input::PollingMode::Pasive: | 302 | case Common::Input::PollingMode::Pasive: |
| 298 | return static_cast<Common::Input::DriverResult>(handle->SetPasiveMode()); | 303 | return static_cast<Common::Input::DriverResult>(handle->SetPasiveMode()); |
| 299 | break; | 304 | case Common::Input::PollingMode::IR: |
| 305 | return static_cast<Common::Input::DriverResult>(handle->SetIrMode()); | ||
| 306 | case Common::Input::PollingMode::NFC: | ||
| 307 | return static_cast<Common::Input::DriverResult>(handle->SetNfcMode()); | ||
| 300 | case Common::Input::PollingMode::Ring: | 308 | case Common::Input::PollingMode::Ring: |
| 301 | return static_cast<Common::Input::DriverResult>(handle->SetRingConMode()); | 309 | return static_cast<Common::Input::DriverResult>(handle->SetRingConMode()); |
| 302 | break; | ||
| 303 | default: | 310 | default: |
| 304 | return Common::Input::DriverResult::NotSupported; | 311 | return Common::Input::DriverResult::NotSupported; |
| 305 | } | 312 | } |
| @@ -390,6 +397,12 @@ void Joycons::OnAmiiboUpdate(std::size_t port, const std::vector<u8>& amiibo_dat | |||
| 390 | SetNfc(identifier, {nfc_state, amiibo_data}); | 397 | SetNfc(identifier, {nfc_state, amiibo_data}); |
| 391 | } | 398 | } |
| 392 | 399 | ||
| 400 | void Joycons::OnCameraUpdate(std::size_t port, const std::vector<u8>& camera_data, | ||
| 401 | Joycon::IrsResolution format) { | ||
| 402 | const auto identifier = GetIdentifier(port, Joycon::ControllerType::Right); | ||
| 403 | SetCamera(identifier, {static_cast<Common::Input::CameraFormat>(format), camera_data}); | ||
| 404 | } | ||
| 405 | |||
| 393 | std::shared_ptr<Joycon::JoyconDriver> Joycons::GetHandle(PadIdentifier identifier) const { | 406 | std::shared_ptr<Joycon::JoyconDriver> Joycons::GetHandle(PadIdentifier identifier) const { |
| 394 | auto is_handle_active = [&](std::shared_ptr<Joycon::JoyconDriver> device) { | 407 | auto is_handle_active = [&](std::shared_ptr<Joycon::JoyconDriver> device) { |
| 395 | if (!device) { | 408 | if (!device) { |
diff --git a/src/input_common/drivers/joycon.h b/src/input_common/drivers/joycon.h index 1a04c19fd..f180b7478 100644 --- a/src/input_common/drivers/joycon.h +++ b/src/input_common/drivers/joycon.h | |||
| @@ -17,6 +17,7 @@ struct Color; | |||
| 17 | struct MotionData; | 17 | struct MotionData; |
| 18 | enum class ControllerType; | 18 | enum class ControllerType; |
| 19 | enum class DriverResult; | 19 | enum class DriverResult; |
| 20 | enum class IrsResolution; | ||
| 20 | class JoyconDriver; | 21 | class JoyconDriver; |
| 21 | } // namespace InputCommon::Joycon | 22 | } // namespace InputCommon::Joycon |
| 22 | 23 | ||
| @@ -35,7 +36,7 @@ public: | |||
| 35 | Common::Input::DriverResult SetLeds(const PadIdentifier& identifier, | 36 | Common::Input::DriverResult SetLeds(const PadIdentifier& identifier, |
| 36 | const Common::Input::LedStatus& led_status) override; | 37 | const Common::Input::LedStatus& led_status) override; |
| 37 | 38 | ||
| 38 | Common::Input::DriverResult SetCameraFormat(const PadIdentifier& identifier_, | 39 | Common::Input::DriverResult SetCameraFormat(const PadIdentifier& identifier, |
| 39 | Common::Input::CameraFormat camera_format) override; | 40 | Common::Input::CameraFormat camera_format) override; |
| 40 | 41 | ||
| 41 | Common::Input::NfcState SupportsNfc(const PadIdentifier& identifier_) const override; | 42 | Common::Input::NfcState SupportsNfc(const PadIdentifier& identifier_) const override; |
| @@ -81,6 +82,8 @@ private: | |||
| 81 | const Joycon::MotionData& value); | 82 | const Joycon::MotionData& value); |
| 82 | void OnRingConUpdate(f32 ring_data); | 83 | void OnRingConUpdate(f32 ring_data); |
| 83 | void OnAmiiboUpdate(std::size_t port, const std::vector<u8>& amiibo_data); | 84 | void OnAmiiboUpdate(std::size_t port, const std::vector<u8>& amiibo_data); |
| 85 | void OnCameraUpdate(std::size_t port, const std::vector<u8>& camera_data, | ||
| 86 | Joycon::IrsResolution format); | ||
| 84 | 87 | ||
| 85 | /// Returns a JoyconHandle corresponding to a PadIdentifier | 88 | /// Returns a JoyconHandle corresponding to a PadIdentifier |
| 86 | std::shared_ptr<Joycon::JoyconDriver> GetHandle(PadIdentifier identifier) const; | 89 | std::shared_ptr<Joycon::JoyconDriver> GetHandle(PadIdentifier identifier) const; |