Gilad Bornstein wrote:
>
> I'm trying to work with a CDC-ACM device which has five end-points.
> The three first ones are the regular Notification + Data and the other two
> are proprietary end-points, for transferring some binary data.
>
> The device has no Linux driver (only windows).
>
> If I compile the device to have only 3 end-points, everything works fine:
>
> T: Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 3 Spd=12 MxCh= 0
> D: Ver= 1.01 Cls=02(comm.) Sub=00 Prot=00 MxPS=16 #Cfgs= 1
> P: Vendor=xxxx ProdID=xxxx Rev= 0.00
> S: Manufacturer=xxxxxxxxxxxxxxxxxxx
> S: Product=xxxxxxxxxxxxxxxxxxxxxxxxxx
> S: SerialNumber=Serial Number
> C:* #Ifs= 2 Cfg#= 1 Atr=e0 MxPwr=100mA
> I: If#= 0 Alt= 0 #EPs= 1 Cls=02(comm.) Sub=02 Prot=01 Driver=(acm)
> E: Ad=81(I) Atr=03(Int.) MxPS= 16 Ivl= 32ms
> I: If#= 1 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=(acm)
> E: Ad=8a(I) Atr=02(Bulk) MxPS= 64 Ivl= 0ms
> E: Ad=0b(O) Atr=02(Bulk) MxPS= 64 Ivl= 0ms
>
> But if I compile it to work with all of the end-points the ACM driver
> doesn't load:
>
> T: Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 11 Spd=12 MxCh= 0
> D: Ver= 1.01 Cls=02(comm.) Sub=00 Prot=00 MxPS=16 #Cfgs= 1
> P: Vendor=xxxx ProdID=xxxx Rev= 0.00
> S: Manufacturer=xxxxxxxxxxxxxxxx
> S: Product=xxxxxxxxxxxxxx
> S: SerialNumber=Serial Number
> C:* #Ifs= 3 Cfg#= 1 Atr=e0 MxPwr=100mA
> I: If#= 0 Alt= 0 #EPs= 1 Cls=02(comm.) Sub=02 Prot=01 Driver=(none)
> E: Ad=81(I) Atr=03(Int.) MxPS= 16 Ivl=128ms
> I: If#= 1 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=(none)
> E: Ad=8a(I) Atr=02(Bulk) MxPS= 64 Ivl= 0ms
> E: Ad=0b(O) Atr=02(Bulk) MxPS= 64 Ivl= 0ms
> I: If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
> E: Ad=83(I) Atr=02(Bulk) MxPS= 64 Ivl= 0ms
> E: Ad=06(O) Atr=02(Bulk) MxPS= 64 Ivl= 0ms
>
> I'm compiling exactly the same source code in both cases, changing only the
> "Number of avail interfaces" parameter between 2 and 3.
> What I wanted was that the ACM driver will recognize the device as a modem.
>
> I REALLY need some help here...
> Is it possible to have an ACM device with more then 3 end-points? (According
> to the spec. it should work fine).
> Should I change anything in the ACM driver in-order for the modem to work
> fine?
While I probably shouldn't be commenting again on acm, you would see the
following check in acm_probe():
if (cfacm->bNumInterfaces != 2 ||
usb_interface_claimed(cfacm->interface + 0) ||
usb_interface_claimed(cfacm->interface + 1))
continue;
Which says "There has to be exactly two interfaces, and those two interfaces
must not be claimed". This isn't actually spec compliant.
The number of endpoints doesn't really come into it except on the comm. and
data. interfaces.
If you are trying to get a short term driver for testing, just modify (or
dump) the sanity checks.
If you are trying to get a working system, perhaps you can use alternate
configurations. The default should be the old config, and the second should be
the vendor specific protocol extensions.
Brad
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel