[prev in list] [next in list] [prev in thread] [next in thread] 

List:       haiku-bugs
Subject:    [haiku-bugs] Re: [Haiku] #17746: [USB tethering] Samsung S6810-L not working
From:       "Haiku" <trac () haiku-os ! org>
Date:       2024-01-31 12:13:38
Message-ID: 058.54fca6f56fa77b02633a21111c8e4e38 () haiku-os ! org
[Download RAW message or body]

--==============„99909261766878936=MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable

#17746: [USB tethering] Samsung S6810-L not working
----------------------+----------------------------
  Reporter:  bipolar  |      Owner:  nobody
      Type:  bug      |     Status:  new
  Priority:  normal   |  Milestone:  Unscheduled
 Component:  Drivers  |    Version:  R1/Development
Resolution:           |   Keywords:  usb tethering
Blocked By:           |   Blocking:
  Platform:  x86-64   |
----------------------+----------------------------
Comment (by pulkomandy):

 The change you made to Korli's suggested code seems incorrect.

 You have this:

 {{{
 if ((interface->endpoint_count == 0)
     || ! ((descriptor->interface_class ==
 USB_COMMUNICATION_WIRELESS_DEVICE_CLASS && (descriptor->interface_protocol
 == 0x01 || descriptor->interface_protocol == 0x03))
     || (descriptor->interface_class == USB_COMMUNICATION_DEVICE_CLASS &&
 (descriptor->interface_protocol == 0x02 || descriptor->interface_protocol
 == 0xFF)))) {
 }}}

 The second condition will always match in your case (for any descriptor).
 So, that will not work.

 This is impossible to understand without spending 5 minutes looking at the
 code anyway, so let's split it up into smaller pieces so it's easier to
 read:

 {{{
     if (interface->endpoint_count == 0) {
         TRACE_ALWAYS("control interface has no endpoint_count\n");
         return B_ERROR;
     }

     if (descriptor->interface_class ==
 USB_COMMUNICATION_WIRELESS_DEVICE_CLASS) {
         if ((descriptor->interface_subclass != 0x01 ||
 descriptor->interface_protocol != 0x03) {
             TRACE_ALWAYS("control interface has invalid interface subclass
 or protocol\n");
             return B_ERROR;
         }
     } else if (descriptor->interface_class ==
 USB_COMMUNICATION_DEVICE_CLASS) {
         // Microsoft USBRNDIS style control interface
         if ((descriptor->interface_subclass != 0x02 ||
 descriptor->interface_protocol != 0xFF) {
             TRACE_ALWAYS("control interface has invalid interface subclass
 or protocol\n");
             return B_ERROR;
         }
     } else {
         TRACE_ALWAYS("control interface has invalid interface class\n");
         return B_ERROR;
     }
 }}}

 Then, we have this in the syslog:

 {{{
 usb_rndis: link speed: -2021749710 * 100bps
 }}}

 Getting the link speed didn't work very well. I think for now we can
 comment out the call to _ReadLinkSpeed, there will be no problem with that
 except the link speed won't be reported in network preferences.

 I don't know if this failure to get the link speed is what causes the next
 problems or not. The next thing to do is probably to enable TRACE (add a
 {{{#define TRACE_RNDIS 1}}} in Driver.h so we can get more information in
 the debug logs.

 Then we will see which requests caused the other errors and hopefully see
 more from _EnableBroadcast, which is supposed to enable the traffic, but
 it seems it didn't work.
-- 
Ticket URL: <https://dev.haiku-os.org/ticket/17746#comment:11>
Haiku <https://dev.haiku-os.org>
The Haiku operating system.
--==============„99909261766878936==--

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic