| 
						
						
							
								
							
						
						
					 | 
					 | 
					@ -105,6 +105,10 @@ int Panda::usb_write(uint8_t bRequest, uint16_t wValue, uint16_t wIndex, unsigne | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  int err; | 
					 | 
					 | 
					 | 
					  int err; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  const uint8_t bmRequestType = LIBUSB_ENDPOINT_OUT | LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_DEVICE; | 
					 | 
					 | 
					 | 
					  const uint8_t bmRequestType = LIBUSB_ENDPOINT_OUT | LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_DEVICE; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  if (!connected){ | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    return LIBUSB_ERROR_NO_DEVICE; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  pthread_mutex_lock(&usb_lock); | 
					 | 
					 | 
					 | 
					  pthread_mutex_lock(&usb_lock); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  do { | 
					 | 
					 | 
					 | 
					  do { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    err = libusb_control_transfer(dev_handle, bmRequestType, bRequest, wValue, wIndex, NULL, 0, timeout); | 
					 | 
					 | 
					 | 
					    err = libusb_control_transfer(dev_handle, bmRequestType, bRequest, wValue, wIndex, NULL, 0, timeout); | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -134,6 +138,10 @@ int Panda::usb_bulk_write(unsigned char endpoint, unsigned char* data, int lengt | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  int err; | 
					 | 
					 | 
					 | 
					  int err; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  int transferred = 0; | 
					 | 
					 | 
					 | 
					  int transferred = 0; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  if (!connected){ | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    return 0; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  pthread_mutex_lock(&usb_lock); | 
					 | 
					 | 
					 | 
					  pthread_mutex_lock(&usb_lock); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  do { | 
					 | 
					 | 
					 | 
					  do { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    // Try sending can messages. If the receive buffer on the panda is full it will NAK
 | 
					 | 
					 | 
					 | 
					    // Try sending can messages. If the receive buffer on the panda is full it will NAK
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -156,6 +164,10 @@ int Panda::usb_bulk_read(unsigned char endpoint, unsigned char* data, int length | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  int err; | 
					 | 
					 | 
					 | 
					  int err; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  int transferred = 0; | 
					 | 
					 | 
					 | 
					  int transferred = 0; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  if (!connected){ | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    return 0; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  pthread_mutex_lock(&usb_lock); | 
					 | 
					 | 
					 | 
					  pthread_mutex_lock(&usb_lock); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  do { | 
					 | 
					 | 
					 | 
					  do { | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
					 | 
					
  |