dissertation/where_fi/cli/file.py
2025-01-27 17:28:47 +00:00

53 lines
1.3 KiB
Python

import logging
import multiprocessing as mp
import threading
from datetime import datetime
from pathlib import Path
from typing import Any
import numpy as np
import numpy.typing as npt
import typer
from . import globals
app = typer.Typer()
logger = logging.getLogger(__name__)
def write_to_file(path: Path, queue: "mp.Queue[Any]") -> None:
import h5py
with h5py.File(path, "w") as file:
logger.info("Starting writer")
while True:
data = queue.get()
if data is None:
break
logger.info("Writing data to file")
file.create_dataset(datetime.now().isoformat(), data=data)
logger.info("Writer stopped")
@app.command()
def capture(output_path: Path) -> None:
"""Capture CSI data to a file"""
logger.info(f"Capturing data to {output_path}")
queue: "mp.Queue[None | npt.NDArray[np.complex128]]" = mp.Queue()
writer = threading.Thread(
target=write_to_file,
args=(
output_path,
queue,
),
)
writer.start()
def callback(antenna_data: npt.NDArray[np.complex128]) -> None:
logger.info(f"Got final CSI data with shape {antenna_data.shape}")
queue.put(antenna_data)
globals.csi_producer(csi_callback=callback)
queue.put(None)