How to add support for Macbook Pro (USB) keyboard?

Christoph Langguth christoph at rosenkeller.org
Sat Jun 20 09:37:41 UTC 2009


Hans Petter Selasky schrieb:
> Hi Christoph!
> 
> Rui Paulo has an additional patch for ukbd.c. Can you look at it and verify?
> 
> --HPS
> 
> <cite>
> 
> Here's how it worked:
> http://wiki.freebsd.org/AppleMacbook#head-7eab3730c3bf3d04bdfb0d1d3649eaddf2fed595
> 
> If there's any problem with the userland approach, I would like to know.
> If there isn't, please consider removing the kenrel support for the  
> eject key.
> 
> </cite>
> 

Hi all!

I've poked around a bit on my freshly reinstalled system. To make things 
short, usbhidctl does not yield anything for the keyboard. I guess the 
reason is quite simple:

# kldload uhid
uhid0: <Apple Computer, Inc. IR Receiver, class 0/0, rev 2.00/0.16, addr 
2> on usbus5
uhid1: <Touchpad> on usbus5

So the keyboard isn't even recognized by uhid. See the attached file for 
some usbconfig device dumps, I can't make a lot of sense of it, but 
maybe someone can.

What would one need to do to still make usbhidaction (as an example) 
work with this device, so that the "additional keys" like the eject 
button and brightness/volume control etc. (mapped onto Fn + the F1-F12 
keys) would be reported?

Thanks!

--Chris
-------------- next part --------------
[root@ /usr/src/sys/dev/usb/input]# usbconfig -u 5 -a 2 dump_curr_config_desc
ugen5.2: <IR Receiver Apple Computer, Inc.> at usbus5, cfg=0 md=HOST spd=LOW (1.5Mbps) pwr=ON


 Configuration index 0

    bLength = 0x0009
    bDescriptorType = 0x0002
    wTotalLength = 0x0022
    bNumInterfaces = 0x0001
    bConfigurationValue = 0x0001
    iConfiguration = 0x0001  <Apple Computer, Inc.>
    bmAttributes = 0x00a0
    bMaxPower = 0x0032

    Interface 0
      bLength = 0x0009
      bDescriptorType = 0x0004
      bInterfaceNumber = 0x0000
      bAlternateSetting = 0x0000
      bNumEndpoints = 0x0001
      bInterfaceClass = 0x0003
      bInterfaceSubClass = 0x0000
      bInterfaceProtocol = 0x0000
      iInterface = 0x0000  <no string>

      Additional Descriptor

      bLength = 0x09
      bDescriptorType = 0x21
      bDescriptorSubType = 0x11
       RAW dump:
       0x00 | 0x09, 0x21, 0x11, 0x01, 0x00, 0x01, 0x22, 0x2a,
       0x08 | 0x00

     Endpoint 0
        bLength = 0x0007
        bDescriptorType = 0x0005
        bEndpointAddress = 0x0082
        bmAttributes = 0x0003
        wMaxPacketSize = 0x0008
        bInterval = 0x000a
        bRefresh = 0x0000
        bSynchAddress = 0x0000

[root@ /usr/src/sys/dev/usb/input]# usbconfig -u 5 -a 3 dump_curr_config_desc
ugen5.3: <Apple Internal Keyboard / Track Apple, Inc.> at usbus5, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON


 Configuration index 0

    bLength = 0x0009
    bDescriptorType = 0x0002
    wTotalLength = 0x0054
    bNumInterfaces = 0x0003
    bConfigurationValue = 0x0001
    iConfiguration = 0x0000  <no string>
    bmAttributes = 0x00a0
    bMaxPower = 0x0014

    Interface 0
      bLength = 0x0009
      bDescriptorType = 0x0004
      bInterfaceNumber = 0x0000
      bAlternateSetting = 0x0000
      bNumEndpoints = 0x0001
      bInterfaceClass = 0x0003
      bInterfaceSubClass = 0x0001
      bInterfaceProtocol = 0x0001
      iInterface = 0x0003  <Apple Internal Keyboard>

      Additional Descriptor

      bLength = 0x09
      bDescriptorType = 0x21
      bDescriptorSubType = 0x11
       RAW dump:
       0x00 | 0x09, 0x21, 0x11, 0x01, 0x0d, 0x01, 0x22, 0x9c,
       0x08 | 0x00

     Endpoint 0
        bLength = 0x0007
        bDescriptorType = 0x0005
        bEndpointAddress = 0x0083
        bmAttributes = 0x0003
        wMaxPacketSize = 0x000a
        bInterval = 0x0008
        bRefresh = 0x0000
        bSynchAddress = 0x0000


    Interface 1
      bLength = 0x0009
      bDescriptorType = 0x0004
      bInterfaceNumber = 0x0001
      bAlternateSetting = 0x0000
      bNumEndpoints = 0x0001
      bInterfaceClass = 0x0003
      bInterfaceSubClass = 0x0000
      bInterfaceProtocol = 0x0000
      iInterface = 0x0004  <Touchpad>

      Additional Descriptor

      bLength = 0x09
      bDescriptorType = 0x21
      bDescriptorSubType = 0x11
       RAW dump:
       0x00 | 0x09, 0x21, 0x11, 0x01, 0x00, 0x01, 0x22, 0x1b,
       0x08 | 0x00

     Endpoint 0
        bLength = 0x0007
        bDescriptorType = 0x0005
        bEndpointAddress = 0x0081
        bmAttributes = 0x0003
        wMaxPacketSize = 0x0040
        bInterval = 0x0002
        bRefresh = 0x0000
        bSynchAddress = 0x0000


    Interface 2
      bLength = 0x0009
      bDescriptorType = 0x0004
      bInterfaceNumber = 0x0002
      bAlternateSetting = 0x0000
      bNumEndpoints = 0x0001
      bInterfaceClass = 0x0003
      bInterfaceSubClass = 0x0001
      bInterfaceProtocol = 0x0002
      iInterface = 0x0004  <Touchpad>

      Additional Descriptor

      bLength = 0x09
      bDescriptorType = 0x21
      bDescriptorSubType = 0x11
       RAW dump:
       0x00 | 0x09, 0x21, 0x11, 0x01, 0x00, 0x01, 0x22, 0x34,
       0x08 | 0x00

     Endpoint 0
        bLength = 0x0007
        bDescriptorType = 0x0005
        bEndpointAddress = 0x0084
        bmAttributes = 0x0003
        wMaxPacketSize = 0x0008
        bInterval = 0x0008
        bRefresh = 0x0000
        bSynchAddress = 0x0000


More information about the freebsd-usb mailing list