diff options
| author | 2022-12-28 15:21:12 -0600 | |
|---|---|---|
| committer | 2023-01-19 18:05:22 -0600 | |
| commit | 459fb2b21337bae60194a2a99ce68c87aaed522d (patch) | |
| tree | a7522832fa60f283e076df34c85380c5d4bc49d3 /src/input_common/drivers/joycon.cpp | |
| parent | yuzu: Add ring controller test button (diff) | |
| download | yuzu-459fb2b21337bae60194a2a99ce68c87aaed522d.tar.gz yuzu-459fb2b21337bae60194a2a99ce68c87aaed522d.tar.xz yuzu-459fb2b21337bae60194a2a99ce68c87aaed522d.zip | |
input_common: Implement joycon ir camera
Diffstat (limited to 'src/input_common/drivers/joycon.cpp')
| -rw-r--r-- | src/input_common/drivers/joycon.cpp | 29 |
1 files changed, 21 insertions, 8 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) { |