Decode iso headers properly.
This commit is contained in:
parent
429167e36a
commit
89281b5767
|
@ -177,20 +177,19 @@ flush_recv_packets(raw1394handle_t handle,
|
||||||
end = (void *) interrupt->header + interrupt->header_length;
|
end = (void *) interrupt->header + interrupt->header_length;
|
||||||
cycle = interrupt->cycle;
|
cycle = interrupt->cycle;
|
||||||
dropped = 0;
|
dropped = 0;
|
||||||
|
|
||||||
/* FIXME: compute real buffer index. */
|
|
||||||
data = handle->iso.buffer +
|
data = handle->iso.buffer +
|
||||||
handle->iso.packet_tail * handle->iso.max_packet_size;
|
handle->iso.packet_tail * handle->iso.max_packet_size;
|
||||||
|
|
||||||
while (p < end) {
|
while (p < end) {
|
||||||
header = be32_to_cpu(*p++);
|
header = be32_to_cpu(*p++);
|
||||||
len = header >> 8;
|
len = header >> 16;
|
||||||
channel = header >> 8;
|
tag = (header >> 14) & 0x3;
|
||||||
tag = header >> 8;
|
channel = (header >> 8) & 0x3f;
|
||||||
sy = header >> 8;
|
sy = header & 0x0f;
|
||||||
|
|
||||||
printf("len=%d, channel=%d, tag=%d, sy=%d\n",
|
fprintf(stderr,
|
||||||
len, channel, tag, sy);
|
"header: %08x, len=%d, channel=%d, tag=%d, sy=%d, packet_tail=0x%x\n",
|
||||||
|
header, len, channel, tag, sy, handle->iso.packet_tail);
|
||||||
|
|
||||||
d = handle->iso.recv_handler(handle, data, len, channel,
|
d = handle->iso.recv_handler(handle, data, len, channel,
|
||||||
tag, sy, cycle, dropped);
|
tag, sy, cycle, dropped);
|
||||||
|
@ -199,6 +198,10 @@ flush_recv_packets(raw1394handle_t handle,
|
||||||
cycle++;
|
cycle++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
handle->iso.packet_tail += interrupt->header_length / 4;
|
||||||
|
if (handle->iso.packet_tail >= handle->iso.buf_packets)
|
||||||
|
handle->iso.packet_tail -= handle->iso.buf_packets;
|
||||||
|
|
||||||
queue_recv_packets(handle);
|
queue_recv_packets(handle);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Reference in New Issue