본문 바로가기
Gadget

Apple Desktop Bus Keyboard Controller - 추가

by applefan 2011. 3. 8.
원 소스제작자에게 USB 고속 디바이스로 할 경우 키가 여러번 찍히는 현상을 제보(?)하였고, 그것이 OSX에서만 나타나는 문제임을 알려줬었습니다. 또한 Interrupt handling에서 그러한 문제가 생기는 듯 한 것으로 보고를 했었는데 오늘 원 제작자가 해결책(?)을 제시 했습니다. 

Windows/OSX가 다르게 반응하는 이유는 OSX의 경우 HID SET_IDLE(24ms)를 요청하는 반명 Windows는 HID SET_IDLE(0ms)를 요청합니다. 그런데 재미있는 것은 Apple Keyboard(즉 Vendor ID가 Apple 0x05AC)인 경우는 HID SET_IDLE(0ms)를 요청한다는 것입니다. 그래서 Vendor ID를 Apple것으로 바꿀 경우 키가 여러번 찍히는 문제가 없어집니다. 그로인해 코그에 잠재적인 버그가 바로 노출이 된다는 설명입니다. (Bug fix는 나중에 릴리즈를 하겠다고 하는군요. )

다음 링크는 문제의 키보드처리 코드입니다. 

    // For Keyboards, set the idle millecs to 24 or to 0 if from Apple
    //
    if ( (_interface->GetInterfaceClass() == kUSBHIDClass) &&
         (_interface->GetInterfaceSubClass() == kUSBHIDBootInterfaceSubClass) &&
         (_interface->GetInterfaceProtocol() == kHIDKeyboardInterfaceProtocol) )
    {
        if (_device->GetVendorID() == kIOUSBVendorIDAppleComputer)
        {
            SetIdleMillisecs(0);
        }
        else
        {
            SetIdleMillisecs(24);
        }
    }


일단 VentorID를 바꿔서 아직까지는 문제가 없습니다. : )



댓글