Pico Led Controller 1.0.3
A project to control LEDs using Raspberry Pi Pico W
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 
12 const 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 
39 const 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 
69 const 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 
134 const 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 
220 const 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 
259 const 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 
265 const 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 
271 const 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 
277 const 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 
283 const 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 
289 void cgi_init()
290 {
291  http_set_cgi_handlers(cgi_handlers, LWIP_ARRAYSIZE(cgi_handlers));
292 }
const char * cgi_favicon_handler(int iIndex, int iNumParams, char *pcParam[], char *pcValue[])
CGI favicon handler.
Definition: cgi.c:259
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_led_mode_handler(int iIndex, int iNumParams, char *pcParam[], char *pcValue[])
CGI LED mode handler.
Definition: cgi.c:69
const char * cgi_led_handler(int iIndex, int iNumParams, char *pcParam[], char *pcValue[])
CGI LED handler.
Definition: cgi.c:39
const char * cgi_timestamp_handler(int iIndex, int iNumParams, char *pcParam[], char *pcValue[])
CGI timestamp handler.
Definition: cgi.c:283
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_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
void cgi_init()
Initialize CGI handlers.
Definition: cgi.c:289
const char * cgi_manifest_handler(int iIndex, int iNumParams, char *pcParam[], char *pcValue[])
CGI manifest handler.
Definition: cgi.c:271
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