Hi,
I’am writing a class driver for a usb webcam. I have to read the images
with isochronous transfers. Could someone tell me how isochronous transfers
work with Qnx (6.2)?
Thanx
Hi,
I’am writing a class driver for a usb webcam. I have to read the images
with isochronous transfers. Could someone tell me how isochronous transfers
work with Qnx (6.2)?
Thanx
I am glad to see that you are doing the same work with me except fot the
qnx6.1.
I had write a driver according to the UDDK 1.0 Beta but can’t get video
data.My video camera is based ov511+ and what type of IC your camera
adopted?
RTP 620A
I try the same here, but all isochronous transfers are marked as complete
with error USBD_STATUS_CMP_ERR.
I also have a question about the length parameter in the
usbd_isochronous_setup().
Is it necc. to set exactely the maximum packet size as reported in the
endpoint descriptor ?
Do I need to ‘re-hook’ the isochronous transfer urb in the completion
callback ?
Is the length parameter in the usbd_urb_status() valid if an error is
flagged in the urb status ?
TIA, peter
“Hercot Jean-Yves” <fa063821@skynet.be> schrieb im Newsbeitrag
news:b52p8o$mu2$1@inn.qnx.com…
Hi,
I’am writing a class driver for a usb webcam. I have to read the images
with isochronous transfers. Could someone tell me how isochronous
transfers
work with Qnx (6.2)?Thanx
dolphin GmbH (pw@dolphin.de) wrote:
: RTP 620A
: I try the same here, but all isochronous transfers are marked as complete
: with error USBD_STATUS_CMP_ERR.
: I also have a question about the length parameter in the
: usbd_isochronous_setup().
What is the Error code reported ?
Has the camera been enabled ?
Have sent a vendor command to start the camera capturing ?
: Is it necc. to set exactely the maximum packet size as reported in the
: endpoint descriptor ?
Currently Yes.
: Do I need to ‘re-hook’ the isochronous transfer urb in the completion
: callback ?
Yes.
Generally a good way to handle an isoch camera would be :
(Your camera may vary)
I don’t think you can count on the length being valid if there is
an error reported.
: “Hercot Jean-Yves” <fa063821@skynet.be> schrieb im Newsbeitrag
: news:b52p8o$mu2$1@inn.qnx.com…
: > Hi,
: >
: > I’am writing a class driver for a usb webcam. I have to read the images
: > with isochronous transfers. Could someone tell me how isochronous
: transfers
: > work with Qnx (6.2)?
: >
: > Thanx
: >
: >
THX Henry,
the architecture is not my problem Henry. Its all done incl. double
buffering, overlay support etc.
I allocate 10 urb and 10 data buffers in a ringbuffer and it works
fine…but all callbacks
end w/ a status of USBD_STATUS_CMP_ERR. The setup_isochronous() and
usbd_io()
does not return any error. My test equipment is a PCVC680k (Philips Vesta
WebCam).
I will try to verify the enable/capture command again to be sure its
working.
TIA Henry for your help.
cheers, peter
: RTP 620A
: I try the same here, but all isochronous transfers are marked as
complete
: with error USBD_STATUS_CMP_ERR.
: I also have a question about the length parameter in the
: usbd_isochronous_setup().
What is the Error code reported ?
Has the camera been enabled ?
Yes, setup to QCIF endpoint 4, alternnate 3, using YUV420p, uncompressed.
Have sent a vendor command to start the camera capturing ?
I will verify this.: Is it necc. to set exactely the maximum packet size as reported in the
: endpoint descriptor ?
THX …bad technics!Currently Yes.
: Do I need to ‘re-hook’ the isochronous transfer urb in the completion
: callback ?Yes.
Generally a good way to handle an isoch camera would be :
(Your camera may vary)
- Allocate buffer space for 2 or more frames of video data;
- Allocate a bunch of urbs and buffers for urb data.
- Enable camera capture, compression …
- Enqueue all urbs ( This keeps Isoch transactions ready for device
which will improve the frame rate )- In the CBF copy the data from the completed urb into aproprate place
in the first buffer. Increment the buffer pointer and re-hook the
Urb.- When a video frame is complete switch to second buffer. Data from
further
completed urbs should be copied into second buffer. How you know
when a frame is complete is dependant on the camera. Could be short
transfers(less than endpoint size) or there could be a header at
the
beginning of each Isoch transfer that would give you this
information.- It might also be a good idea to keep counts of video frame data
produced by your driver and consumed by a client(display). If the
first
frame hasn’t been completely read yet and the second frame buffer
fills then you would re-use the second buffer and drop the frame.
: Is the length parameter in the usbd_urb_status() valid if an error is
: flagged in the urb status ?
: TIA, peterI don’t think you can count on the length being valid if there is
an error reported.
: “Hercot Jean-Yves” <> fa063821@skynet.be> > schrieb im Newsbeitrag
: news:b52p8o$mu2$> 1@inn.qnx.com> …
: > Hi,
:
: > I’am writing a class driver for a usb webcam. I have to read the
images
: > with isochronous transfers. Could someone tell me how isochronous
: transfers
: > work with Qnx (6.2)?
:
: > Thanx
:
:
Peter (nospam@nospam.at.all) wrote:
: THX Henry,
: the architecture is not my problem Henry. Its all done incl. double
: buffering, overlay support etc.
Ok.
: I allocate 10 urb and 10 data buffers in a ringbuffer and it works
: fine…but all callbacks
: end w/ a status of USBD_STATUS_CMP_ERR. The setup_isochronous() and
: usbd_io()
: does not return any error. My test equipment is a PCVC680k (Philips Vesta
: WebCam).
Is there no other error reported with USBD_STATUS_CMP_ERR. If you look
in the header file “/usr/include/sys/usbdi.h” you’ll see :
#define USBD_URB_STATUS_MASK 0xFF000000
#define USBD_STATUS_INPROG 0x00000000
#define USBD_STATUS_CMP 0x01000000
#define USBD_STATUS_CMP_ERR 0x02000000
#define USBD_STATUS_TIMEOUT 0x04000000
#define USBD_STATUS_ABORTED 0x08000000
#define USBD_USB_STATUS_MASK 0x00FFFFFF
#define USBD_STATUS_CRC_ERR 0x00000001
#define USBD_STATUS_BITSTUFFING 0x00000002
#define USBD_STATUS_TOGGLE_MISMATCH 0x00000003
#define USBD_STATUS_STALL 0x00000004
#define USBD_STATUS_DEV_NOANSWER 0x00000005
#define USBD_STATUS_PID_FAILURE 0x00000006
#define USBD_STATUS_BAD_PID 0x00000007
#define USBD_STATUS_DATA_OVERRUN 0x00000008
#define USBD_STATUS_DATA_UNDERRUN 0x00000009
#define USBD_STATUS_BUFFER_OVERRUN 0x0000000C
#define USBD_STATUS_BUFFER_UNDERRUN 0x0000000E
#define USBD_STATUS_NOT_ACCESSED 0x0000000F
You should see some some error code in the lower bits
of the status returned from usbd_urb_status as well
as USBD_STATUS_CMP_ERR
So if the device was stalling the Isoch request you
should see. USBD_STATUS_CMP_ERR | USBD_STATUS_STALL(0x02000004)
What chipset are running the camera on, UHCI or OHCI ?
Can you try running the USB stack with -vvvvv options
ie. deu-ohci -vvvvvv, or devu-uhci -vvvv
This will log information using slogger. Use sloginfo
to see if there are any obvious errors reported by
the USB stack.
: I will try to verify the enable/capture command again to be sure its
: working.
Ok.
Do you have a USB analyzer available ?
: TIA Henry for your help.
: cheers, peter
: > : RTP 620A
: > : I try the same here, but all isochronous transfers are marked as
: complete
: > : with error USBD_STATUS_CMP_ERR.
: > : I also have a question about the length parameter in the
: > : usbd_isochronous_setup().
: >
: >
: > What is the Error code reported ?
: > Has the camera been enabled ?
: Yes, setup to QCIF endpoint 4, alternnate 3, using YUV420p, uncompressed.
: > Have sent a vendor command to start the camera capturing ?
: I will verify this.
: >
: > : Is it necc. to set exactely the maximum packet size as reported in the
: > : endpoint descriptor ?
: THX …bad technics!
: >
: > Currently Yes.
: >
: >
: > : Do I need to ‘re-hook’ the isochronous transfer urb in the completion
: > : callback ?
: >
: > Yes.
: >
: > Generally a good way to handle an isoch camera would be :
: > (Your camera may vary)
: >
: > 1. Allocate buffer space for 2 or more frames of video data;
: > 2. Allocate a bunch of urbs and buffers for urb data.
: > 3. Enable camera capture, compression …
: > 4. Enqueue all urbs ( This keeps Isoch transactions ready for device
: > which will improve the frame rate )
: > 5. In the CBF copy the data from the completed urb into aproprate place
: > in the first buffer. Increment the buffer pointer and re-hook the
: Urb.
: > 6. When a video frame is complete switch to second buffer. Data from
: further
: > completed urbs should be copied into second buffer. How you know
: > when a frame is complete is dependant on the camera. Could be short
: > transfers(less than endpoint size) or there could be a header at
: the
: > beginning of each Isoch transfer that would give you this
: information.
: > 7. It might also be a good idea to keep counts of video frame data
: > produced by your driver and consumed by a client(display). If the
: first
: > frame hasn’t been completely read yet and the second frame buffer
: > fills then you would re-use the second buffer and drop the frame.
: >
: >
: > : Is the length parameter in the usbd_urb_status() valid if an error is
: > : flagged in the urb status ?
: > : TIA, peter
: >
: > I don’t think you can count on the length being valid if there is
: > an error reported.
: >
: >
: > : “Hercot Jean-Yves” <fa063821@skynet.be> schrieb im Newsbeitrag
: > : news:b52p8o$mu2$1@inn.qnx.com…
: > : > Hi,
: > : >
: > : > I’am writing a class driver for a usb webcam. I have to read the
: images
: > : > with isochronous transfers. Could someone tell me how isochronous
: > : transfers
: > : > work with Qnx (6.2)?
: > : >
: > : > Thanx
: > : >
: > : >
: >
: THX Henry,
: the architecture is not my problem Henry. Its all done incl. double
: buffering, overlay support etc.Ok.
: I allocate 10 urb and 10 data buffers in a ringbuffer and it works
: fine…but all callbacks
: end w/ a status of USBD_STATUS_CMP_ERR. The setup_isochronous() and
: usbd_io()
: does not return any error. My test equipment is a PCVC680k (Philips
Vesta
: WebCam).Is there no other error reported with USBD_STATUS_CMP_ERR. If you look
in the header file “/usr/include/sys/usbdi.h” you’ll see :
No Henry only the status 0x02000000)
#define USBD_URB_STATUS_MASK 0xFF000000
…snip…
You should see some some error code in the lower bits
of the status returned from usbd_urb_status as well
as USBD_STATUS_CMP_ERRSo if the device was stalling the Isoch request you
should see. USBD_STATUS_CMP_ERR | USBD_STATUS_STALL(0x02000004)
No stall condition Henry, this is catched in the next line after
usbd_urb_status(…)
What chipset are running the camera on, UHCI or OHCI ?
UHCI
Can you try running the USB stack with -vvvvv options
ie. deu-ohci -vvvvvv, or devu-uhci -vvvvThis will log information using slogger. Use sloginfo
to see if there are any obvious errors reported by
the USB stack.
ok here it is:
Time Sev Major Minor Args
…
Mar 19 15:30:15 2 12 0 udi_enumerate 806f014
Mar 19 15:30:16 2 12 0 CLASS_EnumerateDevice: parent 0, port 1,
speed 0
Mar 19 15:30:16 2 12 0 CLASS_EnumerateDevice: Get device
descriptor
Mar 19 15:30:16 2 12 0 CLASS_EnumerateDevice: Set address 1
Mar 19 15:30:16 2 12 0 CLASS_EnumerateDevice: Get full device
descriptor
Mar 19 15:30:16 2 12 0 CLASS_EnumerateDeviceConfiguration: Get
config descriptor
Mar 19 15:30:16 2 12 0 CLASS_EnumerateDeviceConfiguration: Get
full config descriptor
Mar 19 15:30:16 2 12 0 USB_SelectConfiguration: Set config devno
1, cfg 1
Mar 19 15:30:16 2 12 0 udi_in_out: devno 1 inserted
Mar 19 15:31:32 2 12 0 udi_enumerate 806f0a4
Mar 19 15:31:32 2 12 0 udi_in_out: devno 1 inserted
Mar 19 15:31:46 2 12 0 udi_select_interface: devno 1
Mar 19 15:31:46 2 12 0 USB_SelectInterface: Select iface devno 1,
ifc 0, alt 3
Mar 19 15:31:48 2 12 0 udi_select_interface: devno 1
Mar 19 15:31:48 2 12 0 USB_SelectInterface: Select iface devno 1,
ifc 0, alt 0
Mar 19 15:31:49 2 12 0 USB_SelectConfiguration: Set config devno
1, cfg 1
…
from here my driver returns continously 0x0200000 status to stderr
: I will try to verify the enable/capture command again to be sure its
: working.Ok.
Done.
BTW: I reuse the urb and the data buffer each time the CBF is invoked.
In case of a stall i reset the pipe and return w/o rehook the
isochronous…
but this never happens.
Is it necc. to reset the urb for reuse if there is an error marked in the
status?
If I have a open pipe to the data isoch-endpoint, is it necc. to switch to
this interface
explizit bevor starting an isochronous_setup() with this pipe?
Ahhhh and…this webcam works w/ w2k, w98 and linux on the same hardware.
Do you have a USB analyzer available ?
nope …ehhhhh my wet finger
TIA Henry
cheers, peter
: TIA Henry for your help.
: cheers, peter
: > : RTP 620A
: > : I try the same here, but all isochronous transfers are marked as
: complete
: > : with error USBD_STATUS_CMP_ERR.
: > : I also have a question about the length parameter in the
: > : usbd_isochronous_setup().
:
:
: > What is the Error code reported ?
: > Has the camera been enabled ?
: Yes, setup to QCIF endpoint 4, alternnate 3, using YUV420p,
uncompressed.
: > Have sent a vendor command to start the camera capturing ?
: I will verify this.
:
: > : Is it necc. to set exactely the maximum packet size as reported in
the
: > : endpoint descriptor ?
: THX …bad technics!
:
: > Currently Yes.
:
:
: > : Do I need to ‘re-hook’ the isochronous transfer urb in the
completion
: > : callback ?
:
: > Yes.
:
: > Generally a good way to handle an isoch camera would be :
: > (Your camera may vary)
:
: > 1. Allocate buffer space for 2 or more frames of video data;
: > 2. Allocate a bunch of urbs and buffers for urb data.
: > 3. Enable camera capture, compression …
: > 4. Enqueue all urbs ( This keeps Isoch transactions ready for device
: > which will improve the frame rate )
: > 5. In the CBF copy the data from the completed urb into aproprate
place
: > in the first buffer. Increment the buffer pointer and re-hook
the
: Urb.
: > 6. When a video frame is complete switch to second buffer. Data
from
: further
: > completed urbs should be copied into second buffer. How you
know
: > when a frame is complete is dependant on the camera. Could be
short
: > transfers(less than endpoint size) or there could be a header
at
: the
: > beginning of each Isoch transfer that would give you this
: information.
: > 7. It might also be a good idea to keep counts of video frame data
: > produced by your driver and consumed by a client(display). If
the
: first
: > frame hasn’t been completely read yet and the second frame
buffer
: > fills then you would re-use the second buffer and drop the
frame.
:
:
: > : Is the length parameter in the usbd_urb_status() valid if an error
is
: > : flagged in the urb status ?
: > : TIA, peter
:
: > I don’t think you can count on the length being valid if there is
: > an error reported.
:
:
: > : “Hercot Jean-Yves” <> fa063821@skynet.be> > schrieb im Newsbeitrag
: > : news:b52p8o$mu2$> 1@inn.qnx.com> …
: > : > Hi,
: > :
: > : > I’am writing a class driver for a usb webcam. I have to read the
: images
: > : > with isochronous transfers. Could someone tell me how isochronous
: > : transfers
: > : > work with Qnx (6.2)?
: > :
: > : > Thanx
: > :
: > :
:
Peter (nospam@nospam.at.all) wrote:
: > : THX Henry,
: > : the architecture is not my problem Henry. Its all done incl. double
: > : buffering, overlay support etc.
: >
: > Ok.
: >
: > : I allocate 10 urb and 10 data buffers in a ringbuffer and it works
: > : fine…but all callbacks
: > : end w/ a status of USBD_STATUS_CMP_ERR. The setup_isochronous() and
: > : usbd_io()
: > : does not return any error. My test equipment is a PCVC680k (Philips
: Vesta
: > : WebCam).
: >
: > Is there no other error reported with USBD_STATUS_CMP_ERR. If you look
: > in the header file “/usr/include/sys/usbdi.h” you’ll see :
: No Henry only the status 0x02000000)
: >
: > #define USBD_URB_STATUS_MASK 0xFF000000
: …snip…
: > You should see some some error code in the lower bits
: > of the status returned from usbd_urb_status as well
: > as USBD_STATUS_CMP_ERR
: >
: > So if the device was stalling the Isoch request you
: > should see. USBD_STATUS_CMP_ERR | USBD_STATUS_STALL(0x02000004)
: No stall condition Henry, this is catched in the next line after
: usbd_urb_status(…)
: >
: > What chipset are running the camera on, UHCI or OHCI ?
: UHCI
: > Can you try running the USB stack with -vvvvv options
: > ie. deu-ohci -vvvvvv, or devu-uhci -vvvv
: >
: > This will log information using slogger. Use sloginfo
: > to see if there are any obvious errors reported by
: > the USB stack.
: ok here it is:
: Time Sev Major Minor Args
: …
: Mar 19 15:30:15 2 12 0 udi_enumerate 806f014
: Mar 19 15:30:16 2 12 0 CLASS_EnumerateDevice: parent 0, port 1,
: speed 0
: Mar 19 15:30:16 2 12 0 CLASS_EnumerateDevice: Get device
: descriptor
: Mar 19 15:30:16 2 12 0 CLASS_EnumerateDevice: Set address 1
: Mar 19 15:30:16 2 12 0 CLASS_EnumerateDevice: Get full device
: descriptor
: Mar 19 15:30:16 2 12 0 CLASS_EnumerateDeviceConfiguration: Get
: config descriptor
: Mar 19 15:30:16 2 12 0 CLASS_EnumerateDeviceConfiguration: Get
: full config descriptor
: Mar 19 15:30:16 2 12 0 USB_SelectConfiguration: Set config devno
: 1, cfg 1
: Mar 19 15:30:16 2 12 0 udi_in_out: devno 1 inserted
: Mar 19 15:31:32 2 12 0 udi_enumerate 806f0a4
: Mar 19 15:31:32 2 12 0 udi_in_out: devno 1 inserted
: Mar 19 15:31:46 2 12 0 udi_select_interface: devno 1
: Mar 19 15:31:46 2 12 0 USB_SelectInterface: Select iface devno 1,
: ifc 0, alt 3
: Mar 19 15:31:48 2 12 0 udi_select_interface: devno 1
: Mar 19 15:31:48 2 12 0 USB_SelectInterface: Select iface devno 1,
: ifc 0, alt 0
: Mar 19 15:31:49 2 12 0 USB_SelectConfiguration: Set config devno
: 1, cfg 1
: …
: from here my driver returns continously 0x0200000 status to stderr
: >
: > : I will try to verify the enable/capture command again to be sure its
: > : working.
: >
: > Ok.
: Done.
: BTW: I reuse the urb and the data buffer each time the CBF is invoked.
: In case of a stall i reset the pipe and return w/o rehook the
: isochronous…
: but this never happens.
could you post some code snippets of where you initially setup the isoch
urbs and where you re-hook them in your callback function?
: Is it necc. to reset the urb for reuse if there is an error marked in the
: status?
If an error is reported or not you, you should do a
usbd_setup_isochronous() for the urb before it gets re-hooked with
usbd_io().
: If I have a open pipe to the data isoch-endpoint, is it necc. to switch to
: this interface
: explizit bevor starting an isochronous_setup() with this pipe?
I’m not sure I understand this question.
If your device as multiple interfaces or alternates then you should
issue a usbd_select_interface() command to select the interface for which
the endpoints you are using.
: Ahhhh and…this webcam works w/ w2k, w98 and linux on the same hardware.
: >
: > Do you have a USB analyzer available ?
: nope …ehhhhh my wet finger
: TIA Henry
: cheers, peter
: >
: >
: >
: > : TIA Henry for your help.
: > : cheers, peter
: > : > : RTP 620A
: > : > : I try the same here, but all isochronous transfers are marked as
: > : complete
: > : > : with error USBD_STATUS_CMP_ERR.
: > : > : I also have a question about the length parameter in the
: > : > : usbd_isochronous_setup().
: > : >
: > : >
: > : > What is the Error code reported ?
: > : > Has the camera been enabled ?
: > : Yes, setup to QCIF endpoint 4, alternnate 3, using YUV420p,
: uncompressed.
: > : > Have sent a vendor command to start the camera capturing ?
: > : I will verify this.
: > : >
: > : > : Is it necc. to set exactely the maximum packet size as reported in
: the
: > : > : endpoint descriptor ?
: > : THX …bad technics!
: > : >
: > : > Currently Yes.
: > : >
: > : >
: > : > : Do I need to ‘re-hook’ the isochronous transfer urb in the
: completion
: > : > : callback ?
: > : >
: > : > Yes.
: > : >
: > : > Generally a good way to handle an isoch camera would be :
: > : > (Your camera may vary)
: > : >
: > : > 1. Allocate buffer space for 2 or more frames of video data;
: > : > 2. Allocate a bunch of urbs and buffers for urb data.
: > : > 3. Enable camera capture, compression …
: > : > 4. Enqueue all urbs ( This keeps Isoch transactions ready for device
: > : > which will improve the frame rate )
: > : > 5. In the CBF copy the data from the completed urb into aproprate
: place
: > : > in the first buffer. Increment the buffer pointer and re-hook
: the
: > : Urb.
: > : > 6. When a video frame is complete switch to second buffer. Data
: from
: > : further
: > : > completed urbs should be copied into second buffer. How you
: know
: > : > when a frame is complete is dependant on the camera. Could be
: short
: > : > transfers(less than endpoint size) or there could be a header
: at
: > : the
: > : > beginning of each Isoch transfer that would give you this
: > : information.
: > : > 7. It might also be a good idea to keep counts of video frame data
: > : > produced by your driver and consumed by a client(display). If
: the
: > : first
: > : > frame hasn’t been completely read yet and the second frame
: buffer
: > : > fills then you would re-use the second buffer and drop the
: frame.
: > : >
: > : >
: > : > : Is the length parameter in the usbd_urb_status() valid if an error
: is
: > : > : flagged in the urb status ?
: > : > : TIA, peter
: > : >
: > : > I don’t think you can count on the length being valid if there is
: > : > an error reported.
: > : >
: > : >
: > : > : “Hercot Jean-Yves” <fa063821@skynet.be> schrieb im Newsbeitrag
: > : > : news:b52p8o$mu2$1@inn.qnx.com…
: > : > : > Hi,
: > : > : >
: > : > : > I’am writing a class driver for a usb webcam. I have to read the
: > : images
: > : > : > with isochronous transfers. Could someone tell me how isochronous
: > : > : transfers
: > : > : > work with Qnx (6.2)?
: > : > : >
: > : > : > Thanx
: > : > : >
: > : > : >
: > : >
: >
: >
INIT:
for (i = 0; i < MAX_ISO_BUFS; i++)
{
urb = pdev->sbuf_.urb;
usbd_setup_isochronous(urb, URB_ISOCH_ASAP, 0, pdev->sbuf.data,
pdev->vmax_packet_size);
usbd_io(urb, pdev->ep_iso_pipe, pwc_isoc_handler, pdev->sbuf.data,
USBD_TIME_INFINITY);
}
// callback
static void
pwc_isoc_handler(struct usbd_urb *urb, struct usbd_pipe *pipe, void *hdl) {
usbd_urb_status( urb, &fst, &flen );
if( ( fst & USBD_URB_STATUS_MASK ) != USBD_STATUS_CMP )
{
// check for a stall condition and clear it
if( ( fst & USBD_USB_STATUS_MASK ) == USBD_STATUS_STALL )
{
usbd_reset_pipe( pipe );
if( cam.verbose )
Trace(“pwc_isoc_handler: STALL ustatus %x, %d”, fst, flen);
}
if( cam.verbose )
Trace(“pwc_isoc_handler: ustatus %x, %d”, fst, flen );
return;
}
…
usbd_setup_isochronous(urb, URB_ISOCH_ASAP, 0, hdl, pdev->vmax_packet_size);
usbd_io(urb, pdev->ep_iso_pipe, pwc_isoc_handler, hdl, USBD_TIME_INFINITY);
}_
Peter (nospam@nospam.at.all) wrote:
: INIT:
: for (i = 0; i < MAX_ISO_BUFS; i++)
: {
: urb = pdev->sbuf_.urb;
: usbd_setup_isochronous(urb, URB_ISOCH_ASAP, 0, pdev->sbuf.data,
: pdev->vmax_packet_size);
: usbd_io(urb, pdev->ep_iso_pipe, pwc_isoc_handler, pdev->sbuf.data,
: USBD_TIME_INFINITY);
: }
Try setting the direction flag URB_DIR_IN
: // callback
: static void
: pwc_isoc_handler(struct usbd_urb *urb, struct usbd_pipe *pipe, void *hdl) {
: usbd_urb_status( urb, &fst, &flen );
: if( ( fst & USBD_URB_STATUS_MASK ) != USBD_STATUS_CMP )
: {
: // check for a stall condition and clear it
: if( ( fst & USBD_USB_STATUS_MASK ) == USBD_STATUS_STALL )
: {
: usbd_reset_pipe( pipe );
: if( cam.verbose )
: Trace(“pwc_isoc_handler: STALL ustatus %x, %d”, fst, flen);
: }
: if( cam.verbose )
: Trace(“pwc_isoc_handler: ustatus %x, %d”, fst, flen );
: return;
: }
: …
: usbd_setup_isochronous(urb, URB_ISOCH_ASAP, 0, hdl, pdev->vmax_packet_size);
: usbd_io(urb, pdev->ep_iso_pipe, pwc_isoc_handler, hdl, USBD_TIME_INFINITY);
: }_
Peter (nospam@nospam.at.all) wrote:
: Ohhhh, yeah…now its working.
Thats good to hear
: damn I was looking over the code again and again and the doc says
: ‘one of these flags’…but of course, the setup needs a direction.
: Henry, thank you very much for your help, you are my hero
: cheers, peter
Your welcome…
I’m glad it didn’t turn out to be anything too serious
: “Henry Van Dyke” <henry@93.com> schrieb im Newsbeitrag
: news:b5a8v9$l6k$1@nntp.qnx.com…
: > Peter (nospam@nospam.at.all) wrote:
: > : INIT:
: > : for (i = 0; i < MAX_ISO_BUFS; i++)
: > : {
: > : urb = pdev->sbuf_.urb;
: > : usbd_setup_isochronous(urb, URB_ISOCH_ASAP, 0, pdev->sbuf.data,
: > : pdev->vmax_packet_size);
: > : usbd_io(urb, pdev->ep_iso_pipe, pwc_isoc_handler, pdev->sbuf.data,
: > : USBD_TIME_INFINITY);
: > : }
: >
: > Try setting the direction flag URB_DIR_IN
: >
: >
: >
: > : // callback
: > : static void
: > : pwc_isoc_handler(struct usbd_urb *urb, struct usbd_pipe *pipe, void
: *hdl) {
: > : usbd_urb_status( urb, &fst, &flen );
: > : if( ( fst & USBD_URB_STATUS_MASK ) != USBD_STATUS_CMP )
: > : {
: > : // check for a stall condition and clear it
: > : if( ( fst & USBD_USB_STATUS_MASK ) == USBD_STATUS_STALL )
: > : {
: > : usbd_reset_pipe( pipe );
: > : if( cam.verbose )
: > : Trace(“pwc_isoc_handler: STALL ustatus %x, %d”, fst, flen);
: > : }
: > : if( cam.verbose )
: > : Trace(“pwc_isoc_handler: ustatus %x, %d”, fst, flen );
: > : return;
: > : }
: > : …
: > : usbd_setup_isochronous(urb, URB_ISOCH_ASAP, 0, hdl,
: pdev->vmax_packet_size);
: > : usbd_io(urb, pdev->ep_iso_pipe, pwc_isoc_handler, hdl,
: USBD_TIME_INFINITY);
: > : }
: >
: >_
Ohhhh, yeah…now its working.
damn I was looking over the code again and again and the doc says
‘one of these flags’…but of course, the setup needs a direction.
Henry, thank you very much for your help, you are my hero
cheers, peter
“Henry Van Dyke” <henry@93.com> schrieb im Newsbeitrag
news:b5a8v9$l6k$1@nntp.qnx.com…
Peter (> nospam@nospam.at.all> ) wrote:
: INIT:
: for (i = 0; i < MAX_ISO_BUFS; i++)
: {
: urb = pdev->sbuf> .urb;
: usbd_setup_isochronous(urb, URB_ISOCH_ASAP, 0, pdev->sbuf> .data,
: pdev->vmax_packet_size);
: usbd_io(urb, pdev->ep_iso_pipe, pwc_isoc_handler, pdev->sbuf> .data,
: USBD_TIME_INFINITY);
: }
Try setting the direction flag URB_DIR_IN
: // callback
: static void
: pwc_isoc_handler(struct usbd_urb *urb, struct usbd_pipe *pipe, void
*hdl) {
: usbd_urb_status( urb, &fst, &flen );
: if( ( fst & USBD_URB_STATUS_MASK ) != USBD_STATUS_CMP )
: {
: // check for a stall condition and clear it
: if( ( fst & USBD_USB_STATUS_MASK ) == USBD_STATUS_STALL )
: {
: usbd_reset_pipe( pipe );
: if( cam.verbose )
: Trace(“pwc_isoc_handler: STALL ustatus %x, %d”, fst, flen);
: }
: if( cam.verbose )
: Trace(“pwc_isoc_handler: ustatus %x, %d”, fst, flen );
: return;
: }
: …
: usbd_setup_isochronous(urb, URB_ISOCH_ASAP, 0, hdl,
pdev->vmax_packet_size);
: usbd_io(urb, pdev->ep_iso_pipe, pwc_isoc_handler, hdl,
USBD_TIME_INFINITY);
: }
Henry > I’ll test all you have said about the isochronous transfers. I’ll
post my question here if it doesn’t work…
Thanx
“Henry Van Dyke” <henry@93.com> a écrit dans le message news:
b5acdd$ni0$1@nntp.qnx.com…
Peter (> nospam@nospam.at.all> ) wrote:
: Ohhhh, yeah…now its working.Thats good to hear
: damn I was looking over the code again and again and the doc says
: ‘one of these flags’…but of course, the setup needs a direction.
: Henry, thank you very much for your help, you are my hero >
: cheers, peterYour welcome…
I’m glad it didn’t turn out to be anything too serious >
: “Henry Van Dyke” <> henry@93.com> > schrieb im Newsbeitrag
: news:b5a8v9$l6k$> 1@nntp.qnx.com> …
: > Peter (> nospam@nospam.at.all> ) wrote:
: > : INIT:
: > : for (i = 0; i < MAX_ISO_BUFS; i++)
: > : {
: > : urb = pdev->sbuf> .urb;
: > : usbd_setup_isochronous(urb, URB_ISOCH_ASAP, 0, pdev->sbuf> .data,
: > : pdev->vmax_packet_size);
: > : usbd_io(urb, pdev->ep_iso_pipe, pwc_isoc_handler,
pdev->sbuf> .data,
: > : USBD_TIME_INFINITY);
: > : }
:
: > Try setting the direction flag URB_DIR_IN
:
:
:
: > : // callback
: > : static void
: > : pwc_isoc_handler(struct usbd_urb *urb, struct usbd_pipe *pipe, void
: *hdl) {
: > : usbd_urb_status( urb, &fst, &flen );
: > : if( ( fst & USBD_URB_STATUS_MASK ) != USBD_STATUS_CMP )
: > : {
: > : // check for a stall condition and clear it
: > : if( ( fst & USBD_USB_STATUS_MASK ) == USBD_STATUS_STALL )
: > : {
: > : usbd_reset_pipe( pipe );
: > : if( cam.verbose )
: > : Trace(“pwc_isoc_handler: STALL ustatus %x, %d”, fst, flen);
: > : }
: > : if( cam.verbose )
: > : Trace(“pwc_isoc_handler: ustatus %x, %d”, fst, flen );
: > : return;
: > : }
: > : …
: > : usbd_setup_isochronous(urb, URB_ISOCH_ASAP, 0, hdl,
: pdev->vmax_packet_size);
: > : usbd_io(urb, pdev->ep_iso_pipe, pwc_isoc_handler, hdl,
: USBD_TIME_INFINITY);
: > : }
:
:
I have tried and it doesn’t work .
I have checked my code with Peter’s one and it seems similar. When I setup
an isochronous I receive the callback (even if I don’t enable Isoch
transfers on the cam) but the urb_status is set to 0x02040932.
The results of usb -vvv seems correct and the cam works well under windows
on the same computer.
I have noticed that the value returned by usbd_pipe_endpoint is 0 for the
control pipe and 129 for the Isoch/in pipe (it should be 1). It also
returns 129 with the other alternate settings.
Help me!!! :-p
“Hercot Jean-Yves” <fa063821@skynet.be> a écrit dans le message news:
b5abul$f7k$1@inn.qnx.com…
Henry > I’ll test all you have said about the isochronous transfers. I’ll
post my question here if it doesn’t work… >Thanx
“Henry Van Dyke” <> henry@93.com> > a écrit dans le message news:
b5acdd$ni0$> 1@nntp.qnx.com> …
Peter (> nospam@nospam.at.all> ) wrote:
: Ohhhh, yeah…now its working.Thats good to hear
: damn I was looking over the code again and again and the doc says
: ‘one of these flags’…but of course, the setup needs a direction.
: Henry, thank you very much for your help, you are my hero >
: cheers, peterYour welcome…
I’m glad it didn’t turn out to be anything too serious >
: “Henry Van Dyke” <> henry@93.com> > schrieb im Newsbeitrag
: news:b5a8v9$l6k$> 1@nntp.qnx.com> …
: > Peter (> nospam@nospam.at.all> ) wrote:
: > : INIT:
: > : for (i = 0; i < MAX_ISO_BUFS; i++)
: > : {
: > : urb = pdev->sbuf> .urb;
: > : usbd_setup_isochronous(urb, URB_ISOCH_ASAP, 0, pdev->sbuf> .data,
: > : pdev->vmax_packet_size);
: > : usbd_io(urb, pdev->ep_iso_pipe, pwc_isoc_handler,
pdev->sbuf> .data,
: > : USBD_TIME_INFINITY);
: > : }
:
: > Try setting the direction flag URB_DIR_IN
:
:
:
: > : // callback
: > : static void
: > : pwc_isoc_handler(struct usbd_urb *urb, struct usbd_pipe *pipe,
void
: *hdl) {
: > : usbd_urb_status( urb, &fst, &flen );
: > : if( ( fst & USBD_URB_STATUS_MASK ) != USBD_STATUS_CMP )
: > : {
: > : // check for a stall condition and clear it
: > : if( ( fst & USBD_USB_STATUS_MASK ) == USBD_STATUS_STALL )
: > : {
: > : usbd_reset_pipe( pipe );
: > : if( cam.verbose )
: > : Trace(“pwc_isoc_handler: STALL ustatus %x, %d”, fst, flen);
: > : }
: > : if( cam.verbose )
: > : Trace(“pwc_isoc_handler: ustatus %x, %d”, fst, flen );
: > : return;
: > : }
: > : …
: > : usbd_setup_isochronous(urb, URB_ISOCH_ASAP, 0, hdl,
: pdev->vmax_packet_size);
: > : usbd_io(urb, pdev->ep_iso_pipe, pwc_isoc_handler, hdl,
: USBD_TIME_INFINITY);
: > : }
:
:
\
Hercot Jean-Yves (fa063821@skynet.be) wrote:
: I have tried and it doesn’t work .
: I have checked my code with Peter’s one and it seems similar. When I setup
: an isochronous I receive the callback (even if I don’t enable Isoch
: transfers on the cam) but the urb_status is set to 0x02040932.
This doesn’t like a valid urb_status at all.
What USB controller chip are you running on.
Could you post code snippets of where you are
enqueuing the urbs ?
: The results of usb -vvv seems correct and the cam works well under windows
: on the same computer.
: I have noticed that the value returned by usbd_pipe_endpoint is 0 for the
: control pipe and 129 for the Isoch/in pipe (it should be 1). It also
: returns 129 with the other alternate settings.
129 = 0x81
upper 4bits give direction(In) and lower 4 bits are the endpoint number.
: Help me!!! :-p
: “Hercot Jean-Yves” <fa063821@skynet.be> a écrit dans le message news:
: b5abul$f7k$1@inn.qnx.com…
: > Henry > I’ll test all you have said about the isochronous transfers. I’ll
: > post my question here if it doesn’t work…
: >
: > Thanx
: >
: > “Henry Van Dyke” <henry@93.com> a écrit dans le message news:
: > b5acdd$ni0$1@nntp.qnx.com…
: > > Peter (nospam@nospam.at.all) wrote:
: > > : Ohhhh, yeah…now its working.
: > >
: > > Thats good to hear
: > >
: > > : damn I was looking over the code again and again and the doc says
: > > : ‘one of these flags’…but of course, the setup needs a direction.
: > > : Henry, thank you very much for your help, you are my hero
: > > : cheers, peter
: > >
: > > Your welcome…
: > > I’m glad it didn’t turn out to be anything too serious
: > >
: > >
: > >
: > > : “Henry Van Dyke” <henry@93.com> schrieb im Newsbeitrag
: > > : news:b5a8v9$l6k$1@nntp.qnx.com…
: > > : > Peter (nospam@nospam.at.all) wrote:
: > > : > : INIT:
: > > : > : for (i = 0; i < MAX_ISO_BUFS; i++)
: > > : > : {
: > > : > : urb = pdev->sbuf_.urb;
: > > : > : usbd_setup_isochronous(urb, URB_ISOCH_ASAP, 0, pdev->sbuf.data,
: > > : > : pdev->vmax_packet_size);
: > > : > : usbd_io(urb, pdev->ep_iso_pipe, pwc_isoc_handler,
: > pdev->sbuf.data,
: > > : > : USBD_TIME_INFINITY);
: > > : > : }
: > > : >
: > > : > Try setting the direction flag URB_DIR_IN
: > > : >
: > > : >
: > > : >
: > > : > : // callback
: > > : > : static void
: > > : > : pwc_isoc_handler(struct usbd_urb *urb, struct usbd_pipe *pipe,
: void
: > > : *hdl) {
: > > : > : usbd_urb_status( urb, &fst, &flen );
: > > : > : if( ( fst & USBD_URB_STATUS_MASK ) != USBD_STATUS_CMP )
: > > : > : {
: > > : > : // check for a stall condition and clear it
: > > : > : if( ( fst & USBD_USB_STATUS_MASK ) == USBD_STATUS_STALL )
: > > : > : {
: > > : > : usbd_reset_pipe( pipe );
: > > : > : if( cam.verbose )
: > > : > : Trace(“pwc_isoc_handler: STALL ustatus %x, %d”, fst, flen);
: > > : > : }
: > > : > : if( cam.verbose )
: > > : > : Trace(“pwc_isoc_handler: ustatus %x, %d”, fst, flen );
: > > : > : return;
: > > : > : }
: > > : > : …
: > > : > : usbd_setup_isochronous(urb, URB_ISOCH_ASAP, 0, hdl,
: > > : pdev->vmax_packet_size);
: > > : > : usbd_io(urb, pdev->ep_iso_pipe, pwc_isoc_handler, hdl,
: > > : USBD_TIME_INFINITY);
: > > : > : }
: > > : >
: > > : >
: > >
: > >
: >
: >_
I’ll post the snippets and informations when I’ll come back home (around
5.30 pm)…
“Henry Van Dyke” <henry@93.com> a écrit dans le message de news:
b5aoep$1e6$1@nntp.qnx.com…
Hercot Jean-Yves (> fa063821@skynet.be> ) wrote:
: I have tried and it doesn’t work >> .
: I have checked my code with Peter’s one and it seems similar. When I
setup
: an isochronous I receive the callback (even if I don’t enable Isoch
: transfers on the cam) but the urb_status is set to 0x02040932.This doesn’t like a valid urb_status at all.
What USB controller chip are you running on.
Could you post code snippets of where you are
enqueuing the urbs ?: The results of usb -vvv seems correct and the cam works well under
windows
: on the same computer.: I have noticed that the value returned by usbd_pipe_endpoint is 0 for
the
: control pipe and 129 for the Isoch/in pipe (it should be 1). It also
: returns 129 with the other alternate settings.129 = 0x81
upper 4bits give direction(In) and lower 4 bits are the endpoint number.
: Help me!!! :-p: “Hercot Jean-Yves” <> fa063821@skynet.be> > a écrit dans le message news:
: b5abul$f7k$> 1@inn.qnx.com> …
: > Henry > I’ll test all you have said about the isochronous transfers.
I’ll
: > post my question here if it doesn’t work… >
:
: > Thanx
:
: > “Henry Van Dyke” <> henry@93.com> > a écrit dans le message news:
: > b5acdd$ni0$> 1@nntp.qnx.com> …
: > > Peter (> nospam@nospam.at.all> ) wrote:
: > > : Ohhhh, yeah…now its working.
:
: > > Thats good to hear
:
: > > : damn I was looking over the code again and again and the doc says
: > > : ‘one of these flags’…but of course, the setup needs a
direction.
: > > : Henry, thank you very much for your help, you are my hero >
: > > : cheers, peter
:
: > > Your welcome…
: > > I’m glad it didn’t turn out to be anything too serious >
:
:
:
: > > : “Henry Van Dyke” <> henry@93.com> > schrieb im Newsbeitrag
: > > : news:b5a8v9$l6k$> 1@nntp.qnx.com> …
: > > : > Peter (> nospam@nospam.at.all> ) wrote:
: > > : > : INIT:
: > > : > : for (i = 0; i < MAX_ISO_BUFS; i++)
: > > : > : {
: > > : > : urb = pdev->sbuf> .urb;
: > > : > : usbd_setup_isochronous(urb, URB_ISOCH_ASAP, 0,
pdev->sbuf> .data,
: > > : > : pdev->vmax_packet_size);
: > > : > : usbd_io(urb, pdev->ep_iso_pipe, pwc_isoc_handler,
: > pdev->sbuf> .data,
: > > : > : USBD_TIME_INFINITY);
: > > : > : }
: > > :
: > > : > Try setting the direction flag URB_DIR_IN
: > > :
: > > :
: > > :
: > > : > : // callback
: > > : > : static void
: > > : > : pwc_isoc_handler(struct usbd_urb *urb, struct usbd_pipe *pipe,
: void
: > > : *hdl) {
: > > : > : usbd_urb_status( urb, &fst, &flen );
: > > : > : if( ( fst & USBD_URB_STATUS_MASK ) != USBD_STATUS_CMP )
: > > : > : {
: > > : > : // check for a stall condition and clear it
: > > : > : if( ( fst & USBD_USB_STATUS_MASK ) == USBD_STATUS_STALL )
: > > : > : {
: > > : > : usbd_reset_pipe( pipe );
: > > : > : if( cam.verbose )
: > > : > : Trace(“pwc_isoc_handler: STALL ustatus %x, %d”, fst, flen);
: > > : > : }
: > > : > : if( cam.verbose )
: > > : > : Trace(“pwc_isoc_handler: ustatus %x, %d”, fst, flen );
: > > : > : return;
: > > : > : }
: > > : > : …
: > > : > : usbd_setup_isochronous(urb, URB_ISOCH_ASAP, 0, hdl,
: > > : pdev->vmax_packet_size);
: > > : > : usbd_io(urb, pdev->ep_iso_pipe, pwc_isoc_handler, hdl,
: > > : USBD_TIME_INFINITY);
: > > : > : }
: > > :
: > > :
:
:
:
:
have a look to the mouse_parse_descriptors() in the DDK mouse example.
to get/test the endpoint number use ep = bEndpointAddress & 0xF.
“Hercot Jean-Yves” <fa063821@skynet.be> schrieb im Newsbeitrag
news:b5ajj2$n6o$1@inn.qnx.com…
I have tried and it doesn’t work >
> .
I have checked my code with Peter’s one and it seems similar. When I
setup
an isochronous I receive the callback (even if I don’t enable Isoch
transfers on the cam) but the urb_status is set to 0x02040932.The results of usb -vvv seems correct and the cam works well under windows
on the same computer.I have noticed that the value returned by usbd_pipe_endpoint is 0 for the
control pipe and 129 for the Isoch/in pipe (it should be 1). It also
returns 129 with the other alternate settings.Help me!!! :-p
“Hercot Jean-Yves” <> fa063821@skynet.be> > a écrit dans le message news:
b5abul$f7k$> 1@inn.qnx.com> …
Henry > I’ll test all you have said about the isochronous transfers.
I’ll
post my question here if it doesn’t work… >Thanx
“Henry Van Dyke” <> henry@93.com> > a écrit dans le message news:
b5acdd$ni0$> 1@nntp.qnx.com> …
Peter (> nospam@nospam.at.all> ) wrote:
: Ohhhh, yeah…now its working.Thats good to hear
: damn I was looking over the code again and again and the doc says
: ‘one of these flags’…but of course, the setup needs a direction.
: Henry, thank you very much for your help, you are my hero >
: cheers, peterYour welcome…
I’m glad it didn’t turn out to be anything too serious >
: “Henry Van Dyke” <> henry@93.com> > schrieb im Newsbeitrag
: news:b5a8v9$l6k$> 1@nntp.qnx.com> …
: > Peter (> nospam@nospam.at.all> ) wrote:
: > : INIT:
: > : for (i = 0; i < MAX_ISO_BUFS; i++)
: > : {
: > : urb = pdev->sbuf> .urb;
: > : usbd_setup_isochronous(urb, URB_ISOCH_ASAP, 0,
pdev->sbuf> .data,
: > : pdev->vmax_packet_size);
: > : usbd_io(urb, pdev->ep_iso_pipe, pwc_isoc_handler,
pdev->sbuf> .data,
: > : USBD_TIME_INFINITY);
: > : }
:
: > Try setting the direction flag URB_DIR_IN
:
:
:
: > : // callback
: > : static void
: > : pwc_isoc_handler(struct usbd_urb *urb, struct usbd_pipe *pipe,
void
: *hdl) {
: > : usbd_urb_status( urb, &fst, &flen );
: > : if( ( fst & USBD_URB_STATUS_MASK ) != USBD_STATUS_CMP )
: > : {
: > : // check for a stall condition and clear it
: > : if( ( fst & USBD_USB_STATUS_MASK ) == USBD_STATUS_STALL )
: > : {
: > : usbd_reset_pipe( pipe );
: > : if( cam.verbose )
: > : Trace(“pwc_isoc_handler: STALL ustatus %x, %d”, fst, flen);
: > : }
: > : if( cam.verbose )
: > : Trace(“pwc_isoc_handler: ustatus %x, %d”, fst, flen );
: > : return;
: > : }
: > : …
: > : usbd_setup_isochronous(urb, URB_ISOCH_ASAP, 0, hdl,
: pdev->vmax_packet_size);
: > : usbd_io(urb, pdev->ep_iso_pipe, pwc_isoc_handler, hdl,
: USBD_TIME_INFINITY);
: > : }
:
:
\
have a look to the mouse_parse_descriptors() in the DDK mouse example.
to get/test the endpoint number use ep = bEndpointAddress & 0xF.
I get the correct value (1)
What USB controller chip are you running on.
VIA VT83C572
Opti 82C861 Firelink (Pci-to-usb bridge)
Could you post code snippets of where you are
enqueuing the urbs ?
spca->urbIso = usbd_alloc_urb(NULL);
spca->frameBuffer = usbd_alloc(MAX_FRAME_SIZE_PER_DESC);
error =
usbd_setup_isochronous(spca->urbIso,URB_DIR_IN|URB_ISOCH_ASAP,0,spca->frameB
uffer,MAX_FRAME_SIZE_PER_DESC);
if (error)
{
printf(“usbd_setup_isochronous error: %d\n”,error);
}
else
printf(“usbd_setup_isochronous ok\n”);
error =
usbd_io(spca->urbIso,spca->IsoPipe,isoc_irq,spca,USBD_TIME_INFINITY);
if (error)
{
printf(“usbd_io error: %d\n”,error);
}
→ the pipe is correctly initialized I think.
“Peter” <nospam@nospam.at.all> a écrit dans le message news:
b5cbel$mn9$1@inn.qnx.com…
have a look to the mouse_parse_descriptors() in the DDK mouse example.
to get/test the endpoint number use ep = bEndpointAddress & 0xF.“Hercot Jean-Yves” <> fa063821@skynet.be> > schrieb im Newsbeitrag
news:b5ajj2$n6o$> 1@inn.qnx.com> …
I have tried and it doesn’t work >> .
I have checked my code with Peter’s one and it seems similar. When I
setup
an isochronous I receive the callback (even if I don’t enable Isoch
transfers on the cam) but the urb_status is set to 0x02040932.The results of usb -vvv seems correct and the cam works well under
windows
on the same computer.I have noticed that the value returned by usbd_pipe_endpoint is 0 for
the
control pipe and 129 for the Isoch/in pipe (it should be 1). It also
returns 129 with the other alternate settings.Help me!!! :-p
“Hercot Jean-Yves” <> fa063821@skynet.be> > a écrit dans le message news:
b5abul$f7k$> 1@inn.qnx.com> …
Henry > I’ll test all you have said about the isochronous transfers.
I’ll
post my question here if it doesn’t work… >Thanx
“Henry Van Dyke” <> henry@93.com> > a écrit dans le message news:
b5acdd$ni0$> 1@nntp.qnx.com> …
Peter (> nospam@nospam.at.all> ) wrote:
: Ohhhh, yeah…now its working.Thats good to hear
: damn I was looking over the code again and again and the doc says
: ‘one of these flags’…but of course, the setup needs a
direction.
: Henry, thank you very much for your help, you are my hero >
: cheers, peterYour welcome…
I’m glad it didn’t turn out to be anything too serious >
: “Henry Van Dyke” <> henry@93.com> > schrieb im Newsbeitrag
: news:b5a8v9$l6k$> 1@nntp.qnx.com> …
: > Peter (> nospam@nospam.at.all> ) wrote:
: > : INIT:
: > : for (i = 0; i < MAX_ISO_BUFS; i++)
: > : {
: > : urb = pdev->sbuf> .urb;
: > : usbd_setup_isochronous(urb, URB_ISOCH_ASAP, 0,
pdev->sbuf> .data,
: > : pdev->vmax_packet_size);
: > : usbd_io(urb, pdev->ep_iso_pipe, pwc_isoc_handler,
pdev->sbuf> .data,
: > : USBD_TIME_INFINITY);
: > : }
:
: > Try setting the direction flag URB_DIR_IN
:
:
:
: > : // callback
: > : static void
: > : pwc_isoc_handler(struct usbd_urb *urb, struct usbd_pipe *pipe,
void
: *hdl) {
: > : usbd_urb_status( urb, &fst, &flen );
: > : if( ( fst & USBD_URB_STATUS_MASK ) != USBD_STATUS_CMP )
: > : {
: > : // check for a stall condition and clear it
: > : if( ( fst & USBD_USB_STATUS_MASK ) == USBD_STATUS_STALL )
: > : {
: > : usbd_reset_pipe( pipe );
: > : if( cam.verbose )
: > : Trace(“pwc_isoc_handler: STALL ustatus %x, %d”, fst, flen);
: > : }
: > : if( cam.verbose )
: > : Trace(“pwc_isoc_handler: ustatus %x, %d”, fst, flen );
: > : return;
: > : }
: > : …
: > : usbd_setup_isochronous(urb, URB_ISOCH_ASAP, 0, hdl,
: pdev->vmax_packet_size);
: > : usbd_io(urb, pdev->ep_iso_pipe, pwc_isoc_handler, hdl,
: USBD_TIME_INFINITY);
: > : }
:
:
\
Hercot Jean-Yves (fa063821@skynet.be) wrote:
: > have a look to the mouse_parse_descriptors() in the DDK mouse example.
: > to get/test the endpoint number use ep = bEndpointAddress & 0xF.
: I get the correct value (1)
: >What USB controller chip are you running on.
: VIA VT83C572
: +
: Opti 82C861 Firelink (Pci-to-usb bridge)
: >Could you post code snippets of where you are
: >enqueuing the urbs ?
: spca->urbIso = usbd_alloc_urb(NULL);
: spca->frameBuffer = usbd_alloc(MAX_FRAME_SIZE_PER_DESC);
: error =
: usbd_setup_isochronous(spca->urbIso,URB_DIR_IN|URB_ISOCH_ASAP,0,spca->frameB
: uffer,MAX_FRAME_SIZE_PER_DESC);
: if (error)
: {
: printf(“usbd_setup_isochronous error: %d\n”,error);
: }
: else
: printf(“usbd_setup_isochronous ok\n”);
: error =
: usbd_io(spca->urbIso,spca->IsoPipe,isoc_irq,spca,USBD_TIME_INFINITY);
: if (error)
: {
: printf(“usbd_io error: %d\n”,error);
: }
: → the pipe is correctly initialized I think.
Have you initialized the camera to get it start
capturing frames.
I can’t see anything obviously wrong with the above code.
Is MAX_FRAME_SIZE_PER_DESC equal to the endpoint size ?
In your callback function to do you continously get the
same error reported in the the call to usbd_urb_status() ?
: “Peter” <nospam@nospam.at.all> a écrit dans le message news:
: b5cbel$mn9$1@inn.qnx.com…
: > have a look to the mouse_parse_descriptors() in the DDK mouse example.
: > to get/test the endpoint number use ep = bEndpointAddress & 0xF.
: >
: > “Hercot Jean-Yves” <fa063821@skynet.be> schrieb im Newsbeitrag
: > news:b5ajj2$n6o$1@inn.qnx.com…
: > > I have tried and it doesn’t work .
: > >
: > > I have checked my code with Peter’s one and it seems similar. When I
: > setup
: > > an isochronous I receive the callback (even if I don’t enable Isoch
: > > transfers on the cam) but the urb_status is set to 0x02040932.
: > >
: > > The results of usb -vvv seems correct and the cam works well under
: windows
: > > on the same computer.
: > >
: > > I have noticed that the value returned by usbd_pipe_endpoint is 0 for
: the
: > > control pipe and 129 for the Isoch/in pipe (it should be 1). It also
: > > returns 129 with the other alternate settings.
: > >
: > > Help me!!! :-p
: > >
: > > “Hercot Jean-Yves” <fa063821@skynet.be> a écrit dans le message news:
: > > b5abul$f7k$1@inn.qnx.com…
: > > > Henry > I’ll test all you have said about the isochronous transfers.
: > I’ll
: > > > post my question here if it doesn’t work…
: > > >
: > > > Thanx
[snip]
Have you initialized the camera to get it start
capturing frames.
Yes. But I also receive the call back if I don’t initialize the camera to
get it start capturing frames. :-s
Is MAX_FRAME_SIZE_PER_DESC equal to the >endpoint size ?
Yes. 1023 exactly.
In your callback function to do you continously get the
same error reported in the the call to usbd_urb_status() ?
Always the same status : 0x02040932
Tomorrow I’ll try the webcam on an other computer to see if status keeps the
same value.
But I can say I’am sure it is not a hardware problem because the cam works
very well under windows…
“Henry Van Dyke” <henry@93.com> a écrit dans le message news:
b5d5g7$j2n$1@nntp.qnx.com…
Hercot Jean-Yves (> fa063821@skynet.be> ) wrote:
: > have a look to the mouse_parse_descriptors() in the DDK mouse example.
: > to get/test the endpoint number use ep = bEndpointAddress & 0xF.: I get the correct value >
> (1)
: >What USB controller chip are you running on.
: VIA VT83C572
: +
: Opti 82C861 Firelink (Pci-to-usb bridge)
: >Could you post code snippets of where you are
: >enqueuing the urbs ?: spca->urbIso = usbd_alloc_urb(NULL);
: spca->frameBuffer = usbd_alloc(MAX_FRAME_SIZE_PER_DESC);
: error =
:
usbd_setup_isochronous(spca->urbIso,URB_DIR_IN|URB_ISOCH_ASAP,0,spca->frameB
: uffer,MAX_FRAME_SIZE_PER_DESC);
: if (error)
: {
: printf(“usbd_setup_isochronous error: %d\n”,error);
: }
: else
: printf(“usbd_setup_isochronous ok\n”);
: error =
: usbd_io(spca->urbIso,spca->IsoPipe,isoc_irq,spca,USBD_TIME_INFINITY);
: if (error)
: {
: printf(“usbd_io error: %d\n”,error);
: }: → the pipe is correctly initialized I think.
Have you initialized the camera to get it start
capturing frames.I can’t see anything obviously wrong with the above code.
Is MAX_FRAME_SIZE_PER_DESC equal to the endpoint size ?
In your callback function to do you continously get the
same error reported in the the call to usbd_urb_status() ?
: “Peter” <> nospam@nospam.at.all> > a écrit dans le message news:
: b5cbel$mn9$> 1@inn.qnx.com> …
: > have a look to the mouse_parse_descriptors() in the DDK mouse example.
: > to get/test the endpoint number use ep = bEndpointAddress & 0xF.
:
: > “Hercot Jean-Yves” <> fa063821@skynet.be> > schrieb im Newsbeitrag
: > news:b5ajj2$n6o$> 1@inn.qnx.com> …
: > > I have tried and it doesn’t work >> .
:
: > > I have checked my code with Peter’s one and it seems similar. When
I
: > setup
: > > an isochronous I receive the callback (even if I don’t enable Isoch
: > > transfers on the cam) but the urb_status is set to 0x02040932.
:
: > > The results of usb -vvv seems correct and the cam works well under
: windows
: > > on the same computer.
:
: > > I have noticed that the value returned by usbd_pipe_endpoint is 0
for
: the
: > > control pipe and 129 for the Isoch/in pipe (it should be 1). It
also
: > > returns 129 with the other alternate settings.
:
: > > Help me!!! :-p
:
: > > “Hercot Jean-Yves” <> fa063821@skynet.be> > a écrit dans le message
news:
: > > b5abul$f7k$> 1@inn.qnx.com> …
: > > > Henry > I’ll test all you have said about the isochronous
transfers.
: > I’ll
: > > > post my question here if it doesn’t work… >
:
: > > > Thanx[snip]