48 lines
1.1 KiB
Python
48 lines
1.1 KiB
Python
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()
|