in ScpControl/Usb/Ds3/UsbDs3.cs [73:139]
public override bool Open(string devicePath)
{
if (base.Open(devicePath))
{
State = DsState.Reserved;
GetDeviceInstance(ref m_Instance);
var transfered = 0;
if (SendTransfer(UsbHidRequestType.DeviceToHost, UsbHidRequest.GetReport, 0x03F5, m_Buffer,
ref transfered))
{
HostAddress =
new PhysicalAddress(new[]
{m_Buffer[2], m_Buffer[3], m_Buffer[4], m_Buffer[5], m_Buffer[6], m_Buffer[7]});
}
else
{
Log.ErrorFormat("Couldn't request Bluetooth host address for device {0}, error: {1}", devicePath,
new Win32Exception(Marshal.GetLastWin32Error()));
State = DsState.Disconnected;
return false;
}
if (SendTransfer(UsbHidRequestType.DeviceToHost, UsbHidRequest.GetReport, 0x03F2, m_Buffer,
ref transfered))
{
DeviceAddress =
new PhysicalAddress(new[]
{m_Buffer[4], m_Buffer[5], m_Buffer[6], m_Buffer[7], m_Buffer[8], m_Buffer[9]});
}
else
{
Log.ErrorFormat("Couldn't request Bluetooth device address for device {0}, error: {1}", devicePath,
new Win32Exception(Marshal.GetLastWin32Error()));
State = DsState.Disconnected;
return false;
}
Log.InfoFormat("Successfully opened device with MAC address {0}", DeviceAddress.AsFriendlyName());
if (!IniConfig.Instance.Hci.GenuineMacAddresses.Any(m => DeviceAddress.AsFriendlyName().StartsWith(m)))
{
Log.WarnFormat("Fake DualShock 3 detected [{0}]", DeviceAddress.AsFriendlyName());
var bthCompany = IniConfig.Instance.BthChipManufacturers.FirstOrDefault(
m =>
DeviceAddress.AsFriendlyName().StartsWith(m.PartialMacAddress.ToUpper()));
if (bthCompany != null && bthCompany.Name.Equals("AirohaTechnologyCorp"))
{
Log.WarnFormat("Controller uses Bluetooth chip by Airoha Technology Corp., suppressing workaround");
IsFake = false;
}
else
{
IsFake = true;
}
}
else
{
Log.Info("Genuine Sony DualShock 3 detected");
}
}
return State == DsState.Reserved;
}