+static void
+lws_set_genled(int n)
+{
+ lws_esp32.genled_t = time_in_microseconds();
+ lws_esp32.genled = n;
+}
+
+int
+lws_esp32_leds_network_indication(void)
+{
+ uint64_t us, r;
+ int n, fadein = 100, speed = 1199, div = 1, base = 0;
+
+ r = time_in_microseconds();
+ us = r - lws_esp32.genled_t;
+
+ switch (lws_esp32.genled) {
+ case LWSESP32_GENLED__INIT:
+ lws_esp32.genled = LWSESP32_GENLED__LOST_NETWORK;
+ /* fallthru */
+ case LWSESP32_GENLED__LOST_NETWORK:
+ fadein = us / 10000; /* 100 steps in 1s */
+ if (fadein > 100) {
+ fadein = 100;
+ lws_esp32.genled = LWSESP32_GENLED__NO_NETWORK;
+ }
+ /* fallthru */
+ case LWSESP32_GENLED__NO_NETWORK:
+ break;
+ case LWSESP32_GENLED__CONN_AP:
+ base = 4096;
+ speed = 933;
+ div = 2;
+ break;
+ case LWSESP32_GENLED__GOT_IP:
+ fadein = us / 10000; /* 100 steps in 1s */
+ if (fadein > 100) {
+ fadein = 100;
+ lws_esp32.genled = LWSESP32_GENLED__OK;
+ }
+ fadein = 100 - fadein; /* we are fading out */
+ /* fallthru */
+ case LWSESP32_GENLED__OK:
+ if (lws_esp32.genled == LWSESP32_GENLED__OK)
+ return 0;
+
+ base = 4096;
+ speed = 766;
+ div = 3;
+ break;
+ }
+
+ n = base + (lws_esp32_sine_interp(r / speed) / div);
+ return (n * fadein) / 100;
+}