Re: keyboard driver problem?

2011-07-04 Thread Hans Petter Selasky
Hi,

I've committed a larger patch to UKBD to make it more HID compliant.

Please try the following patch and report back if you see any regression 
issues with your USB keyboard.

http://svn.freebsd.org/changeset/base/223755

--HPS
___
freebsd-current@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to freebsd-current-unsubscr...@freebsd.org


Re: keyboard driver problem?

2011-07-04 Thread ti bugmenot
works well
___
freebsd-current@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to freebsd-current-unsubscr...@freebsd.org


Re: keyboard driver problem?

2011-07-01 Thread Hans Petter Selasky
On Friday 01 July 2011 13:21:35 ti bugmenot wrote:
 I met with the same problem. I do not know how to solve this problem:
 
 http://lists.freebsd.org/pipermail/freebsd-current/2011-January/022022.html
 

Hi,

Our USB keyboard driver is very simple and does not parse the HID descriptors 
of the keyboard. Maybe that is the reason it is not working.


Try to set the UQ_KBD_BOOTPROTO for your keyboard.

usbconfig -d X.Y add_quirk UQ_KBD_BOOTPROTO

Replug keyboard.

--HPS
___
freebsd-current@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to freebsd-current-unsubscr...@freebsd.org


Re: keyboard driver problem?

2011-07-01 Thread Eir Nym
On 1 July 2011 16:05, Hans Petter Selasky hsela...@c2i.net wrote:
 On Friday 01 July 2011 13:21:35 ti bugmenot wrote:
 I met with the same problem. I do not know how to solve this problem:

 http://lists.freebsd.org/pipermail/freebsd-current/2011-January/022022.html


 Hi,

 Our USB keyboard driver is very simple and does not parse the HID descriptors
 of the keyboard. Maybe that is the reason it is not working.


 Try to set the UQ_KBD_BOOTPROTO for your keyboard.

 usbconfig -d X.Y add_quirk UQ_KBD_BOOTPROTO

 Replug keyboard.


I have same with MS USB keyboard (only numlock, capslock are working).
r221858 doesn't have this bug(?)

-- Eir Nym

 --HPS
 ___
 freebsd-current@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/freebsd-current
 To unsubscribe, send any mail to freebsd-current-unsubscr...@freebsd.org

___
freebsd-current@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to freebsd-current-unsubscr...@freebsd.org


Re: keyboard driver problem?

2011-07-01 Thread Hans Petter Selasky
On Friday 01 July 2011 16:14:43 Eir Nym wrote:
 On 1 July 2011 16:05, Hans Petter Selasky hsela...@c2i.net wrote:
  On Friday 01 July 2011 13:21:35 ti bugmenot wrote:
  I met with the same problem. I do not know how to solve this problem:
  
  http://lists.freebsd.org/pipermail/freebsd-current/2011-January/022022.h
  tml
  
  Hi,
  
  Our USB keyboard driver is very simple and does not parse the HID
  descriptors of the keyboard. Maybe that is the reason it is not working.
  
  
  Try to set the UQ_KBD_BOOTPROTO for your keyboard.
  
  usbconfig -d X.Y add_quirk UQ_KBD_BOOTPROTO
  
  Replug keyboard.
 
 I have same with MS USB keyboard (only numlock, capslock are working).
 r221858 doesn't have this bug(?)

What happens if you unload ums ?

Maybe there is a driver conflict?

--HPS
___
freebsd-current@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to freebsd-current-unsubscr...@freebsd.org


Re: keyboard driver problem?

2011-07-01 Thread Hans Petter Selasky
On Friday 01 July 2011 16:14:43 Eir Nym wrote:
 On 1 July 2011 16:05, Hans Petter Selasky hsela...@c2i.net wrote:
  On Friday 01 July 2011 13:21:35 ti bugmenot wrote:
  I met with the same problem. I do not know how to solve this problem:
  
  http://lists.freebsd.org/pipermail/freebsd-current/2011-January/022022.h
  tml
  
  Hi,
  
  Our USB keyboard driver is very simple and does not parse the HID
  descriptors of the keyboard. Maybe that is the reason it is not working.
  
  
  Try to set the UQ_KBD_BOOTPROTO for your keyboard.
  
  usbconfig -d X.Y add_quirk UQ_KBD_BOOTPROTO
  
  Replug keyboard.
 
 I have same with MS USB keyboard (only numlock, capslock are working).
 r221858 doesn't have this bug(?)
 

Try to dump the HID descriptor of your device:

usbconfig -d X.Y do_request 0x81 0x06 0x2200 0 0x100

That might be helpful.

--HPS
___
freebsd-current@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to freebsd-current-unsubscr...@freebsd.org


Re: keyboard driver problem?

2011-07-01 Thread Hans Petter Selasky
Hi,

Can you try the attached patch and report back?

Please also send me your HID descriptor:

usbconfig -d X.Y do_request 0x81 0x06 0x2200 0 0x100

--HPS
=== input/ukbd.c
==
--- input/ukbd.c	(revision 223581)
+++ input/ukbd.c	(local)
@@ -108,9 +108,10 @@
 #define	UKBD_IN_BUF_SIZE  (2*(UKBD_NMOD + (2*UKBD_NKEYCODE)))	/* bytes */
 #define	UKBD_IN_BUF_FULL  (UKBD_IN_BUF_SIZE / 2)	/* bytes */
 #define	UKBD_NFKEY(sizeof(fkey_tab)/sizeof(fkey_tab[0]))	/* units */
+#define	UKBD_OUT_BUF_SIZE	 16	/* bytes */
 
 struct ukbd_data {
-	uint8_t	modifiers;
+	uint16_t	modifiers;
 #define	MOD_CONTROL_L	0x01
 #define	MOD_CONTROL_R	0x10
 #define	MOD_SHIFT_L	0x02
@@ -119,9 +120,10 @@
 #define	MOD_ALT_R	0x40
 #define	MOD_WIN_L	0x08
 #define	MOD_WIN_R	0x80
-	uint8_t	reserved;
+/* internal */
+#define	MOD_EJECT	0x0100
+#define	MOD_FN		0x0200
 	uint8_t	keycode[UKBD_NKEYCODE];
-	uint8_t exten[8];
 };
 
 enum {
@@ -137,6 +139,18 @@
 	fkeytab_t sc_fkeymap[UKBD_NFKEY];
 	struct hid_location sc_loc_apple_eject;
 	struct hid_location sc_loc_apple_fn;
+	struct hid_location sc_loc_ctrl_l;
+	struct hid_location sc_loc_ctrl_r;
+	struct hid_location sc_loc_shift_l;
+	struct hid_location sc_loc_shift_r;
+	struct hid_location sc_loc_alt_l;
+	struct hid_location sc_loc_alt_r;
+	struct hid_location sc_loc_win_l;
+	struct hid_location sc_loc_win_r;
+	struct hid_location sc_loc_events;
+	struct hid_location sc_loc_numlock;
+	struct hid_location sc_loc_capslock;
+	struct hid_location sc_loc_scrolllock;
 	struct usb_callout sc_callout;
 	struct ukbd_data sc_ndata;
 	struct ukbd_data sc_odata;
@@ -155,30 +169,60 @@
 	uint32_t sc_buffered_char[2];
 #endif
 	uint32_t sc_flags;		/* flags */
-#define	UKBD_FLAG_COMPOSE	0x0001
-#define	UKBD_FLAG_POLLING	0x0002
-#define	UKBD_FLAG_SET_LEDS	0x0004
-#define	UKBD_FLAG_ATTACHED	0x0010
-#define	UKBD_FLAG_GONE		0x0020
-#define	UKBD_FLAG_APPLE_EJECT	0x0040
-#define	UKBD_FLAG_APPLE_FN	0x0080
-#define	UKBD_FLAG_APPLE_SWAP	0x0100
-#define	UKBD_FLAG_TIMER_RUNNING	0x0200
+#define	UKBD_FLAG_COMPOSE	0x0001
+#define	UKBD_FLAG_POLLING	0x0002
+#define	UKBD_FLAG_SET_LEDS	0x0004
+#define	UKBD_FLAG_ATTACHED	0x0010
+#define	UKBD_FLAG_GONE		0x0020
+#define	UKBD_FLAG_APPLE_EJECT	0x0040
+#define	UKBD_FLAG_APPLE_FN	0x0080
+#define	UKBD_FLAG_APPLE_SWAP	0x0100
+#define	UKBD_FLAG_TIMER_RUNNING	0x0200
+#define	UKBD_FLAG_CTRL_L	0x0400
+#define	UKBD_FLAG_CTRL_R	0x0800
+#define	UKBD_FLAG_SHIFT_L	0x1000
+#define	UKBD_FLAG_SHIFT_R	0x2000
+#define	UKBD_FLAG_ALT_L		0x4000
+#define	UKBD_FLAG_ALT_R		0x8000
+#define	UKBD_FLAG_WIN_L		0x0001
+#define	UKBD_FLAG_WIN_R		0x0002
+#define	UKBD_FLAG_EVENTS	0x0004
+#define	UKBD_FLAG_NUMLOCK	0x0008
+#define	UKBD_FLAG_CAPSLOCK	0x0010
+#define	UKBD_FLAG_SCROLLLOCK 	0x0020
 
 	int	sc_mode;		/* input mode (K_XLATE,K_RAW,K_CODE) */
 	int	sc_state;		/* shift/lock key state */
 	int	sc_accents;		/* accent key index ( 0) */
 	int	sc_poll_tick_last;
+	int	sc_led_size;
+	int	sc_kbd_size;
 
 	uint16_t sc_inputs;
 	uint16_t sc_inputhead;
 	uint16_t sc_inputtail;
+	uint16_t sc_modifiers;
 
 	uint8_t	sc_leds;		/* store for async led requests */
 	uint8_t	sc_iface_index;
 	uint8_t	sc_iface_no;
+	uint8_t sc_id_apple_eject;
+	uint8_t sc_id_apple_fn;
+	uint8_t sc_id_ctrl_l;
+	uint8_t sc_id_ctrl_r;
+	uint8_t sc_id_shift_l;
+	uint8_t sc_id_shift_r;
+	uint8_t sc_id_alt_l;
+	uint8_t sc_id_alt_r;
+	uint8_t sc_id_win_l;
+	uint8_t sc_id_win_r;
+	uint8_t sc_id_event;
+	uint8_t sc_id_numlock;
+	uint8_t sc_id_capslock;
+	uint8_t sc_id_scrolllock;
+	uint8_t sc_id_events;
 	uint8_t sc_kbd_id;
-	uint8_t sc_led_id;
+
 	uint8_t sc_poll_detected;
 };
 
@@ -558,11 +602,10 @@
 {
 	struct ukbd_softc *sc = usbd_xfer_softc(xfer);
 	struct usb_page_cache *pc;
+	uint8_t buffer[32];
 	uint8_t i;
 	uint8_t offset;
 	uint8_t id;
-	uint8_t apple_fn;
-	uint8_t apple_eject;
 	int len;
 
 	usbd_xfer_status(xfer, len, NULL, NULL, NULL);
@@ -586,67 +629,142 @@
 			}
 			offset = 1;
 			len--;
+			if (len == 0) {
+DPRINTF(zero length data\n);
+goto tr_setup;
+			}
 		} else {
 			offset = 0;
 		}
 
-		if (len  sizeof(sc-sc_ndata)) {
-			len = sizeof(sc-sc_ndata);
-		}
+		if (len  sizeof(buffer))
+			len = sizeof(buffer);
 
-		if (len) {
-			memset(sc-sc_ndata, 0, sizeof(sc-sc_ndata));
-			usbd_copy_out(pc, offset, sc-sc_ndata, len);
+		/* get data */
+		usbd_copy_out(pc, offset, buffer, len);
 
-			if ((sc-sc_flags  UKBD_FLAG_APPLE_EJECT) 
-			hid_get_data((uint8_t *)sc-sc_ndata,
-len, sc-sc_loc_apple_eject))
-apple_eject = 1;
-			else
-apple_eject = 0;
+		/* clear temporary storage */
+		memset(sc-sc_ndata, 0, sizeof(sc-sc_ndata));
 
-			if ((sc-sc_flags  UKBD_FLAG_APPLE_FN) 
-			hid_get_data((uint8_t *)sc-sc_ndata,
-len, sc-sc_loc_apple_fn))
-apple_fn = 1;
+		/* scan through HID data */
+		if ((sc-sc_flags  UKBD_FLAG_APPLE_EJECT) 
+		(id == 

Re: keyboard driver problem? (new patch)

2011-07-01 Thread Hans Petter Selasky
Hi,

Found some bugs in my intial patch. Try this new one.

--HPS
=== ukbd.c
==
--- ukbd.c	(revision 223581)
+++ ukbd.c	(local)
@@ -108,9 +108,10 @@
 #define	UKBD_IN_BUF_SIZE  (2*(UKBD_NMOD + (2*UKBD_NKEYCODE)))	/* bytes */
 #define	UKBD_IN_BUF_FULL  (UKBD_IN_BUF_SIZE / 2)	/* bytes */
 #define	UKBD_NFKEY(sizeof(fkey_tab)/sizeof(fkey_tab[0]))	/* units */
+#define	UKBD_OUT_BUF_SIZE	 16	/* bytes */
 
 struct ukbd_data {
-	uint8_t	modifiers;
+	uint16_t	modifiers;
 #define	MOD_CONTROL_L	0x01
 #define	MOD_CONTROL_R	0x10
 #define	MOD_SHIFT_L	0x02
@@ -119,9 +120,10 @@
 #define	MOD_ALT_R	0x40
 #define	MOD_WIN_L	0x08
 #define	MOD_WIN_R	0x80
-	uint8_t	reserved;
+/* internal */
+#define	MOD_EJECT	0x0100
+#define	MOD_FN		0x0200
 	uint8_t	keycode[UKBD_NKEYCODE];
-	uint8_t exten[8];
 };
 
 enum {
@@ -137,6 +139,18 @@
 	fkeytab_t sc_fkeymap[UKBD_NFKEY];
 	struct hid_location sc_loc_apple_eject;
 	struct hid_location sc_loc_apple_fn;
+	struct hid_location sc_loc_ctrl_l;
+	struct hid_location sc_loc_ctrl_r;
+	struct hid_location sc_loc_shift_l;
+	struct hid_location sc_loc_shift_r;
+	struct hid_location sc_loc_alt_l;
+	struct hid_location sc_loc_alt_r;
+	struct hid_location sc_loc_win_l;
+	struct hid_location sc_loc_win_r;
+	struct hid_location sc_loc_events;
+	struct hid_location sc_loc_numlock;
+	struct hid_location sc_loc_capslock;
+	struct hid_location sc_loc_scrolllock;
 	struct usb_callout sc_callout;
 	struct ukbd_data sc_ndata;
 	struct ukbd_data sc_odata;
@@ -155,30 +169,60 @@
 	uint32_t sc_buffered_char[2];
 #endif
 	uint32_t sc_flags;		/* flags */
-#define	UKBD_FLAG_COMPOSE	0x0001
-#define	UKBD_FLAG_POLLING	0x0002
-#define	UKBD_FLAG_SET_LEDS	0x0004
-#define	UKBD_FLAG_ATTACHED	0x0010
-#define	UKBD_FLAG_GONE		0x0020
-#define	UKBD_FLAG_APPLE_EJECT	0x0040
-#define	UKBD_FLAG_APPLE_FN	0x0080
-#define	UKBD_FLAG_APPLE_SWAP	0x0100
-#define	UKBD_FLAG_TIMER_RUNNING	0x0200
+#define	UKBD_FLAG_COMPOSE	0x0001
+#define	UKBD_FLAG_POLLING	0x0002
+#define	UKBD_FLAG_SET_LEDS	0x0004
+#define	UKBD_FLAG_ATTACHED	0x0010
+#define	UKBD_FLAG_GONE		0x0020
+#define	UKBD_FLAG_APPLE_EJECT	0x0040
+#define	UKBD_FLAG_APPLE_FN	0x0080
+#define	UKBD_FLAG_APPLE_SWAP	0x0100
+#define	UKBD_FLAG_TIMER_RUNNING	0x0200
+#define	UKBD_FLAG_CTRL_L	0x0400
+#define	UKBD_FLAG_CTRL_R	0x0800
+#define	UKBD_FLAG_SHIFT_L	0x1000
+#define	UKBD_FLAG_SHIFT_R	0x2000
+#define	UKBD_FLAG_ALT_L		0x4000
+#define	UKBD_FLAG_ALT_R		0x8000
+#define	UKBD_FLAG_WIN_L		0x0001
+#define	UKBD_FLAG_WIN_R		0x0002
+#define	UKBD_FLAG_EVENTS	0x0004
+#define	UKBD_FLAG_NUMLOCK	0x0008
+#define	UKBD_FLAG_CAPSLOCK	0x0010
+#define	UKBD_FLAG_SCROLLLOCK 	0x0020
 
 	int	sc_mode;		/* input mode (K_XLATE,K_RAW,K_CODE) */
 	int	sc_state;		/* shift/lock key state */
 	int	sc_accents;		/* accent key index ( 0) */
 	int	sc_poll_tick_last;
+	int	sc_led_size;
+	int	sc_kbd_size;
 
 	uint16_t sc_inputs;
 	uint16_t sc_inputhead;
 	uint16_t sc_inputtail;
+	uint16_t sc_modifiers;
 
 	uint8_t	sc_leds;		/* store for async led requests */
 	uint8_t	sc_iface_index;
 	uint8_t	sc_iface_no;
+	uint8_t sc_id_apple_eject;
+	uint8_t sc_id_apple_fn;
+	uint8_t sc_id_ctrl_l;
+	uint8_t sc_id_ctrl_r;
+	uint8_t sc_id_shift_l;
+	uint8_t sc_id_shift_r;
+	uint8_t sc_id_alt_l;
+	uint8_t sc_id_alt_r;
+	uint8_t sc_id_win_l;
+	uint8_t sc_id_win_r;
+	uint8_t sc_id_event;
+	uint8_t sc_id_numlock;
+	uint8_t sc_id_capslock;
+	uint8_t sc_id_scrolllock;
+	uint8_t sc_id_events;
 	uint8_t sc_kbd_id;
-	uint8_t sc_led_id;
+
 	uint8_t sc_poll_detected;
 };
 
@@ -558,11 +602,10 @@
 {
 	struct ukbd_softc *sc = usbd_xfer_softc(xfer);
 	struct usb_page_cache *pc;
+	uint8_t buffer[32];
 	uint8_t i;
 	uint8_t offset;
 	uint8_t id;
-	uint8_t apple_fn;
-	uint8_t apple_eject;
 	int len;
 
 	usbd_xfer_status(xfer, len, NULL, NULL, NULL);
@@ -580,73 +623,145 @@
 		if (sc-sc_kbd_id != 0) {
 			/* check and remove HID ID byte */
 			usbd_copy_out(pc, 0, id, 1);
-			if (id != sc-sc_kbd_id) {
-DPRINTF(wrong HID ID\n);
+			offset = 1;
+			len--;
+			if (len == 0) {
+DPRINTF(zero length data\n);
 goto tr_setup;
 			}
-			offset = 1;
-			len--;
 		} else {
 			offset = 0;
+			id = 0;
 		}
 
-		if (len  sizeof(sc-sc_ndata)) {
-			len = sizeof(sc-sc_ndata);
-		}
+		if (len  sizeof(buffer))
+			len = sizeof(buffer);
 
-		if (len) {
-			memset(sc-sc_ndata, 0, sizeof(sc-sc_ndata));
-			usbd_copy_out(pc, offset, sc-sc_ndata, len);
+		/* get data */
+		usbd_copy_out(pc, offset, buffer, len);
 
-			if ((sc-sc_flags  UKBD_FLAG_APPLE_EJECT) 
-			hid_get_data((uint8_t *)sc-sc_ndata,
-len, sc-sc_loc_apple_eject))
-apple_eject = 1;
-			else
-apple_eject = 0;
+		/* clear temporary storage */
+		memset(sc-sc_ndata, 0, sizeof(sc-sc_ndata));
 
-			if ((sc-sc_flags  UKBD_FLAG_APPLE_FN) 
-			hid_get_data((uint8_t *)sc-sc_ndata,
-len, sc-sc_loc_apple_fn))
-apple_fn = 1;
+		/* scan through 

Re: keyboard driver problem?

2011-01-02 Thread Hans Petter Selasky
On Sunday 02 January 2011 09:36:06 too.much.du...@gmail.com wrote:
 Hello, have problem with A4Tech G7100 wireless combo mouse+keyboard.
 Mouse works fine, but keyboard not. It's loading:
 ugen4.2: A4TECH at usbus4
 ukbd1: A4TECH USB Device, class 0/0, rev 1.10/1.02, addr 2 on usbus4
 but pressing any key doesn't have effect. It works only in one way - if i
 pressing one (any) key and don't releasing it and preessing another key at
 the same time.
 
 For example to make work key a i should press b (and don't releasing
 it, use like shift) and after that pressing key a. And it works.
 
 This problem is only in 8.x branch. At Freebsd 7.3, 7.4 it works ok.
 I think the problem is in new ukbd-driver, when i press 'q' key, debug
 says:
 
 ukbd_intr_callback:547: actlen=8 bytes
 ukbd_intr_callback:590: apple_eject=0 apple_fn=0
 ukbd_intr_callback:597: [0] = 20
 ukbd_put_key:312: 0x14 (20) pressed
 ukbd_intr_callback:547: actlen=8 bytes
 ukbd_intr_callback:590: apple_eject=0 apple_fn=0
 ukbd_put_key:312: 0x414 (1044) released
 (this is for usb wire-keyboard that works fine)
 
 ukbd_intr_callback:547: actlen=12 bytes
 ukbd_intr_callback:590: apple_eject=0 apple_fn=0
 (and this is for my ATech G7100 keyboard)

Could you dump the device and configuration descriptors of your keyboard using 
the usbconfig utility.

usbconfig -d X.Y dump_device_desc dump_curr_config_desc

It looks like your keyboard is sending 12 bytes instead of 8, which is 
expected from UKBD.

--HPS
___
freebsd-current@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to freebsd-current-unsubscr...@freebsd.org


Re: keyboard driver problem?

2011-01-02 Thread Hans Petter Selasky
On Sunday 02 January 2011 09:36:06 too.much.du...@gmail.com wrote:
 Hello, have problem with A4Tech G7100 wireless combo mouse+keyboard.
 Mouse works fine, but keyboard not. It's loading:
 ugen4.2: A4TECH at usbus4
 ukbd1: A4TECH USB Device, class 0/0, rev 1.10/1.02, addr 2 on usbus4
 but pressing any key doesn't have effect. It works only in one way - if i
 pressing one (any) key and don't releasing it and preessing another key at
 the same time.
 
 For example to make work key a i should press b (and don't releasing
 it, use like shift) and after that pressing key a. And it works.
 
 This problem is only in 8.x branch. At Freebsd 7.3, 7.4 it works ok.
 I think the problem is in new ukbd-driver, when i press 'q' key, debug


In sys/dev/usb/input/ukbd.c, you could try to redefine this variable to 8.

#define UKBD_NKEYCODE 6 /* units */

--HPS
___
freebsd-current@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to freebsd-current-unsubscr...@freebsd.org


Re: keyboard driver problem?

2011-01-02 Thread Hans Petter Selasky
On Sunday 02 January 2011 15:22:32 I Think wrote:
 I've tried already to change both UKBD_NMOD and UKBD_NKEYCODE, but where is
 no result.
 #define UKBD_NKEYCODE 8 // doesn't work too
 
   usbconfig -u 4 -a 2 dump_device_desc dump_curr_config_desc
 
 ugen4.2: USB Device A4TECH at usbus4, cfg=0 md=HOST spd=FULL (12Mbps)
 pwr=ON
 
   bLength = 0x0012
   bDescriptorType = 0x0001
   bcdUSB = 0x0110
   bDeviceClass = 0x
   bDeviceSubClass = 0x
   bDeviceProtocol = 0x
   bMaxPacketSize0 = 0x0008
   idVendor = 0x09da
   idProduct = 0x054f
   bcdDevice = 0x0102
   iManufacturer = 0x0001  A4TECH
   iProduct = 0x0002  USB Device
   iSerialNumber = 0x  no string
   bNumConfigurations = 0x0001
 
 
  Configuration index 0
 
 bLength = 0x0009
 bDescriptorType = 0x0002
 wTotalLength = 0x003b
 bNumInterfaces = 0x0002
 bConfigurationValue = 0x0001
 iConfiguration = 0x  no string
 bmAttributes = 0x00a0
 bMaxPower = 0x0032
 
 Interface 0
   bLength = 0x0009
   bDescriptorType = 0x0004
   bInterfaceNumber = 0x
   bAlternateSetting = 0x
   bNumEndpoints = 0x0001
   bInterfaceClass = 0x0003
   bInterfaceSubClass = 0x0001
   bInterfaceProtocol = 0x0001
   iInterface = 0x  no string
 
   Additional Descriptor
 
   bLength = 0x09
   bDescriptorType = 0x21
   bDescriptorSubType = 0x11
RAW dump:
0x00 | 0x09, 0x21, 0x11, 0x01, 0x00, 0x01, 0x22, 0x84,
0x08 | 0x00
 
  Endpoint 0
 bLength = 0x0007
 bDescriptorType = 0x0005
 bEndpointAddress = 0x0081
 bmAttributes = 0x0003
 wMaxPacketSize = 0x000c
 bInterval = 0x0001
 bRefresh = 0x
 bSynchAddress = 0x
 
 
 Interface 1
   bLength = 0x0009
   bDescriptorType = 0x0004
   bInterfaceNumber = 0x0001
   bAlternateSetting = 0x
   bNumEndpoints = 0x0001
   bInterfaceClass = 0x0003
   bInterfaceSubClass = 0x0001
   bInterfaceProtocol = 0x0002
   iInterface = 0x  no string
 
   Additional Descriptor
 
   bLength = 0x09
   bDescriptorType = 0x21
   bDescriptorSubType = 0x11
RAW dump:
0x00 | 0x09, 0x21, 0x11, 0x01, 0x00, 0x01, 0x22, 0x57,
0x08 | 0x00
 
  Endpoint 0
 bLength = 0x0007
 bDescriptorType = 0x0005
 bEndpointAddress = 0x0082
 bmAttributes = 0x0003
 wMaxPacketSize = 0x0008
 bInterval = 0x0001
 bRefresh = 0x
 bSynchAddress = 0x
 
 

You could maybe try this. Lookup the following code in ukbd.c. Add the lines 
marked with +

if (sc-sc_kbd_id != 0) {
/* check and remove HID ID byte */
usbd_copy_out(pc, 0, id, 1);
if (id != sc-sc_kbd_id) {
DPRINTF(wrong HID ID\n);
goto tr_setup;
}
offset = 1;
len--;
} else {
offset = 0;
}

+   if (len == 12) {
+   offset += 2;
+   len -= 2;
+   }
+   if (len == 11) {
+   offset += 1;
+   len -= 1;
+   }

--HPS
___
freebsd-current@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to freebsd-current-unsubscr...@freebsd.org


Re: keyboard driver problem?

2011-01-02 Thread Hans Petter Selasky
On Sunday 02 January 2011 15:42:42 too.much.du...@gmail.com wrote:
 already tried variants :
 offset+=4  len-=4
 offset+=0  len-=4
 and yours, but they doesn't have correct effect
 (yours variant gives some addition lags:
 for example pressing o presses Scroll Lock, h - WIN_L and etc)

Hi,

Maybe you can add a printout, to dump the len bytes:

uint32_t yy;

printf(UKBD data: );

for (yy = 0; yy != len; yy++)
{
uint8_t temp;
usbd_copy_out(pc, offset + yy, temp, 1);

printf(0x%02x , (int)temp);
}

printf(\n);


I guess the reason your keyboard doesn't work is that we don't parse any HID 
descriptors in UKBD.

--HPS
___
freebsd-current@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to freebsd-current-unsubscr...@freebsd.org


Re: keyboard driver problem?

2011-01-02 Thread too . much . dudes
ukbd_intr_callback:547: actlen=12 bytes
ukbd_intr_callback:568: UKBD data: 
ukbd_intr_callback:575: 0x00
ukbd_intr_callback:575: 0x14 
ukbd_intr_callback:575: 0x00
ukbd_intr_callback:575: 0x00 
ukbd_intr_callback:575: 0x00
ukbd_intr_callback:575: 0x00 
ukbd_intr_callback:575: 0x00
ukbd_intr_callback:575: 0x00 
ukbd_intr_callback:575: 0x00
ukbd_intr_callback:575: 0x00 
ukbd_intr_callback:575: 0x00
ukbd_intr_callback:578: 
ukbd_intr_callback:603: apple_eject=0 apple_fn=0

i tried debug sc_odata.keycode[i] sc_ndata.keycode[i] at function
ukbd_interrupt(), they are empty, but for another keyboard they are not.


 I guess the reason your keyboard doesn't work is that we don't parse any HID 
 descriptors in UKBD.
So why is it working in freebsd 7.x then?
___
freebsd-current@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to freebsd-current-unsubscr...@freebsd.org