Files
v2x-sniffer/v2x_fw/include/v2x_db.h
T
Clawdia 874dd969b6 SD-Karte: V2X-Frames direkt auf SD speichern (CSV, autonom)
- NVS-Flash (4MB) durch SD-Karte via SDMMC ersetzt
- GPIO: SD_CMD=2, SD_CLK=6, SD_D0=7, SD_CS=23
- CSV-Ausgabe mit Rohdaten-Hex: timestamp, msg_type, channel, RSSI, MAC, raw_hex
- Channel-Hopping über alle 10 V2X-Kanäle (5845-5925 MHz)
- CSV-Auto-Rotation bei >50MB
- v2x_log.txt mit periodischen Statistiken
- Frame Queue (64 Frames) zwischen Promisc-CB und Writer Task
- Kanal-Hopper, Stats-Task, Frame-Writer als eigene Tasks
- README mit SD-Vorbereitung und Analyse-Hinweisen
2026-05-09 08:44:24 +02:00

74 lines
2.0 KiB
C

#ifndef V2X_DB_H
#define V2X_DB_H
#include <stdint.h>
#include <stdbool.h>
#include <sys/types.h>
#define V2X_MAX_FRAME_LEN 320
#define SD_CARD_MOUNT_POINT "/sdcard"
#define SD_CSV_FILE "/sdcard/v2x_frames.csv"
#define SD_LOG_FILE "/sdcard/v2x_log.txt"
#define CSV_LINE_MAX 512
#define RAW_HEX_BUF 2048
/* Message-Typen */
typedef enum {
V2X_MSG_UNKNOWN = 0,
V2X_MSG_BSM = 1,
V2X_MSG_CAM = 2,
V2X_MSG_DENM = 3,
V2X_MSG_SOA3 = 4,
V2X_MSG_SAE2619 = 5,
V2X_MSG_SAE2725 = 6,
} v2x_msg_type_t;
/* Ein Frame: alle Felder werden in CSV geschrieben */
typedef struct {
uint64_t timestamp_us; /* esp_timer_get_time() */
uint8_t msg_type; /* V2X_MSG_* */
uint8_t channel; /* 157-164 (5 GHz) oder 17/18 (4300 MHz) */
float frequency_mhz; /* z.B. 5845.0 */
int8_t rssi_dbm;
int8_t noise_dbm;
uint8_t rate_index;
uint16_t frame_len; /* 802.11 PDU length */
uint8_t mac_addr[6]; /* Source MAC */
uint8_t bssid[6]; /* BSSID */
uint8_t raw_data[V2X_MAX_FRAME_LEN];
uint16_t raw_len;
} v2x_frame_t;
#define CSV_HEADER \
"timestamp_us,msg_type,channel,frequency_mhz,rssi_dbm,noise_dbm,rate_index,frame_len,mac_addr,bssid,raw_hex"
/* === SD-Karte === */
esp_err_t v2x_sd_init(void);
/* === CSV-Schreiber === */
esp_err_t v2x_sd_write_frame(const v2x_frame_t *frame);
/* === Log === */
esp_err_t v2x_sd_log_write(const char *fmt, ...);
/* === Statistik === */
typedef struct {
uint32_t total_frames;
uint32_t cam_count;
uint32_t denm_count;
uint32_t bsm_count;
uint32_t unknown_count;
uint32_t sd_write_errors;
uint64_t start_timestamp_us;
} v2x_stats_t;
const v2x_stats_t* v2x_sd_get_stats(void);
void v2x_sd_reset_stats(void);
esp_err_t v2x_sd_dump_stats(void);
/* === Hilfsfunktionen === */
void frame_to_csv_line(const v2x_frame_t *frame, char *out, size_t out_len);
#endif /* V2X_DB_H */