75 lines
2.0 KiB
C
75 lines
2.0 KiB
C
#include "lwip/apps/httpd.h"
|
|
#include "pico/stdlib.h"
|
|
#include "pico/cyw43_arch.h"
|
|
#include "lwipopts.h"
|
|
#include "ssi.h"
|
|
#include "cgi.h"
|
|
#include "FreeRTOS.h"
|
|
#include "task.h"
|
|
|
|
#include "car_config.h"
|
|
|
|
// print assigned ip addr
|
|
void print_ip_address() {
|
|
struct netif *netif = netif_list;
|
|
while (netif != NULL) {
|
|
if (netif_is_up(netif)) {
|
|
printf("IP Address: %s\n", ipaddr_ntoa(&(netif->ip_addr)));
|
|
}
|
|
netif = netif->next;
|
|
}
|
|
}
|
|
|
|
// initializes server and handlers
|
|
static void webserver_run(void *params){
|
|
car_struct_t *car_struct = (car_struct_t *)params;
|
|
|
|
// Initialize web server
|
|
httpd_init();
|
|
printf("Http server initialized\n");
|
|
|
|
// Configure SSI and CGI handler
|
|
ssi_init(&car_struct);
|
|
printf("SSI Handler initialized\n");
|
|
cgi_init(&car_struct);
|
|
printf("CGI Handler initialized\n");
|
|
|
|
// Infinite loop
|
|
while (1) {
|
|
// Add any required delay or use other FreeRTOS features here if needed
|
|
vTaskDelay(pdMS_TO_TICKS(1000));
|
|
}
|
|
}
|
|
// webserver task connect wifi & start webserver_run
|
|
static void webserver_task(void *params){
|
|
car_struct_t *car_struct = (car_struct_t *)params;
|
|
if (cyw43_arch_init())
|
|
{
|
|
printf("failed to initialise\n");
|
|
return;
|
|
}
|
|
|
|
cyw43_arch_enable_sta_mode();
|
|
|
|
printf("Connecting to WiFi...\n");
|
|
|
|
// Connect to the WiFI network - loop until connected
|
|
while (cyw43_arch_wifi_connect_timeout_ms(WIFI_SSID, WIFI_PASSWORD, CYW43_AUTH_WPA2_AES_PSK, 30000) != 0) {
|
|
printf("Attempting to connect...\n");
|
|
}
|
|
// Print a success message once connected
|
|
printf("Connected! \n");
|
|
print_ip_address();
|
|
|
|
webserver_run(&car_struct);
|
|
cyw43_arch_deinit();
|
|
}
|
|
|
|
// frontend initialize - create task
|
|
void webserver_init(void *params)
|
|
{
|
|
car_struct_t *car_struct = (car_struct_t *)params;
|
|
// Create the FreeRTOS task for the web server
|
|
TaskHandle_t task_handle;
|
|
xTaskCreate(webserver_task, "WebServerTask", configMINIMAL_STACK_SIZE, (void *)&car_struct, 1, &task_handle);
|
|
} |