in ScpControl/Bluetooth/Ds3/BthDs3.cs [40:91]
public override void ParseHidReport(byte[] report)
{
if (report[10] == 0xFF) return;
m_PlugStatus = report[38];
Battery = (DsBattery) report[39];
m_CableStatus = report[40];
if (m_Packet == 0) Rumble(0, 0);
m_Packet++;
var inputReport = NewHidReport();
inputReport.PacketCounter = m_Packet;
// copy controller data to report packet
Buffer.BlockCopy(report, 9, inputReport.RawBytes, 8, 49);
var trigger = false;
// Quick Disconnect
if (inputReport[Ds3Button.L1].IsPressed
&& inputReport[Ds3Button.R1].IsPressed
&& inputReport[Ds3Button.Ps].IsPressed)
{
trigger = true;
// unset PS button
inputReport.Unset(Ds3Button.Ps);
}
if (inputReport.IsPadActive)
{
m_IsIdle = false;
}
else if (!m_IsIdle)
{
m_IsIdle = true;
m_Idle = DateTime.Now;
}
if (trigger && !m_IsDisconnect)
{
m_IsDisconnect = true;
m_Disconnect = DateTime.Now;
}
else if (!trigger && m_IsDisconnect)
{
m_IsDisconnect = false;
}
OnHidReportReceived(inputReport);
}