* [linux-dvb] usb-dvb and endpoints question
@ 2008-05-31 13:12 Dennis Noordsij
2008-05-31 14:01 ` Antti Palosaari
0 siblings, 1 reply; 5+ messages in thread
From: Dennis Noordsij @ 2008-05-31 13:12 UTC (permalink / raw)
To: linux-dvb
Hi list,
I am writing a driver for the TerraTec Piranha DVB-T USB stick (actually
the Sanio SMS-1000 chipset). From reading USB logs I have a working
libusb prototype which can tune and receive the transport stream, and
use the hardware PID filter.
Porting it to a proper linux DVB driver I have the following question:
This device has exactly 2 bulk endpoints, as follows:
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
All control messages go out over EP2. All responses, as well as the
transport stream, come in over EP1.
All incoming packets have a small header which allows it to be mapped
back to the corresponding request (excepting TS data which can be read
spontaneously, but which is still marked with an additional header).
Does this mean that I can not really use the dvb-usb framework ? (since
there is no generic_bulk_ctrl_endpoint, and since the TS stream also
does not come on its own endpoint and even needs additional depackatizing).
Since incoming data is mixed with TS packets, you can no longer just
write a command and read the next response. TS data will be streaming in
and every time you make some request you will probably get some TS data
first, and only then your response. How to solve?
Any pointers in the right direction? :-)
Cheers,
Dennis
_______________________________________________
linux-dvb mailing list
linux-dvb@linuxtv.org
http://www.linuxtv.org/cgi-bin/mailman/listinfo/linux-dvb
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [linux-dvb] usb-dvb and endpoints question
2008-05-31 13:12 [linux-dvb] usb-dvb and endpoints question Dennis Noordsij
@ 2008-05-31 14:01 ` Antti Palosaari
2008-05-31 14:32 ` Dennis Noordsij
2008-05-31 16:58 ` Dennis Noordsij
0 siblings, 2 replies; 5+ messages in thread
From: Antti Palosaari @ 2008-05-31 14:01 UTC (permalink / raw)
To: Dennis Noordsij; +Cc: linux-dvb
Dennis Noordsij wrote:
> Hi list,
>
> I am writing a driver for the TerraTec Piranha DVB-T USB stick (actually
> the Sanio SMS-1000 chipset). From reading USB logs I have a working
> libusb prototype which can tune and receive the transport stream, and
> use the hardware PID filter.
>
> Porting it to a proper linux DVB driver I have the following question:
>
> This device has exactly 2 bulk endpoints, as follows:
>
> Endpoint Descriptor:
> bLength 7
> bDescriptorType 5
> bEndpointAddress 0x81 EP 1 IN
> bmAttributes 2
> Transfer Type Bulk
> Synch Type None
> Usage Type Data
> wMaxPacketSize 0x0040 1x 64 bytes
> bInterval 0
> Endpoint Descriptor:
> bLength 7
> bDescriptorType 5
> bEndpointAddress 0x02 EP 2 OUT
> bmAttributes 2
> Transfer Type Bulk
> Synch Type None
> Usage Type Data
> wMaxPacketSize 0x0040 1x 64 bytes
> bInterval 0
>
> All control messages go out over EP2. All responses, as well as the
> transport stream, come in over EP1.
uh, very crazy solution :o
> All incoming packets have a small header which allows it to be mapped
> back to the corresponding request (excepting TS data which can be read
> spontaneously, but which is still marked with an additional header).
>
> Does this mean that I can not really use the dvb-usb framework ? (since
> there is no generic_bulk_ctrl_endpoint, and since the TS stream also
> does not come on its own endpoint and even needs additional depackatizing).
Looks like it is not possible to use dvb-framework very much...
...But you can use generic_bulk_ctrl_endpoint & generic_write to write
data if you can use dvb-framework partially. But reading data could be
very hard to implement.
> Since incoming data is mixed with TS packets, you can no longer just
> write a command and read the next response. TS data will be streaming in
> and every time you make some request you will probably get some TS data
> first, and only then your response. How to solve?
>
> Any pointers in the right direction? :-)
Other thoughts, wMaxPacketSize 0x0040 1x 64 bytes looks rather small for TS.
Can you provide sample usb-sniff from windows? Parsed with usb-replay
parser.pl -script would be enough if whole sniff is very large.
> Cheers,
> Dennis
regards
Antti
--
http://palosaari.fi/
_______________________________________________
linux-dvb mailing list
linux-dvb@linuxtv.org
http://www.linuxtv.org/cgi-bin/mailman/listinfo/linux-dvb
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [linux-dvb] usb-dvb and endpoints question
2008-05-31 14:01 ` Antti Palosaari
@ 2008-05-31 14:32 ` Dennis Noordsij
2008-05-31 16:58 ` Dennis Noordsij
1 sibling, 0 replies; 5+ messages in thread
From: Dennis Noordsij @ 2008-05-31 14:32 UTC (permalink / raw)
To: Antti Palosaari; +Cc: linux-dvb
Hi Antti,
Thank you for your reply!
> Other thoughts, wMaxPacketSize 0x0040 1x 64 bytes looks rather small for
> TS.
Yeah it would be, but somehow this seems to just be ignored. A tyical
response would be a single USB packet containing exactly 21 TS packets,
and 8 bytes of header (for a total of 3956 bytes)
See example below where it seems to interrupt the request-response with
TS data.
As for reading-writing, I've got a specific version of the
usb_dvb_generic_rw (using 2 endpoints) and it works fine by itself. But
I haven't got around to how the the TS streaming is going work.
What is the read-loop going to be like ? :-)
> Can you provide sample usb-sniff from windows? Parsed with usb-replay
> parser.pl -script would be enough if whole sniff is very large.
I've used different programs, but some example:
000820: Bulk or Interrupt Transfer (UP), 30.05.2008 14:06:09.336 +0.125.
Status: 0x00000000
Pipe Handle: 0xffad2bec (Endpoint Address: 0x81)
Get 0xf74 bytes from the device
B5 02 14 01 74 0F 05 00 47 00 12 1B 67 65 72 05 ....t...G...ger.
05 52 65 62 61 0C 05 56 6F 6C 6C 65 73 20 48 61 .Reba..Volles Ha
75 73 54 02 15 00 4E FA 02 67 65 72 00 F4 05 55 usT...N..ger...U
6E 74 65 72 68 61 6C 74 75 6E 67 73 73 65 72 69 nterhaltungsseri
... etc
Note that this contains TS data, "74 0F" is the length of the USB packet
(0xF74 = 3956), after 8 bytes of header the TS sync 0x47 can be seen.
Exactly 21 TS packets are contained.
Since the packets are so large, and I can't get the TerraTec software to
do too much in terms of sending commands in between, I don't really have
many good logs of the mixing of TS and responses.
But one example:
000392: Bulk or Interrupt Transfer (DOWN), 30.05.2008 18:31:14.919 +0.0
Pipe Handle: 0x8118b66c (Endpoint Address: 0x2)
Send 0xc bytes to the device
67 02 C9 0B 0C 00 00 00 20 00 20 81 g.�..... . �
000393: Bulk or Interrupt Transfer (UP), 30.05.2008 18:31:14.919 +0.0.
Status: 0x00000000
Pipe Handle: 0x8118b66c (Endpoint Address: 0x2)
Send 0xc bytes to the device
000394: Bulk or Interrupt Transfer (UP), 30.05.2008 18:31:14.919 +0.0.
Status: 0x00000000
Pipe Handle: 0x8118b64c (Endpoint Address: 0x81)
Get 0xf74 bytes from the device
B5 02 14 01 74 0F 05 00 47 0F B4 1B 27 0B BA C2 �...t...G.�.'.��
... TS data follows ..
000395: Bulk or Interrupt Transfer (DOWN), 30.05.2008 18:31:14.919 +0.0
Pipe Handle: 0x8118b64c (Endpoint Address: 0x81)
Get 0x1000 bytes from the device
000396: Bulk or Interrupt Transfer (UP), 30.05.2008 18:31:14.935 +0.015.
Status: 0x00000000
Pipe Handle: 0x8118b64c (Endpoint Address: 0x81)
Get 0xe0 bytes from the device
68 02 0B C9 E0 00 00 00 00 00 00 00 00 00 00 00 h..��...........
01 00 00 00 01 00 00 00 00 00 00 00 1B 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1D 00 00 00 D2 FF FF FF 2D C5 FF FF 70 CE 34 1D ....����-���p�4.
00 00 00 00 01 00 00 00 0D 00 00 00 03 00 00 00 ................
02 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1) What data was sent in 393 ?
2) The response came after the TS packet (396 is the response to 392).
3) What data was received in 395 ?
Note that I've basically ignored the 395-type responses, they're shown
also in the firmware initialization but if I just look at logs which
actually show data then everything works correctly, so 395 and 393 would
be noise ?
Hope I am not missing some basic USB thing that makes you slap your
forehead and say "aha it's just the device telling you to do X!" :-)
Cheers,
Dennis
>> Cheers,
>> Dennis
>
> regards
> Antti
_______________________________________________
linux-dvb mailing list
linux-dvb@linuxtv.org
http://www.linuxtv.org/cgi-bin/mailman/listinfo/linux-dvb
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [linux-dvb] usb-dvb and endpoints question
2008-05-31 14:01 ` Antti Palosaari
2008-05-31 14:32 ` Dennis Noordsij
@ 2008-05-31 16:58 ` Dennis Noordsij
2008-05-31 17:03 ` Dennis Noordsij
1 sibling, 1 reply; 5+ messages in thread
From: Dennis Noordsij @ 2008-05-31 16:58 UTC (permalink / raw)
To: Antti Palosaari; +Cc: linux-dvb
> Other thoughts, wMaxPacketSize 0x0040 1x 64 bytes looks rather small for
> TS.
Incidentally, usb-sniff reports the following:
ConfigurationDescriptor = 0xffb6adf8 (configure)
ConfigurationDescriptor : bLength = 9
ConfigurationDescriptor : bDescriptorType = 0x00000002
ConfigurationDescriptor : wTotalLength = 0x00000020
ConfigurationDescriptor : bNumInterfaces = 0x00000001
ConfigurationDescriptor : bConfigurationValue = 0x00000001
ConfigurationDescriptor : iConfiguration = 0x00000000
ConfigurationDescriptor : bmAttributes = 0x00000080
ConfigurationDescriptor : MaxPower = 0x00000032
ConfigurationHandle = 0x811fa720
Interface[0]: Length = 56
Interface[0]: InterfaceNumber = 0
Interface[0]: AlternateSetting = 0
Interface[0]: Class = 0x000000ff
Interface[0]: SubClass = 0x00000002
Interface[0]: Protocol = 0x00000000
Interface[0]: InterfaceHandle = 0xffb7efa0
Interface[0]: NumberOfPipes = 2
Interface[0]: Pipes[0] : MaximumPacketSize = 0x00000040
Interface[0]: Pipes[0] : EndpointAddress = 0x00000081
Interface[0]: Pipes[0] : Interval = 0x00000000
Interface[0]: Pipes[0] : PipeType = 0x00000002 (UsbdPipeTypeBulk)
Interface[0]: Pipes[0] : PipeHandle = 0xffb7efbc
Interface[0]: Pipes[0] : MaxTransferSize = 0x00010000
Interface[0]: Pipes[0] : PipeFlags = 0x00000000
Interface[0]: Pipes[1] : MaximumPacketSize = 0x00000040
Interface[0]: Pipes[1] : EndpointAddress = 0x00000002
Interface[0]: Pipes[1] : Interval = 0x00000000
Interface[0]: Pipes[1] : PipeType = 0x00000002 (UsbdPipeTypeBulk)
Interface[0]: Pipes[1] : PipeHandle = 0xffb7efdc
Interface[0]: Pipes[1] : MaxTransferSize = 0x00010000 <<<<<<<<
Interface[0]: Pipes[1] : PipeFlags = 0x00000000
which makes more sense ?
_______________________________________________
linux-dvb mailing list
linux-dvb@linuxtv.org
http://www.linuxtv.org/cgi-bin/mailman/listinfo/linux-dvb
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [linux-dvb] usb-dvb and endpoints question
2008-05-31 16:58 ` Dennis Noordsij
@ 2008-05-31 17:03 ` Dennis Noordsij
0 siblings, 0 replies; 5+ messages in thread
From: Dennis Noordsij @ 2008-05-31 17:03 UTC (permalink / raw)
To: Antti Palosaari; +Cc: linux-dvb
Dennis Noordsij schreef:
>> Other thoughts, wMaxPacketSize 0x0040 1x 64 bytes looks rather small for
>> TS.
>
> Incidentally, usb-sniff reports the following:
Ahem, my mistake, mixed up some terminology. Sorry for the spam.
_______________________________________________
linux-dvb mailing list
linux-dvb@linuxtv.org
http://www.linuxtv.org/cgi-bin/mailman/listinfo/linux-dvb
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2008-05-31 17:04 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-05-31 13:12 [linux-dvb] usb-dvb and endpoints question Dennis Noordsij
2008-05-31 14:01 ` Antti Palosaari
2008-05-31 14:32 ` Dennis Noordsij
2008-05-31 16:58 ` Dennis Noordsij
2008-05-31 17:03 ` Dennis Noordsij
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox