Skip to content

Commit 85795db

Browse files
authored
Merge pull request #12 from TuxInvader/master
reset device if it hangs
2 parents 948f98a + 359cf08 commit 85795db

File tree

1 file changed

+16
-13
lines changed

1 file changed

+16
-13
lines changed

pcsensor.c

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)