Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions template/Board/Corstone-300/vsi/python/arm_vsi3.py
Original file line number Diff line number Diff line change
Expand Up @@ -215,6 +215,7 @@ def _build_sdsio_request(command: int, sid: int = 0, argument: int = 0, data: by
Stream = sdsio_manager(
work_dir=_work_dir,
auto_playback=_auto_playback,
exit_after_playback=True,
play_list=_play_list,
mon_port=None,
write_flush_records=_write_flush_records,
Expand Down
34 changes: 23 additions & 11 deletions template/Board/Corstone-300/vsi/python/sdsio.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
# ---------------------------------------------------------------------------- #
# SDSIO server-compatible stream implementation #
# ---------------------------------------------------------------------------- #
SDSIO_VSI_VERSION = "3.0.1-dev6"
SDSIO_VSI_VERSION = "3.0.1-dev7"

class StreamInfo(NamedTuple):
name: str = None
Expand Down Expand Up @@ -167,14 +167,17 @@ def request_auto_playback_start(self) -> bool:
self._auto_start_pending = True
return True

def request_auto_playback_terminate(self) -> bool:
def request_auto_playback_terminate(self, _force=False) -> bool:
with self._lock:
if not self._auto_playback:
return False
if self._auto_start_pending or self._auto_terminate_pending:
return False
if self._target_flags & SDS_FLAG_MASK_START:
if self._auto_terminate_pending:
return False
if not _force:
if self._auto_start_pending:
return False
if self._target_flags & SDS_FLAG_MASK_START:
return False
self._set |= SDS_FLAG_MASK_CI_TERMINATE
self._clear &= ~SDS_FLAG_MASK_CI_TERMINATE
self._auto_terminate_pending = True
Expand Down Expand Up @@ -503,13 +506,16 @@ def _request_auto_playback_if_needed(self, target_flags: Optional[int] = None):
if self._flags.request_auto_playback_terminate():
_complete_msg = "Playback complete - no more steps remaining." if self._play_list else "Playback complete."
logger.info(_complete_msg)
if self._exit_after_playback:
logger.info("SDSIO-Server terminating (playback complete).")
self._send_ci_terminate_on_shutdown = True
self.shutdown_requested.set()
if self._loop and self._main_task:
self._loop.call_soon_threadsafe(self._main_task.cancel)
self._request_exit_after_playback("playback complete")

def _request_exit_after_playback(self, _reason: str):
if not self._exit_after_playback:
return
logger.info(f"SDSIO-Server terminating ({_reason}).")
self._send_ci_terminate_on_shutdown = True
self.shutdown_requested.set()
if self._loop and self._main_task:
self._loop.call_soon_threadsafe(self._main_task.cancel)
def _open(self, mode, name):
_cmd = CMD_OPEN
# prepare error response
Expand Down Expand Up @@ -557,6 +563,8 @@ def _open(self, mode, name):
self._rec_dir = self._work_dir
else:
logger.error(f"Open Failed. End of playlist. No more steps available for playback stream '{name}'.")
if self._exit_after_playback and self._flags.request_auto_playback_terminate(_force=True):
self._request_exit_after_playback("playback data unavailable")
return _resp_err
else:
_set_flags = 0
Expand All @@ -574,6 +582,8 @@ def _open(self, mode, name):
logger.error(f"Open Failed. No more files available for playback stream '{name}'.")
else:
logger.error(f"Open Failed. No files found for playback stream '{name}'.")
if self._exit_after_playback and self._flags.request_auto_playback_terminate(_force=True):
self._request_exit_after_playback("playback data unavailable")
return _resp_err
self._label_list = _play_label_list
if _index_based_playback and self._play_step_index == 0:
Expand Down Expand Up @@ -636,6 +646,8 @@ def _open(self, mode, name):
for _sds_file_path in _file_paths:
if not path.exists(_sds_file_path):
logger.error(f"Missing file for playback stream '{name}': {self._format_path(_sds_file_path)}")
if self._exit_after_playback and self._flags.request_auto_playback_terminate(_force=True):
self._request_exit_after_playback("playback data unavailable")
return _resp_err

if not self._timestamp_boundaries:
Expand Down
1 change: 1 addition & 0 deletions template/Board/Corstone-320/vsi/python/arm_vsi3.py
Original file line number Diff line number Diff line change
Expand Up @@ -215,6 +215,7 @@ def _build_sdsio_request(command: int, sid: int = 0, argument: int = 0, data: by
Stream = sdsio_manager(
work_dir=_work_dir,
auto_playback=_auto_playback,
exit_after_playback=True,
play_list=_play_list,
mon_port=None,
write_flush_records=_write_flush_records,
Expand Down
34 changes: 23 additions & 11 deletions template/Board/Corstone-320/vsi/python/sdsio.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
# ---------------------------------------------------------------------------- #
# SDSIO server-compatible stream implementation #
# ---------------------------------------------------------------------------- #
SDSIO_VSI_VERSION = "3.0.1-dev6"
SDSIO_VSI_VERSION = "3.0.1-dev7"

class StreamInfo(NamedTuple):
name: str = None
Expand Down Expand Up @@ -167,14 +167,17 @@ def request_auto_playback_start(self) -> bool:
self._auto_start_pending = True
return True

def request_auto_playback_terminate(self) -> bool:
def request_auto_playback_terminate(self, _force=False) -> bool:
with self._lock:
if not self._auto_playback:
return False
if self._auto_start_pending or self._auto_terminate_pending:
return False
if self._target_flags & SDS_FLAG_MASK_START:
if self._auto_terminate_pending:
return False
if not _force:
if self._auto_start_pending:
return False
if self._target_flags & SDS_FLAG_MASK_START:
return False
self._set |= SDS_FLAG_MASK_CI_TERMINATE
self._clear &= ~SDS_FLAG_MASK_CI_TERMINATE
self._auto_terminate_pending = True
Expand Down Expand Up @@ -503,13 +506,16 @@ def _request_auto_playback_if_needed(self, target_flags: Optional[int] = None):
if self._flags.request_auto_playback_terminate():
_complete_msg = "Playback complete - no more steps remaining." if self._play_list else "Playback complete."
logger.info(_complete_msg)
if self._exit_after_playback:
logger.info("SDSIO-Server terminating (playback complete).")
self._send_ci_terminate_on_shutdown = True
self.shutdown_requested.set()
if self._loop and self._main_task:
self._loop.call_soon_threadsafe(self._main_task.cancel)
self._request_exit_after_playback("playback complete")

def _request_exit_after_playback(self, _reason: str):
if not self._exit_after_playback:
return
logger.info(f"SDSIO-Server terminating ({_reason}).")
self._send_ci_terminate_on_shutdown = True
self.shutdown_requested.set()
if self._loop and self._main_task:
self._loop.call_soon_threadsafe(self._main_task.cancel)
def _open(self, mode, name):
_cmd = CMD_OPEN
# prepare error response
Expand Down Expand Up @@ -557,6 +563,8 @@ def _open(self, mode, name):
self._rec_dir = self._work_dir
else:
logger.error(f"Open Failed. End of playlist. No more steps available for playback stream '{name}'.")
if self._exit_after_playback and self._flags.request_auto_playback_terminate(_force=True):
self._request_exit_after_playback("playback data unavailable")
return _resp_err
else:
_set_flags = 0
Expand All @@ -574,6 +582,8 @@ def _open(self, mode, name):
logger.error(f"Open Failed. No more files available for playback stream '{name}'.")
else:
logger.error(f"Open Failed. No files found for playback stream '{name}'.")
if self._exit_after_playback and self._flags.request_auto_playback_terminate(_force=True):
self._request_exit_after_playback("playback data unavailable")
return _resp_err
self._label_list = _play_label_list
if _index_based_playback and self._play_step_index == 0:
Expand Down Expand Up @@ -636,6 +646,8 @@ def _open(self, mode, name):
for _sds_file_path in _file_paths:
if not path.exists(_sds_file_path):
logger.error(f"Missing file for playback stream '{name}': {self._format_path(_sds_file_path)}")
if self._exit_after_playback and self._flags.request_auto_playback_terminate(_force=True):
self._request_exit_after_playback("playback data unavailable")
return _resp_err

if not self._timestamp_boundaries:
Expand Down
34 changes: 23 additions & 11 deletions utilities/sdsio-server.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@
import termios
import tty

SDSIO_SERVER_VERSION = "3.0.1-dev6"
SDSIO_SERVER_VERSION = "3.0.1-dev7"

class StreamInfo(NamedTuple):
name: str = None
Expand Down Expand Up @@ -462,14 +462,17 @@ def request_auto_playback_start(self) -> bool:
self._auto_start_pending = True
return True

def request_auto_playback_terminate(self) -> bool:
def request_auto_playback_terminate(self, _force=False) -> bool:
with self._lock:
if not self._auto_playback:
return False
if self._auto_start_pending or self._auto_terminate_pending:
return False
if self._target_flags & SDS_FLAG_MASK_START:
if self._auto_terminate_pending:
return False
if not _force:
if self._auto_start_pending:
return False
if self._target_flags & SDS_FLAG_MASK_START:
return False
self._set |= SDS_FLAG_MASK_CI_TERMINATE
self._clear &= ~SDS_FLAG_MASK_CI_TERMINATE
self._auto_terminate_pending = True
Expand Down Expand Up @@ -913,13 +916,16 @@ def _request_auto_playback_if_needed(self, target_flags: Optional[int] = None):
if self._flags.request_auto_playback_terminate():
_complete_msg = "Playback complete - no more steps remaining." if self._play_list else "Playback complete."
logger.info(_complete_msg)
if self._exit_after_playback:
logger.info("SDSIO-Server terminating (playback complete).")
self._send_ci_terminate_on_shutdown = True
self.shutdown_requested.set()
if self._loop and self._main_task:
self._loop.call_soon_threadsafe(self._main_task.cancel)
self._request_exit_after_playback("playback complete")

def _request_exit_after_playback(self, _reason: str):
if not self._exit_after_playback:
return
logger.info(f"SDSIO-Server terminating ({_reason}).")
self._send_ci_terminate_on_shutdown = True
self.shutdown_requested.set()
if self._loop and self._main_task:
self._loop.call_soon_threadsafe(self._main_task.cancel)
def _open(self, mode, name):
_cmd = CMD_OPEN
# prepare error response
Expand Down Expand Up @@ -967,6 +973,8 @@ def _open(self, mode, name):
self._rec_dir = self._work_dir
else:
logger.error(f"Open Failed. End of playlist. No more steps available for playback stream '{name}'.")
if self._exit_after_playback and self._flags.request_auto_playback_terminate(_force=True):
self._request_exit_after_playback("playback data unavailable")
return _resp_err
else:
_set_flags = 0
Expand All @@ -984,6 +992,8 @@ def _open(self, mode, name):
logger.error(f"Open Failed. No more files available for playback stream '{name}'.")
else:
logger.error(f"Open Failed. No files found for playback stream '{name}'.")
if self._exit_after_playback and self._flags.request_auto_playback_terminate(_force=True):
self._request_exit_after_playback("playback data unavailable")
return _resp_err
self._label_list = _play_label_list
if _index_based_playback and self._play_step_index == 0:
Expand Down Expand Up @@ -1046,6 +1056,8 @@ def _open(self, mode, name):
for _sds_file_path in _file_paths:
if not path.exists(_sds_file_path):
logger.error(f"Missing file for playback stream '{name}': {self._format_path(_sds_file_path)}")
if self._exit_after_playback and self._flags.request_auto_playback_terminate(_force=True):
self._request_exit_after_playback("playback data unavailable")
return _resp_err

if not self._timestamp_boundaries:
Expand Down
Loading