Fix vendor fifo deadlock, add tud_vendor_n_read_flush
This commit is contained in:
		
							
								
								
									
										9
									
								
								src/class/vendor/vendor_device.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										9
									
								
								src/class/vendor/vendor_device.c
									
									
									
									
										vendored
									
									
								
							| @@ -103,6 +103,13 @@ uint32_t tud_vendor_n_read (uint8_t itf, void* buffer, uint32_t bufsize) | ||||
|   return num_read; | ||||
| } | ||||
|  | ||||
| void tud_vendor_n_read_flush (uint8_t itf) | ||||
| { | ||||
|   vendord_interface_t* p_itf = &_vendord_itf[itf]; | ||||
|   tu_fifo_clear(&p_itf->rx_ff); | ||||
|   _prep_out_transaction(p_itf); | ||||
| } | ||||
|  | ||||
| //--------------------------------------------------------------------+ | ||||
| // Write API | ||||
| //--------------------------------------------------------------------+ | ||||
| @@ -199,6 +206,8 @@ uint16_t vendord_open(uint8_t rhport, tusb_desc_interface_t const * itf_desc, ui | ||||
|     TU_BREAKPOINT(); | ||||
|   } | ||||
|  | ||||
|   maybe_transmit(p_vendor); | ||||
|  | ||||
|   return drv_len; | ||||
| } | ||||
|  | ||||
|   | ||||
							
								
								
									
										7
									
								
								src/class/vendor/vendor_device.h
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								src/class/vendor/vendor_device.h
									
									
									
									
										vendored
									
									
								
							| @@ -45,6 +45,7 @@ bool     tud_vendor_n_mounted         (uint8_t itf); | ||||
| uint32_t tud_vendor_n_available       (uint8_t itf); | ||||
| uint32_t tud_vendor_n_read            (uint8_t itf, void* buffer, uint32_t bufsize); | ||||
| bool     tud_vendor_n_peek            (uint8_t itf, uint8_t* u8); | ||||
| void     tud_vendor_n_read_flush      (uint8_t itf); | ||||
|  | ||||
| uint32_t tud_vendor_n_write           (uint8_t itf, void const* buffer, uint32_t bufsize); | ||||
| uint32_t tud_vendor_n_write_available (uint8_t itf); | ||||
| @@ -59,6 +60,7 @@ static inline bool     tud_vendor_mounted         (void); | ||||
| static inline uint32_t tud_vendor_available       (void); | ||||
| static inline uint32_t tud_vendor_read            (void* buffer, uint32_t bufsize); | ||||
| static inline bool     tud_vendor_peek            (uint8_t* u8); | ||||
| static inline void     tud_vendor_read_flush      (void); | ||||
| static inline uint32_t tud_vendor_write           (void const* buffer, uint32_t bufsize); | ||||
| static inline uint32_t tud_vendor_write_str       (char const* str); | ||||
| static inline uint32_t tud_vendor_write_available (void); | ||||
| @@ -99,6 +101,11 @@ static inline bool tud_vendor_peek (uint8_t* u8) | ||||
|   return tud_vendor_n_peek(0, u8); | ||||
| } | ||||
|  | ||||
| static inline void tud_vendor_read_flush(void) | ||||
| { | ||||
|     tud_vendor_n_read_flush(0); | ||||
| } | ||||
|  | ||||
| static inline uint32_t tud_vendor_write (void const* buffer, uint32_t bufsize) | ||||
| { | ||||
|   return tud_vendor_n_write(0, buffer, bufsize); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 MasterPhi
					MasterPhi