void HandleDPad(MessageDPad data)
    {
        int axisOffset = data.pad * 2;

        int[]   buttonIndices = axisButtonMap[data.pad];
        DirInfo dirInfo       = Direction.GetDirectionInfo(data.dir);

        UpdateButton(buttonIndices[0], (dirInfo.bits & 0x2) != 0);
        UpdateButton(buttonIndices[1], (dirInfo.bits & 0x1) != 0);
        UpdateButton(buttonIndices[2], (dirInfo.bits & 0x4) != 0);
        UpdateButton(buttonIndices[3], (dirInfo.bits & 0x8) != 0);

        axes[axisOffset + 0] = dirInfo.dx;
        axes[axisOffset + 1] = -dirInfo.dy;
    }
    void HandleDPad(MessageDPad data)
    {
        int axisOffset = data.pad * 2;
        int[] buttonIndices = axisButtonMap[data.pad];
        DirInfo dirInfo = Direction.GetDirectionInfo(data.dir);
        UpdateButton(buttonIndices[0], (dirInfo.bits & 0x2) != 0);
        UpdateButton(buttonIndices[1], (dirInfo.bits & 0x1) != 0);
        UpdateButton(buttonIndices[2], (dirInfo.bits & 0x4) != 0);
        UpdateButton(buttonIndices[3], (dirInfo.bits & 0x8) != 0);

        axes[axisOffset + 0] =  dirInfo.dx;
        axes[axisOffset + 1] = -dirInfo.dy;
    }