protected override void ParseHidReport()

in ScpControl/Usb/Ds4/UsbDs4.cs [227:279]


        protected override void ParseHidReport(byte[] report)
        {
            if (report[0] != 0x01) return;

            PacketCounter++;

            var inputReport = NewHidReport();

            Battery = (DsBattery) MapBattery(report[30]);

            inputReport.PacketCounter = PacketCounter;

            var buttons = (report[5] << 0) | (report[6] << 8) | (report[7] << 16);

            #region Convert HAT to DPAD

            report[5] &= 0xF0;

            switch ((uint) buttons & 0xF)
            {
                case 0:
                    report[5] |= (byte) Ds4Button.Up.Offset;
                    break;
                case 1:
                    report[5] |= (byte) (Ds4Button.Up.Offset | Ds4Button.Right.Offset);
                    break;
                case 2:
                    report[5] |= (byte) Ds4Button.Right.Offset;
                    break;
                case 3:
                    report[5] |= (byte) (Ds4Button.Right.Offset | Ds4Button.Down.Offset);
                    break;
                case 4:
                    report[5] |= (byte) Ds4Button.Down.Offset;
                    break;
                case 5:
                    report[5] |= (byte) (Ds4Button.Down.Offset | Ds4Button.Left.Offset);
                    break;
                case 6:
                    report[5] |= (byte) Ds4Button.Left.Offset;
                    break;
                case 7:
                    report[5] |= (byte) (Ds4Button.Left.Offset | Ds4Button.Up.Offset);
                    break;
            }

            #endregion

            // copy controller data to report packet
            Buffer.BlockCopy(report, 0, inputReport.RawBytes, 8, 64);

            OnHidReportReceived(inputReport);
        }