/** * Block 4: Integration und Flashen der Firmware auf ESP32-C5 * * Ziel: C-ITS Sniffer Firmware für ESP32-C5 compilieren und flashen */ #include #include #include #include #include #include #include "sdkconfig.h" #include "esp_err.h" #include "esp_log.h" #include "esp_wifi.h" #include "nvs_flash.h" #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "block1_hardware_init.h" #include "block2_cits_parser.h" #include "block3_csv_writer.h" static const char *TAG = "CITS_SNIFER_MAIN"; /** * Sniffer Callback - Wird vom WiFi Promiscuous Mode aufgerufen */ static void sniffer_callback(void *recv_buf, wifi_promiscuous_pkt_type_t type) { wifi_promiscuous_pkt_t *packet = (wifi_promiscuous_pkt_t *)recv_buf; // Nur MISC Typ für 802.11p verarbeiten if (type != WIFI_PKT_MISC) { return; } // Verarbeite C-ITS Nachricht if (packet->payload != NULL && packet->rx_ctrl.sig_len > 0) { cits_process_packet(packet->payload, packet->rx_ctrl.sig_len, packet->rx_ctrl.timestamp / 1000000U, packet->rx_ctrl.timestamp % 1000000U); } } /** * C-ITS Sniffer aufsetzen */ static esp_err_t setup_cits_sniffer(void) { // WiFi Promiscuous Mode starten esp_err_t ret = start_promiscuous_mode(CITS_CHANNEL_0_MHZ); if (ret != ESP_OK) { ESP_LOGE(TAG, "Failed to start promiscuous mode"); return ret; } // C-ITS Parser initialisieren ret = cits_parser_init(); if (ret != ESP_OK) { ESP_LOGE(TAG, "Failed to initialize C-ITS parser"); return ret; } // CSV Writer initialisieren ret = csv_writer_init(); if (ret != ESP_OK) { ESP_LOGE(TAG, "Failed to initialize CSV writer"); return ret; } ESP_LOGI(TAG, "C-ITS Sniffer Setup abgeschlossen"); return ESP_OK; } /** * Hauptfunktion */ void app_main(void) { ESP_LOGI(TAG, "C-ITS Sniffer für ESP32-C5 startet..."); // NVS initialisieren esp_err_t ret = init_nvs_flash(); if (ret != ESP_OK) { ESP_LOGE(TAG, "Failed to initialize NVS"); return; } // WiFi initialisieren ret = initialize_wifi(); if (ret != ESP_OK) { ESP_LOGE(TAG, "Failed to initialize WiFi"); return; } // C-ITS Sniffer aufsetzen ret = setup_cits_sniffer(); if (ret != ESP_OK) { ESP_LOGE(TAG, "Failed to setup C-ITS Sniffer"); return; } // Hauptschleife ESP_LOGI(TAG, "C-ITS Sniffer läuft - Warte auf C-ITS Nachrichten..."); while (1) { vTaskDelay(pdMS_TO_TICKS(1000)); } }