Program Listing for File wifi_sniffer.c

Return to documentation for file (components/wifi_sniffer/wifi_sniffer.c)

// main.c
#include <stdio.h>
#include "nvs_flash.h"
#include "esp_netif.h"
#include "esp_event.h"
#include "esp_wifi.h"
#include "esp_log.h"

#include "wifi.h"       //wifi_mgr_init()
#include "sniffer.h"    //sniffer_init()
#include "cmd.h"        //command_init()
#include "usb_cdc.h"    //usb_cdc_init()


static const char *TAG = "WIFI_SNIF";

void wifi_sniffer_init(void)
{
    // STEP.1 NVS Flash Initializatio
    esp_err_t ret = nvs_flash_init();
    if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) {
        ESP_ERROR_CHECK(nvs_flash_erase());
        ret = nvs_flash_init();
    }
    ESP_ERROR_CHECK(ret);
    ESP_LOGW(TAG, "NVS initialized");

    // STEP.2 Initialize USB CDC before WiFi
    usb_cdc_init();

    // STEP.3 Network Interface initialization/ESP Event Loop initialization
    ESP_ERROR_CHECK(esp_netif_init());
    ESP_ERROR_CHECK(esp_event_loop_create_default());

    // STEP.4 Initialize Wi-Fi driver in NULL mode
    wifi_init_config_t wcfg = WIFI_INIT_CONFIG_DEFAULT();
    ESP_ERROR_CHECK(esp_wifi_init(&wcfg));
    ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_NULL));
    ESP_ERROR_CHECK(esp_wifi_start());

    // 필요하면 기본 채널 명시적으로 설정 (예: 1ch)
    ESP_ERROR_CHECK(esp_wifi_set_channel(1, WIFI_SECOND_CHAN_NONE));

    // STEP.5 Initialize Sniffer (Ring Buffer, Streamer Task)
    sniffer_init();

    // STEP.6 Enable Promiscuous Mode + Callback
    sniffer_enable_promiscuous();

    // STEP.7 Initialize Wi-Fi Manager (config cache)
    ESP_ERROR_CHECK(wifi_mgr_init());

    // STEP.8 Initialize Command Console
    command_init();

    ESP_LOGW(TAG, "Command console initialized");
}