40 lines
1.3 KiB
Python
40 lines
1.3 KiB
Python
import logging
|
|
import time
|
|
from datetime import datetime, timedelta
|
|
from pathlib import Path
|
|
|
|
import h5py
|
|
|
|
from . import protocols
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def start_processing(
|
|
file_path: Path,
|
|
csi_callback: protocols.CSICallback | None = None,
|
|
) -> None:
|
|
logger.info(f"Replaying CSI data from {file_path}")
|
|
with h5py.File(file_path, "r") as file:
|
|
try:
|
|
for key in file:
|
|
datetime.fromisoformat(key)
|
|
except ValueError as e:
|
|
logger.exception(
|
|
"The file provided was not generated using this software", e
|
|
)
|
|
|
|
start_time = datetime.fromisoformat(list(file.keys())[0])
|
|
target_offset = datetime.now() - start_time
|
|
for key in file:
|
|
logger.debug(f"Sending data from {key} at {datetime.now().isoformat()}")
|
|
csi_callback(file[key][:])
|
|
curr_time_virtual = datetime.fromisoformat(key)
|
|
new_offset = datetime.now() - curr_time_virtual
|
|
logger.debug(f"New offset {new_offset}, target is {target_offset}")
|
|
if new_offset > target_offset + timedelta(seconds=1):
|
|
logger.warning(
|
|
f"Data is {new_offset - target_offset} behind, lagging behind..."
|
|
)
|
|
time.sleep(max(0, (target_offset - new_offset).total_seconds()))
|