|
|
@ -72,6 +72,7 @@ DriverResult JoyconDriver::InitializeDevice() {
|
|
|
|
nfc_enabled = false;
|
|
|
|
nfc_enabled = false;
|
|
|
|
passive_enabled = false;
|
|
|
|
passive_enabled = false;
|
|
|
|
irs_enabled = false;
|
|
|
|
irs_enabled = false;
|
|
|
|
|
|
|
|
input_only_device = false;
|
|
|
|
gyro_sensitivity = Joycon::GyroSensitivity::DPS2000;
|
|
|
|
gyro_sensitivity = Joycon::GyroSensitivity::DPS2000;
|
|
|
|
gyro_performance = Joycon::GyroPerformance::HZ833;
|
|
|
|
gyro_performance = Joycon::GyroPerformance::HZ833;
|
|
|
|
accelerometer_sensitivity = Joycon::AccelerometerSensitivity::G8;
|
|
|
|
accelerometer_sensitivity = Joycon::AccelerometerSensitivity::G8;
|
|
|
@ -86,7 +87,12 @@ DriverResult JoyconDriver::InitializeDevice() {
|
|
|
|
rumble_protocol = std::make_unique<RumbleProtocol>(hidapi_handle);
|
|
|
|
rumble_protocol = std::make_unique<RumbleProtocol>(hidapi_handle);
|
|
|
|
|
|
|
|
|
|
|
|
// Get fixed joycon info
|
|
|
|
// Get fixed joycon info
|
|
|
|
generic_protocol->GetVersionNumber(version);
|
|
|
|
if (generic_protocol->GetVersionNumber(version) != DriverResult::Success) {
|
|
|
|
|
|
|
|
// If this command fails the device doesn't accept configuration commands
|
|
|
|
|
|
|
|
input_only_device = true;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!input_only_device) {
|
|
|
|
generic_protocol->SetLowPowerMode(false);
|
|
|
|
generic_protocol->SetLowPowerMode(false);
|
|
|
|
generic_protocol->GetColor(color);
|
|
|
|
generic_protocol->GetColor(color);
|
|
|
|
if (handle_device_type == ControllerType::Pro) {
|
|
|
|
if (handle_device_type == ControllerType::Pro) {
|
|
|
@ -96,6 +102,8 @@ DriverResult JoyconDriver::InitializeDevice() {
|
|
|
|
device_type = handle_device_type;
|
|
|
|
device_type = handle_device_type;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
generic_protocol->GetSerialNumber(serial_number);
|
|
|
|
generic_protocol->GetSerialNumber(serial_number);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
supported_features = GetSupportedFeatures();
|
|
|
|
supported_features = GetSupportedFeatures();
|
|
|
|
|
|
|
|
|
|
|
|
// Get Calibration data
|
|
|
|
// Get Calibration data
|
|
|
@ -261,6 +269,10 @@ DriverResult JoyconDriver::SetPollingMode() {
|
|
|
|
generic_protocol->EnableImu(false);
|
|
|
|
generic_protocol->EnableImu(false);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (input_only_device) {
|
|
|
|
|
|
|
|
return DriverResult::NotSupported;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (irs_protocol->IsEnabled()) {
|
|
|
|
if (irs_protocol->IsEnabled()) {
|
|
|
|
irs_protocol->DisableIrs();
|
|
|
|
irs_protocol->DisableIrs();
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -282,6 +294,7 @@ DriverResult JoyconDriver::SetPollingMode() {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
irs_protocol->DisableIrs();
|
|
|
|
irs_protocol->DisableIrs();
|
|
|
|
LOG_ERROR(Input, "Error enabling IRS");
|
|
|
|
LOG_ERROR(Input, "Error enabling IRS");
|
|
|
|
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (nfc_enabled && supported_features.nfc) {
|
|
|
|
if (nfc_enabled && supported_features.nfc) {
|
|
|
@ -291,6 +304,7 @@ DriverResult JoyconDriver::SetPollingMode() {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
nfc_protocol->DisableNfc();
|
|
|
|
nfc_protocol->DisableNfc();
|
|
|
|
LOG_ERROR(Input, "Error enabling NFC");
|
|
|
|
LOG_ERROR(Input, "Error enabling NFC");
|
|
|
|
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (hidbus_enabled && supported_features.hidbus) {
|
|
|
|
if (hidbus_enabled && supported_features.hidbus) {
|
|
|
@ -305,6 +319,7 @@ DriverResult JoyconDriver::SetPollingMode() {
|
|
|
|
ring_connected = false;
|
|
|
|
ring_connected = false;
|
|
|
|
ring_protocol->DisableRingCon();
|
|
|
|
ring_protocol->DisableRingCon();
|
|
|
|
LOG_ERROR(Input, "Error enabling Ringcon");
|
|
|
|
LOG_ERROR(Input, "Error enabling Ringcon");
|
|
|
|
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (passive_enabled && supported_features.passive) {
|
|
|
|
if (passive_enabled && supported_features.passive) {
|
|
|
@ -333,6 +348,10 @@ JoyconDriver::SupportedFeatures JoyconDriver::GetSupportedFeatures() {
|
|
|
|
.vibration = true,
|
|
|
|
.vibration = true,
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (input_only_device) {
|
|
|
|
|
|
|
|
return features;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (device_type == ControllerType::Right) {
|
|
|
|
if (device_type == ControllerType::Right) {
|
|
|
|
features.nfc = true;
|
|
|
|
features.nfc = true;
|
|
|
|
features.irs = true;
|
|
|
|
features.irs = true;
|
|
|
@ -517,6 +536,11 @@ DriverResult JoyconDriver::StopNfcPolling() {
|
|
|
|
const auto result = nfc_protocol->StopNFCPollingMode();
|
|
|
|
const auto result = nfc_protocol->StopNFCPollingMode();
|
|
|
|
disable_input_thread = false;
|
|
|
|
disable_input_thread = false;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (amiibo_detected) {
|
|
|
|
|
|
|
|
amiibo_detected = false;
|
|
|
|
|
|
|
|
joycon_poller->UpdateAmiibo({});
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return result;
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|