Problem with Logitech Mx900 again
Maksim Yevmenkin
maksim.yevmenkin at savvis.net
Tue Jun 21 16:45:37 GMT 2005
Vladimir,
[...]
> dump with last attempt with pin-code in attachment.
thanks. in the dump you have provided i can see that bthidd(8) have
successfully established l2cap connection on psm 17 (0x11 - HID control
channel)
1119333385.368311 < L2CAP(s): Connect req: psm 17 scid 0x0042
1119333385.386224 > L2CAP(s): Connect rsp: dcid 0x0042 scid 0x0042
result 1 stat
1119333385.443257 > L2CAP(s): Connect rsp: dcid 0x0042 scid 0x0042
result 0 stat
1119333385.443299 < L2CAP(s): Config req: dcid 0x0042 flags 0x0000 clen 0
1119333385.516189 > L2CAP(s): Config rsp: scid 0x0042 flags 0x0000
result 0 clen
1119333385.547220 > L2CAP(s): Config req: dcid 0x0042 flags 0x0000 clen 28
MTU 48 Unknown (type 03, len 22)
1119333385.549241 < L2CAP(s): Config rsp: scid 0x0042 flags 0x0000
result 0 clen
however, it could not establish HID interrupt channel on psm 19 (0x13 -
HID interrupt). instead bthidd(8) tried to connect on psm 25 (0x19)! and
of course mouse rejects the connection.
1119333385.549430 < L2CAP(s): Connect req: psm 25 scid 0x0043
1119333385.580204 > L2CAP(s): Connect rsp: dcid 0x0000 scid 0x0043
result 2 stat
1119333385.580438 < L2CAP(s): Disconn req: dcid 0x0042 scid 0x0042
1119333385.638242 > L2CAP(s): Disconn rsp: dcid 0x0042 scid 0x0042
i remember you had similar problem before due to incorrect
"interrupt_psm" value in the bthidd.conf file. in your first email you
have posted your bthidd.conf file and it had correct values for
"interrupt_psm" and "control_psm".
so, could you please double check your /etc/bluetooth/bthidd.conf file
and make sure bthidd(8) uses the correct config.
i suspect there might be another bug in bthidd(8), so if you could
please try to run bthidd(8) under debugger and try to examine internal
configuration structures after bthidd(8) parses the config file.
i also attached a patch that renames global variable to avoid name
collision with the local variables. i do not expect it to fix your
problem, but please try it anyway.
> It looks like hardware problem for me (over one night both OSes stop
> stop seen mouse) no reset was initiated, cradle was far-far away from
> place where it happens. But, probably there is software solution.
lets not blame the hardware just yet :)
thanks,
max
-------------- next part --------------
--- parser.y.orig Tue Jun 21 09:37:45 2005
+++ parser.y Tue Jun 21 09:36:31 2005
@@ -27,7 +27,7 @@
* SUCH DAMAGE.
*
* $Id: parser.y,v 1.4 2004/11/17 21:59:42 max Exp $
- * $FreeBSD: /repoman/r/ncvs/src/usr.sbin/bluetooth/bthidd/parser.y,v 1.4 2005/05/18 23:03:44 emax Exp $
+ * $FreeBSD: src/usr.sbin/bluetooth/bthidd/parser.y,v 1.4 2005/05/18 23:03:44 emax Exp $
*/
#include <sys/queue.h>
@@ -68,7 +68,7 @@
static char buffer[1024];
static int hid_descriptor_size;
-static hid_device_t *hid_device = NULL;
+static hid_device_t *hid_current = NULL;
static LIST_HEAD(, hid_device) hid_devices;
%}
@@ -92,23 +92,23 @@
line: T_DEVICE
{
- hid_device = (hid_device_t *) calloc(1, sizeof(*hid_device));
- if (hid_device == NULL) {
+ hid_current = (hid_device_t *) calloc(1, sizeof(*hid_current));
+ if (hid_current == NULL) {
SYSLOG(LOGCRIT, "Could not allocate new " \
"config entry" EOL);
YYABORT;
}
- hid_device->new_device = 1;
+ hid_current->new_device = 1;
}
'{' options '}'
{
- if (check_hid_device(hid_device))
- LIST_INSERT_HEAD(&hid_devices,hid_device,next);
+ if (check_hid_device(hid_current))
+ LIST_INSERT_HEAD(&hid_devices, hid_current, next);
else
- free_hid_device(hid_device);
+ free_hid_device(hid_current);
- hid_device = NULL;
+ hid_current = NULL;
}
;
@@ -128,49 +128,49 @@
bdaddr: T_BDADDR T_BDADDRSTRING
{
- memcpy(&hid_device->bdaddr, &$2, sizeof(hid_device->bdaddr));
+ memcpy(&hid_current->bdaddr, &$2, sizeof(hid_current->bdaddr));
}
;
control_psm: T_CONTROL_PSM T_HEXBYTE
{
- hid_device->control_psm = $2;
+ hid_current->control_psm = $2;
}
;
interrupt_psm: T_INTERRUPT_PSM T_HEXBYTE
{
- hid_device->interrupt_psm = $2;
+ hid_current->interrupt_psm = $2;
}
;
reconnect_initiate: T_RECONNECT_INITIATE T_TRUE
{
- hid_device->reconnect_initiate = 1;
+ hid_current->reconnect_initiate = 1;
}
| T_RECONNECT_INITIATE T_FALSE
{
- hid_device->reconnect_initiate = 0;
+ hid_current->reconnect_initiate = 0;
}
;
battery_power: T_BATTERY_POWER T_TRUE
{
- hid_device->battery_power = 1;
+ hid_current->battery_power = 1;
}
| T_BATTERY_POWER T_FALSE
{
- hid_device->battery_power = 0;
+ hid_current->battery_power = 0;
}
;
normally_connectable: T_NORMALLY_CONNECTABLE T_TRUE
{
- hid_device->normally_connectable = 1;
+ hid_current->normally_connectable = 1;
}
| T_NORMALLY_CONNECTABLE T_FALSE
{
- hid_device->normally_connectable = 0;
+ hid_current->normally_connectable = 0;
}
;
@@ -180,11 +180,11 @@
}
'{' hid_descriptor_bytes '}'
{
- if (hid_device->desc != NULL)
- hid_dispose_report_desc(hid_device->desc);
+ if (hid_current->desc != NULL)
+ hid_dispose_report_desc(hid_current->desc);
- hid_device->desc = hid_use_report_desc(buffer, hid_descriptor_size);
- if (hid_device->desc == NULL) {
+ hid_current->desc = hid_use_report_desc(buffer, hid_descriptor_size);
+ if (hid_current->desc == NULL) {
SYSLOG(LOGCRIT, "Could not use HID descriptor" EOL);
YYABORT;
}
More information about the freebsd-bluetooth
mailing list