kopia lustrzana https://github.com/espressif/esp-idf
82 wiersze
4.2 KiB
Markdown
82 wiersze
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
|
|
|