@@ -76,8 +76,9 @@ const static struct product_hw {
7676 { 2 , 0 } /* default offset is 2 */
7777};
7878
79- void bad (const char * why ) {
80- fprintf (stderr ,"Fatal error> %s\n" ,why );
79+ void bad (const char * why , usb_dev_handle * dev ) {
80+ fprintf (stderr ,"Fatal error> %s. Resetting Device.\n" ,why );
81+ usb_reset (dev );
8182 exit (17 );
8283}
8384
@@ -127,8 +128,6 @@ usb_dev_handle* setup_libusb_access() {
127128
128129
129130 usb_detach (lvr_winusb , INTERFACE1 );
130-
131-
132131 usb_detach (lvr_winusb , INTERFACE2 );
133132
134133
@@ -212,7 +211,7 @@ void ini_control_transfer(usb_dev_handle *dev) {
212211 r = usb_control_msg (dev , 0x21 , 0x09 , 0x0201 , 0x00 , (char * ) question , 2 , timeout );
213212 if ( r < 0 )
214213 {
215- perror ("USB control write" ); bad ("USB write failed" );
214+ perror ("USB control write" ); bad ("USB write failed" , dev );
216215 }
217216
218217
@@ -232,7 +231,7 @@ void control_transfer(usb_dev_handle *dev, const char *pquestion) {
232231 r = usb_control_msg (dev , 0x21 , 0x09 , 0x0200 , 0x01 , (char * ) question , reqIntLen , timeout );
233232 if ( r < 0 )
234233 {
235- perror ("USB control write" ); bad ("USB write failed" );
234+ perror ("USB control write" ); bad ("USB write failed" , dev );
236235 }
237236
238237 if (debug ) {
@@ -250,12 +249,12 @@ void interrupt_transfer(usb_dev_handle *dev) {
250249 r = usb_interrupt_write (dev , endpoint_Int_out , question , reqIntLen , timeout );
251250 if ( r < 0 )
252251 {
253- perror ("USB interrupt write" ); bad ("USB write failed" );
252+ perror ("USB interrupt write" ); bad ("USB write failed" , dev );
254253 }
255254 r = usb_interrupt_read (dev , endpoint_Int_in , answer , reqIntLen , timeout );
256255 if ( r != reqIntLen )
257256 {
258- perror ("USB interrupt read" ); bad ("USB read failed" );
257+ perror ("USB interrupt read" ); bad ("USB read failed" , dev );
259258 }
260259
261260 if (debug ) {
@@ -274,7 +273,7 @@ void interrupt_read(usb_dev_handle *dev) {
274273 r = usb_interrupt_read (dev , 0x82 , (char * )answer , reqIntLen , timeout );
275274 if ( r != reqIntLen )
276275 {
277- perror ("USB interrupt read" ); bad ("USB read failed" );
276+ perror ("USB interrupt read" ); bad ("USB read failed" , dev );
278277 }
279278
280279 if (debug ) {
@@ -293,7 +292,7 @@ void interrupt_read_temperatura(usb_dev_handle *dev, float *tempC) {
293292 r = usb_interrupt_read (dev , 0x82 , (char * )answer , reqIntLen , timeout );
294293 if ( r != reqIntLen )
295294 {
296- perror ("USB interrupt read" ); bad ("USB read failed" );
295+ perror ("USB interrupt read" ); bad ("USB read failed" , dev );
297296 }
298297
299298
@@ -316,12 +315,12 @@ void bulk_transfer(usb_dev_handle *dev) {
316315 r = usb_bulk_write (dev , endpoint_Bulk_out , NULL , 0 , timeout );
317316 if ( r < 0 )
318317 {
319- perror ("USB bulk write" ); bad ("USB write failed" );
318+ perror ("USB bulk write" ); bad ("USB write failed" , dev );
320319 }
321320 r = usb_bulk_read (dev , endpoint_Bulk_in , answer , reqBulkLen , timeout );
322321 if ( r != reqBulkLen )
323322 {
324- perror ("USB bulk read" ); bad ("USB read failed" );
323+ perror ("USB bulk read" ); bad ("USB read failed" , dev );
325324 }
326325
327326
@@ -488,8 +487,12 @@ int main( int argc, char **argv) {
488487 fflush (stdout );
489488 }
490489
491- if (!bsalir )
490+ if (bsalir ) {
491+ control_transfer (lvr_winusb , uTemperatura );
492+ interrupt_read_temperatura (lvr_winusb , & tempc );
493+ } else {
492494 sleep (seconds );
495+ }
493496 } while (!bsalir );
494497
495498 usb_release_interface (lvr_winusb , INTERFACE1 );
0 commit comments