Browse Source

move XPCU transfer function

master
Michael Gernoth 17 years ago
parent
commit
6c235d59ca
  1. 27
      usb-driver.c
  2. 35
      xpcu.c
  3. 1
      xpcu.h

27
usb-driver.c

@ -160,32 +160,7 @@ static int do_wdioctl(int fd, unsigned int request, unsigned char *wdioctl) {
#ifndef NO_WINDRVR
ret = (*ioctl_func) (fd, request, wdioctl);
#else
xpcu_claim(xpcu, XPCU_CLAIM);
/* http://www.jungo.com/support/documentation/windriver/802/wdusb_man_mhtml/node55.html#SECTION001213000000000000000 */
if (ut->dwPipeNum == 0) { /* control pipe */
int requesttype, request, value, index, size;
requesttype = ut->SetupPacket[0];
request = ut->SetupPacket[1];
value = ut->SetupPacket[2] | (ut->SetupPacket[3] << 8);
index = ut->SetupPacket[4] | (ut->SetupPacket[5] << 8);
size = ut->SetupPacket[6] | (ut->SetupPacket[7] << 8);
DPRINTF("requesttype: %x, request: %x, value: %u, index: %u, size: %u\n", requesttype, request, value, index, size);
ret = usb_control_msg(xpcu->handle, requesttype, request, value, index, ut->pBuffer, size, ut->dwTimeout);
} else {
if (ut->fRead) {
ret = usb_bulk_read(xpcu->handle, ut->dwPipeNum, ut->pBuffer, ut->dwBufferSize, ut->dwTimeout);
} else {
ret = usb_bulk_write(xpcu->handle, ut->dwPipeNum, ut->pBuffer, ut->dwBufferSize, ut->dwTimeout);
}
xpcu_claim(xpcu, XPCU_RELEASE);
}
if (ret < 0) {
fprintf(stderr, "usb_transfer: %d (%s)\n", ret, usb_strerror());
} else {
ut->dwBytesTransferred = ret;
ret = 0;
}
xpcu_transfer(xpcu, ut);
#endif
#ifdef DEBUG

35
xpcu.c

@ -3,8 +3,8 @@
#include <unistd.h>
#include <strings.h>
#include <usb.h>
#include "xpcu.h"
#include "usb-driver.h"
#include "xpcu.h"
int xpcu_deviceinfo(struct xpcu_s *xpcu, unsigned char *buf) {
int i,j,k,l;
@ -199,6 +199,39 @@ int xpcu_claim(struct xpcu_s *xpcu, int claim) {
return ret;
}
int xpcu_transfer(struct xpcu_s *xpcu, struct usb_transfer *ut) {
int ret = 0;
xpcu_claim(xpcu, XPCU_CLAIM);
/* http://www.jungo.com/support/documentation/windriver/802/wdusb_man_mhtml/node55.html#SECTION001213000000000000000 */
if (ut->dwPipeNum == 0) { /* control pipe */
int requesttype, request, value, index, size;
requesttype = ut->SetupPacket[0];
request = ut->SetupPacket[1];
value = ut->SetupPacket[2] | (ut->SetupPacket[3] << 8);
index = ut->SetupPacket[4] | (ut->SetupPacket[5] << 8);
size = ut->SetupPacket[6] | (ut->SetupPacket[7] << 8);
DPRINTF("requesttype: %x, request: %x, value: %u, index: %u, size: %u\n", requesttype, request, value, index, size);
ret = usb_control_msg(xpcu->handle, requesttype, request, value, index, ut->pBuffer, size, ut->dwTimeout);
} else {
if (ut->fRead) {
ret = usb_bulk_read(xpcu->handle, ut->dwPipeNum, ut->pBuffer, ut->dwBufferSize, ut->dwTimeout);
} else {
ret = usb_bulk_write(xpcu->handle, ut->dwPipeNum, ut->pBuffer, ut->dwBufferSize, ut->dwTimeout);
}
xpcu_claim(xpcu, XPCU_RELEASE);
}
if (ret < 0) {
fprintf(stderr, "usb_transfer: %d (%s)\n", ret, usb_strerror());
} else {
ut->dwBytesTransferred = ret;
ret = 0;
}
return ret;
}
struct xpcu_s *xpcu_open(void) {
static struct xpcu_s xpcu;

1
xpcu.h

@ -11,4 +11,5 @@ struct xpcu_s {
int __attribute__ ((visibility ("hidden"))) xpcu_deviceinfo(struct xpcu_s *xpcu, unsigned char *buf);
int __attribute__ ((visibility ("hidden"))) xpcu_claim(struct xpcu_s *xpcu, int claim);
int __attribute__ ((visibility ("hidden"))) xpcu_transfer(struct xpcu_s *xpcu, struct usb_transfer *ut);
struct xpcu_s __attribute__ ((visibility ("hidden"))) *xpcu_open(void);

Loading…
Cancel
Save