summaryrefslogtreecommitdiff
path: root/src/input_common/drivers/joycon.cpp
diff options
context:
space:
mode:
authorGravatar Narr the Reg2022-12-28 15:21:12 -0600
committerGravatar Narr the Reg2023-01-19 18:05:22 -0600
commit459fb2b21337bae60194a2a99ce68c87aaed522d (patch)
treea7522832fa60f283e076df34c85380c5d4bc49d3 /src/input_common/drivers/joycon.cpp
parentyuzu: Add ring controller test button (diff)
downloadyuzu-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.cpp29
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
268Common::Input::DriverResult Joycons::SetCameraFormat(const PadIdentifier& identifier_, 272Common::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
273Common::Input::NfcState Joycons::SupportsNfc(const PadIdentifier& identifier_) const { 282Common::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
400void 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
393std::shared_ptr<Joycon::JoyconDriver> Joycons::GetHandle(PadIdentifier identifier) const { 406std::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) {