summaryrefslogtreecommitdiff
path: root/src/input_common/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'src/input_common/drivers')
-rw-r--r--src/input_common/drivers/joycon.cpp29
-rw-r--r--src/input_common/drivers/joycon.h5
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
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) {
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;
17struct MotionData; 17struct MotionData;
18enum class ControllerType; 18enum class ControllerType;
19enum class DriverResult; 19enum class DriverResult;
20enum class IrsResolution;
20class JoyconDriver; 21class 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;