Ticket #7201: patch-io_hpiod_device.cpp

File patch-io_hpiod_device.cpp, 1.9 KB (added by aschenke@…, 18 years ago)

patch for io/hpiod/device.cpp

Line 
1--- io/hpiod/device.cpp.orig    2006-03-02 19:07:26.000000000 -0500
2+++ io/hpiod/device.cpp 2006-04-27 15:47:38.000000000 -0400
3@@ -99,14 +99,62 @@
4 
5 int Device::Write(int fd, const void *buf, int size)
6 {
7-   syslog(LOG_ERR, "error Write: unimplemented (osx) %s %s %d\n", URI, __FILE__, __LINE__);
8-   return -1;
9+   int r, ep;
10+ 
11+   if (FD[fd].pHD == NULL)
12+   {
13+      syslog(LOG_ERR, "invalid Device::Write state (osx): %s %s %d\n", URI,__FILE__, __LINE__);
14+      return r;
15+   }
16+   
17+   if ((ep = GetOutEP(dev, FD[fd].Config, FD[fd].Interface, FD[fd].AltSetting, USB_ENDPOINT_TYPE_BULK)) < 0)
18+   {
19+      syslog(LOG_ERR, "invalid bulk out endpoint (osx) %s %s %d\n", URI, __FILE__, __LINE__);
20+      return r;
21+   }
22+   
23+   r = usb_bulk_write(FD[fd].pHD, ep, (char *)buf, size, LIBUSB_TIMEOUT);
24+
25+   if (r < 0)
26+   {
27+      syslog(LOG_ERR, "error Write (osx) %s: %s %d\n", URI, __FILE__, __LINE__);
28+      return r;
29+   }
30+   
31+   return r;   
32 }
33 
34 int Device::Read(int fd, void *buf, int size, int usec)
35 {
36-   syslog(LOG_ERR, "error Read: unimplemented (osx) %s %s %d\n", URI, __FILE__, __LINE__);
37-   return -2;
38+   int r, ep;
39+   
40+   if (FD[fd].pHD == NULL)
41+   {
42+      syslog(LOG_ERR, "invalid Device::Read state (osx): %s %s %d\n", URI,__FILE__, __LINE__);
43+      return -1;
44+   }
45+   
46+   if ((ep = GetInEP(dev, FD[fd].Config, FD[fd].Interface, FD[fd].AltSetting, USB_ENDPOINT_TYPE_BULK)) < 0)
47+   {
48+      syslog(LOG_ERR, "invalid bulk in endpoint (osx) %s %s %d\n", URI, __FILE__, __LINE__);
49+      return -1;
50+   }
51+   
52+   r = usb_bulk_read(FD[fd].pHD, ep, (char *)buf, size, usec/1000);
53+
54+   if (r < 0)
55+   {
56+      syslog(LOG_ERR, "error Read (osx) %s: %s %d\n", URI, __FILE__, __LINE__);
57+      return r;
58+   }
59+   
60+   if (r != size)
61+   {
62+      syslog(LOG_ERR, "error Read (osx) %s: %s %d\n", URI, __FILE__, __LINE__);
63+      return -1;
64+   }
65+   
66+   return r;
67 }
68 
69 #else