You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							51 lines
						
					
					
						
							1.7 KiB
						
					
					
				
			
		
		
	
	
							51 lines
						
					
					
						
							1.7 KiB
						
					
					
				| #pragma once
 | |
| 
 | |
| #include <mutex>
 | |
| #include <atomic>
 | |
| #include <cstdint>
 | |
| #include <vector>
 | |
| 
 | |
| #include <libusb-1.0/libusb.h>
 | |
| 
 | |
| #define TIMEOUT 0
 | |
| 
 | |
| 
 | |
| // comms base class
 | |
| class PandaCommsHandle {
 | |
| public:
 | |
|   PandaCommsHandle(std::string serial) {};
 | |
|   virtual ~PandaCommsHandle() {};
 | |
|   virtual void cleanup() = 0;
 | |
| 
 | |
|   std::atomic<bool> connected = true;
 | |
|   std::atomic<bool> comms_healthy = true;
 | |
|   static std::vector<std::string> list();
 | |
| 
 | |
|   // HW communication
 | |
|   virtual int control_write(uint8_t request, uint16_t param1, uint16_t param2, 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_read(unsigned char endpoint, unsigned char* data, int length, unsigned int timeout=TIMEOUT) = 0;
 | |
| 
 | |
| protected:
 | |
|   std::mutex hw_lock;
 | |
| };
 | |
| 
 | |
| class PandaUsbHandle : public PandaCommsHandle {
 | |
| public:
 | |
|   PandaUsbHandle(std::string serial);
 | |
|   ~PandaUsbHandle();
 | |
|   int control_write(uint8_t request, uint16_t param1, uint16_t param2, unsigned int timeout=TIMEOUT);
 | |
|   int control_read(uint8_t request, uint16_t param1, uint16_t param2, unsigned char *data, uint16_t length, unsigned int timeout=TIMEOUT);
 | |
|   int bulk_write(unsigned char endpoint, unsigned char* data, int length, unsigned int timeout=TIMEOUT);
 | |
|   int bulk_read(unsigned char endpoint, unsigned char* data, int length, unsigned int timeout=TIMEOUT);
 | |
|   void cleanup();
 | |
| 
 | |
|   static std::vector<std::string> list();
 | |
| 
 | |
| private:
 | |
|   libusb_context *ctx = NULL;
 | |
|   libusb_device_handle *dev_handle = NULL;
 | |
|   std::vector<uint8_t> recv_buf;
 | |
|   void handle_usb_issue(int err, const char func[]);
 | |
| };
 | |
| 
 |