Lines Matching refs:h
304 static int usb_bulk_write(usb_handle* h, const void* data, int len) { in usb_bulk_write() argument
305 std::unique_lock<std::mutex> lock(h->mutex); in usb_bulk_write()
308 usbdevfs_urb* urb = &h->urb_out; in usb_bulk_write()
311 urb->endpoint = h->ep_out; in usb_bulk_write()
316 if (h->dead) { in usb_bulk_write()
321 if (TEMP_FAILURE_RETRY(ioctl(h->fd, USBDEVFS_SUBMITURB, urb)) == -1) { in usb_bulk_write()
325 h->urb_out_busy = true; in usb_bulk_write()
328 if (h->cv.wait_until(lock, now + 5s) == std::cv_status::timeout || h->dead) { in usb_bulk_write()
333 if (!h->urb_out_busy) { in usb_bulk_write()
343 static int usb_bulk_read(usb_handle* h, void* data, int len) { in usb_bulk_read() argument
344 std::unique_lock<std::mutex> lock(h->mutex); in usb_bulk_read()
347 usbdevfs_urb* urb = &h->urb_in; in usb_bulk_read()
350 urb->endpoint = h->ep_in; in usb_bulk_read()
355 if (h->dead) { in usb_bulk_read()
360 if (TEMP_FAILURE_RETRY(ioctl(h->fd, USBDEVFS_SUBMITURB, urb)) == -1) { in usb_bulk_read()
364 h->urb_in_busy = true; in usb_bulk_read()
367 h->reaper_thread = pthread_self(); in usb_bulk_read()
368 int fd = h->fd; in usb_bulk_read()
377 h->reaper_thread = 0; in usb_bulk_read()
378 if (h->dead) { in usb_bulk_read()
392 if (out == &h->urb_in) { in usb_bulk_read()
394 h->urb_in_busy = false; in usb_bulk_read()
401 if (out == &h->urb_out) { in usb_bulk_read()
403 h->urb_out_busy = false; in usb_bulk_read()
404 h->cv.notify_all(); in usb_bulk_read()
409 static int usb_write_split(usb_handle* h, unsigned char* data, int len) { in usb_write_split() argument
412 int n = usb_bulk_write(h, data + i, chunk_size); in usb_write_split()
422 int usb_write(usb_handle* h, const void* _data, int len) { in usb_write() argument
430 int n = usb_bulk_write(h, data, len); in usb_write()
432 n = usb_write_split(h, data, len); in usb_write()
439 if (h->zero_mask && !(len & h->zero_mask)) { in usb_write()
442 return usb_bulk_write(h, _data, 0) == 0 ? len : -1; in usb_write()
449 int usb_read(usb_handle *h, void *_data, int len) in usb_read() argument
459 D("[ usb read %d fd = %d], path=%s", xfer, h->fd, h->path.c_str()); in usb_read()
460 n = usb_bulk_read(h, data, xfer); in usb_read()
461 D("[ usb read %d ] = %d, path=%s", xfer, n, h->path.c_str()); in usb_read()
463 if((errno == ETIMEDOUT) && (h->fd != -1)) { in usb_read()
480 void usb_reset(usb_handle* h) { in usb_reset() argument
481 ioctl(h->fd, USBDEVFS_RESET); in usb_reset()
482 usb_kick(h); in usb_reset()
485 void usb_kick(usb_handle* h) { in usb_kick() argument
486 std::lock_guard<std::mutex> lock(h->mutex); in usb_kick()
487 D("[ kicking %p (fd = %d) ]", h, h->fd); in usb_kick()
488 if (!h->dead) { in usb_kick()
489 h->dead = true; in usb_kick()
491 if (h->writeable) { in usb_kick()
496 if (h->reaper_thread) { in usb_kick()
497 pthread_kill(h->reaper_thread, SIGALRM); in usb_kick()
505 ioctl(h->fd, USBDEVFS_DISCARDURB, &h->urb_in); in usb_kick()
506 ioctl(h->fd, USBDEVFS_DISCARDURB, &h->urb_out); in usb_kick()
507 h->urb_in.status = -ENODEV; in usb_kick()
508 h->urb_out.status = -ENODEV; in usb_kick()
509 h->urb_in_busy = false; in usb_kick()
510 h->urb_out_busy = false; in usb_kick()
511 h->cv.notify_all(); in usb_kick()
513 unregister_usb_transport(h); in usb_kick()
518 int usb_close(usb_handle* h) { in usb_close() argument
520 g_usb_handles.remove(h); in usb_close()
522 D("-- usb close %p (fd = %d) --", h, h->fd); in usb_close()
524 delete h; in usb_close()
529 size_t usb_get_max_packet_size(usb_handle* h) { in usb_get_max_packet_size() argument
530 return h->max_packet_size; in usb_get_max_packet_size()