@ -30,9 +30,6 @@ public: 
			
		
	
		
		
			
				
					
					  virtual  int  control_read ( uint8_t  request ,  uint16_t  param1 ,  uint16_t  param2 ,  unsigned  char  * data ,  uint16_t  length ,  unsigned  int  timeout = TIMEOUT )  =  0 ;    virtual  int  control_read ( uint8_t  request ,  uint16_t  param1 ,  uint16_t  param2 ,  unsigned  char  * data ,  uint16_t  length ,  unsigned  int  timeout = TIMEOUT )  =  0 ;   
			
		
	
		
		
			
				
					
					  virtual  int  bulk_write ( unsigned  char  endpoint ,  unsigned  char *  data ,  int  length ,  unsigned  int  timeout = TIMEOUT )  =  0 ;    virtual  int  bulk_write ( unsigned  char  endpoint ,  unsigned  char *  data ,  int  length ,  unsigned  int  timeout = TIMEOUT )  =  0 ;   
			
		
	
		
		
			
				
					
					  virtual  int  bulk_read ( unsigned  char  endpoint ,  unsigned  char *  data ,  int  length ,  unsigned  int  timeout = TIMEOUT )  =  0 ;    virtual  int  bulk_read ( unsigned  char  endpoint ,  unsigned  char *  data ,  int  length ,  unsigned  int  timeout = TIMEOUT )  =  0 ;   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					protected :  
			
		
	
		
		
			
				
					
					  std : : recursive_mutex  hw_lock ;   
			
		
	
		
		
			
				
					
					} ; } ;  
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					class  PandaUsbHandle  :  public  PandaCommsHandle  { class  PandaUsbHandle  :  public  PandaCommsHandle  {  
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
						
					 
					@ -50,6 +47,7 @@ public: 
			
		
	
		
		
			
				
					
					private : private :  
			
		
	
		
		
			
				
					
					  libusb_context  * ctx  =  NULL ;    libusb_context  * ctx  =  NULL ;   
			
		
	
		
		
			
				
					
					  libusb_device_handle  * dev_handle  =  NULL ;    libusb_device_handle  * dev_handle  =  NULL ;   
			
		
	
		
		
			
				
					
					  std : : recursive_mutex  hw_lock ;   
			
		
	
		
		
			
				
					
					  void  handle_usb_issue ( int  err ,  const  char  func [ ] ) ;    void  handle_usb_issue ( int  err ,  const  char  func [ ] ) ;   
			
		
	
		
		
			
				
					
					} ; } ;  
			
		
	
		
		
			
				
					
					
 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
						
					 
					@ -69,6 +67,7 @@ private: 
			
		
	
		
		
			
				
					
					  int  spi_fd  =  - 1 ;    int  spi_fd  =  - 1 ;   
			
		
	
		
		
			
				
					
					  uint8_t  tx_buf [ SPI_BUF_SIZE ] ;    uint8_t  tx_buf [ SPI_BUF_SIZE ] ;   
			
		
	
		
		
			
				
					
					  uint8_t  rx_buf [ SPI_BUF_SIZE ] ;    uint8_t  rx_buf [ SPI_BUF_SIZE ] ;   
			
		
	
		
		
			
				
					
					  inline  static  std : : recursive_mutex  hw_lock ;   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					  int  wait_for_ack ( spi_ioc_transfer  & transfer ,  uint8_t  ack ) ;    int  wait_for_ack ( spi_ioc_transfer  & transfer ,  uint8_t  ack ) ;   
			
		
	
		
		
			
				
					
					  int  bulk_transfer ( uint8_t  endpoint ,  uint8_t  * tx_data ,  uint16_t  tx_len ,  uint8_t  * rx_data ,  uint16_t  rx_len ) ;    int  bulk_transfer ( uint8_t  endpoint ,  uint8_t  * tx_data ,  uint16_t  tx_len ,  uint8_t  * rx_data ,  uint16_t  rx_len ) ;