diff options
| author | Ha Thach <[email protected]> | 2026-03-13 01:29:37 +0700 |
|---|---|---|
| committer | GitHub <[email protected]> | 2026-03-13 01:29:37 +0700 |
| commit | f98f7e003fc8c4bcdf503e8c9bff29122b70cc9e (patch) | |
| tree | ad99f53db0e5da76d8eee987b30fdbba8776942e /examples | |
| parent | 1fcb49fc638635337dc3d757767428bc3cb8c4b7 (diff) | |
| parent | 5bca175ea1f19309bc3f53a9435cb289561e1aa2 (diff) | |
Merge pull request #3438 from hathach/ncm_restart
Fix NCM state on restart
Diffstat (limited to 'examples')
| -rw-r--r-- | examples/device/net_lwip_webserver/src/main.c | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/examples/device/net_lwip_webserver/src/main.c b/examples/device/net_lwip_webserver/src/main.c index 8bd8a8c21..b78fd7c00 100644 --- a/examples/device/net_lwip_webserver/src/main.c +++ b/examples/device/net_lwip_webserver/src/main.c @@ -67,6 +67,19 @@ try changing the first byte of tud_network_mac_address[] below from 0x02 to 0x00 #define INIT_IP4(a, b, c, d) \ { PP_HTONL(LWIP_MAKEU32(a, b, c, d)) } +/* Blink pattern + * - 250 ms : device not mounted + * - 1000 ms : device mounted + * - 2500 ms : device is suspended + */ +enum { + BLINK_NOT_MOUNTED = 250, + BLINK_MOUNTED = 1000, + BLINK_SUSPENDED = 2500, +}; + +static uint32_t blink_interval_ms = BLINK_NOT_MOUNTED; + /* lwip context */ static struct netif netif_data; @@ -218,6 +231,20 @@ uint16_t tud_network_xmit_cb(uint8_t *dst, void *ref, uint16_t arg) { return pbuf_copy_partial(p, dst, p->tot_len, 0); } +static void led_blinking_task(void) { + static uint32_t start_ms = 0; + static bool led_state = false; + + // Blink every interval ms + if (tusb_time_millis_api() - start_ms < blink_interval_ms) { + return; // not enough time + } + start_ms += blink_interval_ms; + + board_led_write(led_state); + led_state = 1 - led_state; // toggle +} + static void handle_link_state_switch(void) { /* Check for button press to toggle link state */ static bool last_link_state = true; @@ -275,9 +302,33 @@ int main(void) { tud_task(); sys_check_timeouts(); // service lwip handle_link_state_switch(); + led_blinking_task(); } } +// Invoked when device is mounted +void tud_mount_cb(void) { + blink_interval_ms = BLINK_MOUNTED; +} + +// Invoked when device is unmounted +void tud_umount_cb(void) { + blink_interval_ms = BLINK_NOT_MOUNTED; +} + +// Invoked when usb bus is suspended +// remote_wakeup_en : if host allow us to perform remote wakeup +// Within 7ms, device must draw an average of current less than 2.5 mA from bus +void tud_suspend_cb(bool remote_wakeup_en) { + (void) remote_wakeup_en; + blink_interval_ms = BLINK_SUSPENDED; +} + +// Invoked when usb bus is resumed +void tud_resume_cb(void) { + blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; +} + /* lwip has provision for using a mutex, when applicable */ /* This implementation is for single-threaded use only */ sys_prot_t sys_arch_protect(void) { |
