mirror of
				https://github.com/espressif/esp-idf.git
				synced 2025-11-03 22:08:28 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			82 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
# ESP-NETIF architecture
 | 
						|
     
 | 
						|
                     |          (A) USER CODE                 |
 | 
						|
                     |                                        |
 | 
						|
        .............| init          settings      events     |
 | 
						|
        .            +----------------------------------------+          
 | 
						|
        .               .                |           *
 | 
						|
        .               .                V           *                                   
 | 
						|
    --------+        +===========================+   *     +-----------------------+
 | 
						|
            |        | new/config     get/set    |   *     |                       |
 | 
						|
            |        |                           |...*.....| init                  |
 | 
						|
            |        |---------------------------|   *     |                       |
 | 
						|
      init  |        |                           |****     |                       |
 | 
						|
      start |********|  event handler            |*********|  DHCP                 |
 | 
						|
      stop  |        |                           |         |                       |
 | 
						|
            |        |---------------------------|         |                       | 
 | 
						|
            |        |                           |         |    NETIF              |
 | 
						|
      +-----|        |                           |         +-----------------+     |   
 | 
						|
      | glue|----<---|  esp_netif_transmit       |--<------| netif_output    |     |
 | 
						|
      |     |        |                           |         |                 |     |
 | 
						|
      |     |---->---|  esp_netif_receive        |-->------| netif_input     |     |
 | 
						|
      |     |        |                           |         + ----------------+     |
 | 
						|
      |     |....<...|  esp_netif_free_rx_buffer |...<.....| packet buffer         |
 | 
						|
      +-----|        |                           |         |                       |  
 | 
						|
            |        |                           |         |                       |  
 | 
						|
      (B)   |        |                           |         +-----------------------+
 | 
						|
    --------+        +===========================+
 | 
						|
    communication                                                NETWORK STACK
 | 
						|
    DRIVER                   ESP-NETIF                          
 | 
						|
    
 | 
						|
    
 | 
						|
##  Components:
 | 
						|
 | 
						|
###  A) User code, boiler plate
 | 
						|
Overall application interaction with communication media and network stack
 | 
						|
  
 | 
						|
  * initialization code
 | 
						|
      - create a new instance of ESP-NETIF
 | 
						|
      - configure the object with
 | 
						|
          1) netif specific options (flags, behaviour, name)
 | 
						|
          2) network stack options (netif init and input functions, not publicly available)
 | 
						|
          3) IO driver specific options (transmit, tx_free functions, IO driver handle)
 | 
						|
    - setup event handlers
 | 
						|
    - use default handlers for common interfaces defined in IO drivers; or define a specific handlers
 | 
						|
                        for customised behaviour/new interfaces
 | 
						|
    - register handlers for app related events (such as IP lost/acquired)
 | 
						|
  - interact with network interfaces using ESP-NETIF API
 | 
						|
 | 
						|
###  B) Communication driver, IO driver, media driver
 | 
						|
  * event handler
 | 
						|
      - define behaviour patterns of interaction with ESP-NETIF (example: ehternet link-up -> turn netif on)
 | 
						|
  * glue IO layer: adapt the input/output functions to use esp-netif transmit/input/free_rx
 | 
						|
      - install driver_transmit to appropriate ESP-NETIF object, so that outgoing packets from
 | 
						|
                network stack are passed to the IO driver
 | 
						|
      - calls esp_netif_receive to pass incoming data to network stack
 | 
						|
 | 
						|
###  C) ESP-NETIF, former tcpip_adapter
 | 
						|
* init API (new, configure)
 | 
						|
* IO API: for passing data between IO driver and network stack
 | 
						|
* event/action API (esp-netif lifecycle management)
 | 
						|
  - building blocks for designing event handlers
 | 
						|
* setters, getters
 | 
						|
* network stack abstraction: enabling user interaction with TCP/IP stack
 | 
						|
  - netif up/down
 | 
						|
  - DHCP server, client
 | 
						|
  - DNS API
 | 
						|
* driver conversion utilities
 | 
						|
 | 
						|
###  D) Network stack: no public interaction with user code (wrtt interfaces)
 | 
						|
 | 
						|
 | 
						|
##  Data/event flow:
 | 
						|
 | 
						|
* `........`     Initialization line from user code to esp-netif and comm driver
 | 
						|
 | 
						|
* `--<--->--`    Data packets going from communication media to TCP/IP stack and back
 | 
						|
 | 
						|
* `********`     Events agregated in ESP-NETIP propagates to driver, user code and network stack
 | 
						|
 | 
						|
*  `|`           User settings and runtime configuration
 | 
						|
 |