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", ) class Receiver(NamedTuple): ip: str receiver: ingest.FeitReceiver queue: "mp.Queue[ingest.CSI]" receivers = [ Receiver(ip, ingest.FeitReceiver(ip), mp.Queue(config.SAMPLE_RATE)) for ip in config.RECEIVE_IP_ADDRESS_LIST ] # Start injecting CSI frames transmitter = ingest.FeitTransmitter() webapp_queue: "mp.Queue[aoa.AoA]" = mp.Queue(config.SAMPLE_RATE) processor = ingest.CSIProcessor({r.ip: r.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, args=(r.queue,)) for r in receivers ] for proc in receiver_processes: proc.start() processing_thread = mp.Process(target=processor.process_forever) processing_thread.start()