import logging from ..collection import ingest logger = logging.getLogger(__name__) AntennaIdentifier = tuple[ingest.Host, int] order: list[AntennaIdentifier] = [] prev_unplugged: set[AntennaIdentifier] = set() antenna_average: dict[AntennaIdentifier, float] = {} RSSI_THRESHOLD = 8 def callback(antenna_data: dict[ingest.Host, ingest.CSI]) -> None: global prev_unplugged global antenna_average global order unplugged: set[tuple[ingest.Host, int]] = set() logger.debug( "Antenna RSSI: " + str( { host: (csi.header.rssi1, csi.header.rssi2) for host, csi in antenna_data.items() } ) ) for host, csi in antenna_data.items(): antenna_average[(host, 0)] = ( antenna_average.get((host, 0), csi.header.rssi1) * 0.99 + csi.header.rssi1 * 0.01 ) antenna_average[(host, 1)] = ( antenna_average.get((host, 1), csi.header.rssi2) * 0.99 + csi.header.rssi2 * 0.01 ) if csi.header.rssi1 > antenna_average[(host, 0)] + RSSI_THRESHOLD: unplugged.add((host, 0)) if csi.header.rssi2 > antenna_average[(host, 1)] + RSSI_THRESHOLD: unplugged.add((host, 1)) if prev_unplugged != unplugged: if len(prev_unplugged) > len(unplugged): logger.info(f"Antenna plugged in: {prev_unplugged - unplugged}") else: logger.info(f"Antenna unplugged: {unplugged - prev_unplugged}") diff = list(unplugged - prev_unplugged) if len(diff) == 1 and diff[0] not in order: host, antenna = diff.pop() order.append((host, antenna)) logger.info(f"Current order: {order}") prev_unplugged = unplugged def main() -> None: ingest.start_processing(pre_merge_callback=callback)