ESP8266-based WiFi serial modem emulator ROM
1/*
2 * WiFiPPP
3 * Copyright (c) 2021 joshua stein <jcs@jcs.org>
4 *
5 * Permission to use, copy, modify, and distribute this software for any
6 * purpose with or without fee is hereby granted, provided that the above
7 * copyright notice and this permission notice appear in all copies.
8 *
9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16 */
17
18#include "wifippp.h"
19#include <Adafruit_NeoPixel.h>
20
21Adafruit_NeoPixel pixel(1, pPixel, NEO_GRB + NEO_KHZ800);
22static uint32_t cur_color = 0;
23static char wifi_status = WL_DISCONNECTED;
24
25void
26pixel_setup(void)
27{
28 pixel.begin();
29 pixel.clear();
30 pixel_adjust_brightness();
31}
32
33void
34pixel_adjust_brightness(void)
35{
36 /* the brightness can go to 255, but it's blinding */
37 int br = 80 * (double)(settings->pixel_brightness / 10.0);
38#ifdef PIXEL_TRACE
39 syslog.logf(LOG_DEBUG, "pixel: setting brightness to %d", br);
40#endif
41 pixel.setBrightness(br);
42 pixel.show();
43 pixel_set_rgb(cur_color);
44}
45
46void
47pixel_set_rgb(int r, int g, int b)
48{
49 pixel_set_rgb(pixel.Color(r, g, b));
50}
51
52void
53pixel_set_rgb(uint32_t color)
54{
55#ifdef PIXEL_TRACE
56 syslog.logf(LOG_DEBUG, "pixel: changing color from %d to %d",
57 cur_color, color);
58#endif
59 cur_color = color;
60 pixel.setPixelColor(0, cur_color);
61 pixel.show();
62}
63
64void
65pixel_color_by_state(void)
66{
67 uint32_t color = cur_color;
68
69 if (WiFi.status() != wifi_status) {
70 switch (WiFi.status()) {
71 case WL_CONNECTED:
72 /* yellow */
73 color = pixel.Color(255, 255, 0);
74 break;
75 default:
76 /* red */
77 color = pixel.Color(255, 0, 0);
78 }
79 wifi_status = WiFi.status();
80 } else {
81 switch (state) {
82 case STATE_AT:
83 if (telnet_connected())
84 /* teal */
85 color = pixel.Color(0, 255, 255);
86 else
87 /* white */
88 color = pixel.Color(255, 255, 255);
89 break;
90 case STATE_TELNET:
91 /* green */
92 color = pixel.Color(0, 255, 0);
93 break;
94 case STATE_PPP:
95 /* blue */
96 color = pixel.Color(0, 0, 255);
97 break;
98 case STATE_UPDATING:
99 /* purple */
100 color = pixel.Color(255, 0, 255);
101 break;
102 }
103 }
104
105 if (color != cur_color)
106 pixel_set_rgb(color);
107}