Flow diagram of Linux USB composite gadget architecture


                                                                                                                 ,------------------,
                                                                                                                 |      USER        |
                                                                                                                 |   application    |
                                                                                                                 '------------------'
															/|\
															 |
USER															\|/
=========================================================================================================================================
KERNEL															/|\
															 |
															\|/
														 ,------------------,
														 |  drivers/char/   |
											              tty_layer	 |   tty_io.c       |
														 '------------------'
														        /|\
															 |
					    struct      			  (1)					 | open/close/read/write (9)
					usb_gadget_driver		         struct 				 |
                                                                (2)        usb_composite_driver                         \|/
,---------------------,                 ,---------------, usb_composite_ ,----------------------,     (4)	,----------------------,                                             
|                     |      (3)        |               |   register     |                      | gserial_setup |    u_serial.c        |
|  USB Device         |<----------------|  composite.c  |<---------------|     serial.c         |-------------->|                      |
|  Controller driver  | usb_gadget_     |               | usb_add_       | 		        |   struct      |      struct          |
|                     | register_driver |               | config         |                      |  tty_driver   |  tty_operations      |
'---------------------'                 '---------------'      (5)       '----------------------'               '----------------------' 
					/|\    /|\    /|\		struct usb_configuration                            /|\
					 |	|	\		  (serial_bind_config)                               |
					 |	 \	 \		     /	     |	    \ (6)                            | Notify USB status to tty_io
					  \	  \	  \		 (6)/	     |(6)    \	                             | 
					   \	   \	   \		   /	     |	      \			         gserial_connect/disconnect [active/inactive] (8)
					    \ 	    \       \ 		  / 	     |         \__gser_bind_config__         | [same for f_acm.c and f_obex.c]  
					     \	     \       \		 /	     |    			    \	     |
					      \       \       \_________/____________|___usb_add_function______	     \	     |
					       \       \ 	       /	     |	        (7)            \      \	     | 
				 		\       \_(7)usb_add_function__	     |				\      \     | 
						 \    	     _______/	       \     |		           	 \	\    |
				    (7) usb_add_function    |acm_bind_config    \    |obex_bind_config	          \	 \   |
						    \      \|/	                 \  \|/				   \  	\|/  |
                                                  ,---------------,             ,---------------,      		 ,---------------,
                                                  |               |             |               |                |               |
						  |    f_acm.c    |	        |   f_obex.c    |	         |  f_serial.c   |
                                                  |               |             |               |                |               |
                                                  '---------------'             '---------------'                '---------------'
        					struct usb_function		struct usb_function		struct usb_function

Android Android Commands Android Java Applications Application Libraries Bash / Shell Scripts Bluetooth driver Build Frameworks Commands and Packages Core Kernel C Programs Development Environment Setup Documents / Books Errors & Failures File Systems Framebuffer / Display Driver git Go Language Programs Hardware Platforms Home JAVA Programs Kernel & Device Drivers Kernel Booting and Porting Linux, OS Concepts and Networking Linux Device Drivers Linux Host, Ubuntu, SysAdmin Linux Kernel Linux Networking Middleware Libraries, HAL NDK / Middleware / HAL Network Driver OS Concepts PHP Procfs Filesystem Programming Languages RaspberryPi Scripting and Automation Search Engine Optimisation ( SEO ) Socurce Code Management ( SCM ) System Administration, Security Testing and Debugging Uncategorized Userspace Utilities Web design and development Wordpress Yocto / Bitbake / Openembedded

Leave a Reply