INF2004_Project/frtos/frontend/frontend.h

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);
}