Pico Led Controller 1.0.3
A project to control LEDs using Raspberry Pi Pico W
Loading...
Searching...
No Matches
cgi.c
Go to the documentation of this file.
1#include "cgi.h"
2
3#include <stdio.h>
4
5#include "lwip/apps/httpd.h"
6#include "pico/cyw43_arch.h"
7#include "hardware/adc.h"
8
9#include "light_state.h"
10#include "blink.h"
11
12const char* cgi_onboard_led_handler(int iIndex, int iNumParams, char* pcParam[], char* pcValue[])
13{
14 printf("Handling onboard LED request\n");
15 for (int i = 0; i < iNumParams; ++i)
16 {
17 if (!strcmp(pcParam[i], "toggle"))
18 {
19 printf("Toggling onboard LED\n");
20 cyw43_arch_gpio_put(CYW43_WL_GPIO_LED_PIN, !cyw43_arch_gpio_get(CYW43_WL_GPIO_LED_PIN));
21 break;
22 }
23 else if (!strcmp(pcParam[i], "on"))
24 {
25 printf("Turning onboard LED on\n");
26 cyw43_arch_gpio_put(CYW43_WL_GPIO_LED_PIN, 1);
27 break;
28 }
29 else if (!strcmp(pcParam[i], "off"))
30 {
31 printf("Turning onboard LED off\n");
32 cyw43_arch_gpio_put(CYW43_WL_GPIO_LED_PIN, 0);
33 break;
34 }
35 }
36 return "/index.html";
37}
38
39const char* cgi_led_handler(int iIndex, int iNumParams, char* pcParam[], char* pcValue[])
40{
41 printf("Handling LED request\n");
42 for (int i = 0; i < iNumParams; ++i)
43 {
44 if (!strcmp(pcParam[i], "toggle"))
45 {
46 printf("Toggling LED strip\n");
47 if (light_state.state == false && light_state.brightness == 0)
50 break;
51 }
52 else if (!strcmp(pcParam[i], "on"))
53 {
54 printf("Turning LED strip on\n");
55 light_state.state = true;
56 break;
57 }
58 else if (!strcmp(pcParam[i], "off"))
59 {
60 printf("Turning LED strip off\n");
61 light_state.state = false;
63 break;
64 }
65 }
66 return "/index.html";
67}
68
69const char* cgi_led_mode_handler(int iIndex, int iNumParams, char* pcParam[], char* pcValue[])
70{
71 printf("Handling mode request\n");
72 for (int i = 0; i < iNumParams; ++i)
73 {
74 if (!strcmp(pcParam[i], "rainbow-wheel"))
75 {
76 printf("Setting rainbow wheel mode\n");
77 light_state.state = true;
79 break;
80 }
81 else if (!strcmp(pcParam[i], "rainbow-cycle"))
82 {
83 printf("Setting rainbow cycle mode\n");
84 light_state.state = true;
86 break;
87 }
88 else if (!strcmp(pcParam[i], "static"))
89 {
90 printf("Setting static mode\n");
91 light_state.state = true;
93 break;
94 }
95 else if (!strcmp(pcParam[i], "breathing"))
96 {
97 printf("Setting breathing mode\n");
98 light_state.state = true;
100 break;
101 }
102 else if (!strcmp(pcParam[i], "flashing"))
103 {
104 printf("Setting flashing mode\n");
105 light_state.state = true;
107 break;
108 }
109 else if (!strcmp(pcParam[i], "loading"))
110 {
111 printf("Setting loading mode\n");
112 light_state.state = true;
114 break;
115 }
116 else if (!strcmp(pcParam[i], "wave"))
117 {
118 printf("Setting wave mode\n");
119 light_state.state = true;
121 break;
122 }
123 else if (!strcmp(pcParam[i], "fade"))
124 {
125 printf("Setting fade mode\n");
126 light_state.state = true;
128 break;
129 }
130 }
131 return "/index.html";
132}
133
134const char* cgi_led_color_handler(int iIndex, int iNumParams, char* pcParam[], char* pcValue[])
135{
136 printf("Handling color request\n");
137 for (int i = 0; i < iNumParams; ++i)
138 {
139 if (!strcmp(pcParam[i], "red"))
140 {
141 printf("Setting red mode\n");
142 light_state.state = true;
144 break;
145 }
146 else if (!strcmp(pcParam[i], "green"))
147 {
148 printf("Setting green mode\n");
149 light_state.state = true;
151 break;
152 }
153 else if (!strcmp(pcParam[i], "blue"))
154 {
155 printf("Setting blue mode\n");
156 light_state.state = true;
158 break;
159 }
160 else if (!strcmp(pcParam[i], "cyan"))
161 {
162 printf("Setting cyan mode\n");
163 light_state.state = true;
165 break;
166 }
167 else if (!strcmp(pcParam[i], "yellow"))
168 {
169 printf("Setting yellow mode\n");
170 light_state.state = true;
172 break;
173 }
174 else if (!strcmp(pcParam[i], "magenta"))
175 {
176 printf("Setting magenta mode\n");
177 light_state.state = true;
179 break;
180 }
181 else if (!strcmp(pcParam[i], "purple"))
182 {
183 printf("Setting purple mode\n");
184 light_state.state = true;
186 break;
187 }
188 else if (!strcmp(pcParam[i], "pink"))
189 {
190 printf("Setting pink mode\n");
191 light_state.state = true;
193 break;
194 }
195 else if (!strcmp(pcParam[i], "orange"))
196 {
197 printf("Setting orange mode\n");
198 light_state.state = true;
200 break;
201 }
202 else if (!strcmp(pcParam[i], "turquoise"))
203 {
204 printf("Setting turquoise mode\n");
205 light_state.state = true;
207 break;
208 }
209 else if (!strcmp(pcParam[i], "white"))
210 {
211 printf("Setting white mode\n");
212 light_state.state = true;
214 break;
215 }
216 }
217 return "/index.html";
218}
219
220const char* cgi_led_brightness_handler(int iIndex, int iNumParams, char* pcParam[], char* pcValue[])
221{
222 printf("Handling brightness request\n");
223 for (int i = 0; i < iNumParams; ++i)
224 {
225 int brightness = atoi(pcParam[i]);
226 if (brightness < 0 || brightness > 100)
227 printf("Invalid brightness value\n");
228 else
229 {
230 printf("Setting brightness to %d\n", brightness);
231 int scaled_brightness = 0;
232 if (brightness <= 0)
233 {
234 light_state.state = false;
237 }
238 else if (brightness == 100)
239 {
240 scaled_brightness = 255;
241 light_state.state = true;
243 }
244 else
245 {
246 scaled_brightness = (int)(brightness * 255.0 / 100.0) + 1;
247 if (scaled_brightness > 255)
248 scaled_brightness = 255;
249 light_state.state = true;
251 }
252 }
255 }
256 return "/index.html";
257}
258
259const char* cgi_favicon_handler(int iIndex, int iNumParams, char* pcParam[], char* pcValue[])
260{
261 printf("Handling favicon request\n");
262 return "/favicon.ico";
263}
264
265const char* cgi_m_icon_handler(int iIndex, int iNumParams, char* pcParam[], char* pcValue[])
266{
267 printf("Handling m.png\n");
268 return "/m.png";
269}
270
271const char* cgi_manifest_handler(int iIndex, int iNumParams, char* pcParam[], char* pcValue[])
272{
273 printf("Handling manifest request\n");
274 return "/manifest.json";
275}
276
277const char* cgi_data_handler(int iIndex, int iNumParams, char* pcParam[], char* pcValue[])
278{
279 printf("Handling data request\n");
280 return "/data.shtml";
281}
282
283const char* cgi_timestamp_handler(int iIndex, int iNumParams, char* pcParam[], char* pcValue[])
284{
285 printf("Handling start timestamp request\n");
286 return "/timestamp.shtml";
287}
288
290{
291 http_set_cgi_handlers(cgi_handlers, LWIP_ARRAYSIZE(cgi_handlers));
292}
const char * cgi_led_mode_handler(int iIndex, int iNumParams, char *pcParam[], char *pcValue[])
CGI LED mode handler.
Definition cgi.c:69
const char * cgi_led_brightness_handler(int iIndex, int iNumParams, char *pcParam[], char *pcValue[])
CGI LED strip brightness handler.
Definition cgi.c:220
const char * cgi_onboard_led_handler(int iIndex, int iNumParams, char *pcParam[], char *pcValue[])
CGI onboard LED handler.
Definition cgi.c:12
const char * cgi_timestamp_handler(int iIndex, int iNumParams, char *pcParam[], char *pcValue[])
CGI timestamp handler.
Definition cgi.c:283
const char * cgi_data_handler(int iIndex, int iNumParams, char *pcParam[], char *pcValue[])
CGI data handler.
Definition cgi.c:277
const char * cgi_led_color_handler(int iIndex, int iNumParams, char *pcParam[], char *pcValue[])
CGI LED color handler.
Definition cgi.c:134
const char * cgi_manifest_handler(int iIndex, int iNumParams, char *pcParam[], char *pcValue[])
CGI manifest handler.
Definition cgi.c:271
const char * cgi_m_icon_handler(int iIndex, int iNumParams, char *pcParam[], char *pcValue[])
CGI m icon handler.
Definition cgi.c:265
const char * cgi_favicon_handler(int iIndex, int iNumParams, char *pcParam[], char *pcValue[])
CGI favicon handler.
Definition cgi.c:259
const char * cgi_led_handler(int iIndex, int iNumParams, char *pcParam[], char *pcValue[])
CGI LED handler.
Definition cgi.c:39
void cgi_init()
Initialize CGI handlers.
Definition cgi.c:289
static const tCGI cgi_handlers[]
CGI handlers.
Definition cgi.h:120
void toggle_light_state()
Toggle light state.
Definition light_state.c:10
void set_light_mode(enum light_modes mode)
Set light mode.
Definition light_state.c:31
#define NUM_PIXELS
Definition light_state.h:4
void set_light_color(enum light_colors color)
Set light color.
Definition light_state.c:68
@ MODE_RAINBOW_CYCLE
Definition light_state.h:20
@ MODE_FLASHING
Definition light_state.h:23
@ MODE_LOADING
Definition light_state.h:24
@ MODE_WAVE
Definition light_state.h:25
@ MODE_BREATHING
Definition light_state.h:22
@ MODE_STATIC
Definition light_state.h:21
@ MODE_RAINBOW_WHEEL
Definition light_state.h:19
@ MODE_FADE
Definition light_state.h:26
@ COLOR_ORANGE
Definition light_state.h:41
@ COLOR_BLUE
Definition light_state.h:36
@ COLOR_PINK
Definition light_state.h:43
@ COLOR_PURPLE
Definition light_state.h:40
@ COLOR_TURQUOISE
Definition light_state.h:42
@ COLOR_MAGENTA
Definition light_state.h:39
@ COLOR_RED
Definition light_state.h:34
@ COLOR_CYAN
Definition light_state.h:37
@ COLOR_YELLOW
Definition light_state.h:38
@ COLOR_GREEN
Definition light_state.h:35
@ COLOR_WHITE
Definition light_state.h:44
volatile struct light_state_t light_state
Light state.
Definition light_state.c:8
uint8_t brightness
Definition light_state.h:59
uint8_t previous_brightness
Definition light_state.h:60
enum light_modes light_mode
Definition light_state.h:61
enum light_colors color
Definition light_state.h:62
void turn_off_all(uint32_t len)
Turn off all leds.
Definition ws2812b.c:23