import logging import multiprocessing as mp from typing import NamedTuple from . import ingest from . import config from . import visualise from . import aoa logging.basicConfig( level=logging.INFO, format="%(asctime)s %(name)-40s %(levelname)-8s %(message)s", ) mp.set_start_method("spawn") class Receiver(NamedTuple): ip: ingest.Host receiver: ingest.FeitReceiver receivers = [ Receiver(ip, ingest.FeitReceiver(ip, mp.Queue(config.SAMPLE_RATE))) for ip in config.RECEIVE_HOSTS ] # Start injecting CSI frames transmitter = ingest.FeitTransmitter() webapp_queue: "mp.Queue[aoa.AoA]" = mp.Queue(config.SAMPLE_RATE) processor = ingest.CSIProcessor( {r.ip: r.receiver.processing_queue for r in receivers}, webapp_queue ) # Start webapp in background process webapp = mp.Process(target=visualise.start, args=(webapp_queue,)) webapp.start() receiver_processes = [mp.Process(target=r.receiver.listen) for r in receivers] for proc in receiver_processes: proc.start() processing_thread = mp.Process(target=processor.process_forever) processing_thread.start()