kamil_adc support added
This commit is contained in:
@@ -7,20 +7,29 @@ VENV_PYTHON="${PROJECT_ROOT}/.venv/bin/python"
|
||||
VENV_PIP="${PROJECT_ROOT}/.venv/bin/pip"
|
||||
GUI_ENTRY="${PROJECT_ROOT}/python_app/gui/main.py"
|
||||
REQUIREMENTS_FILE="${PROJECT_ROOT}/requirements.txt"
|
||||
PYTHON_CMD=""
|
||||
PROFILE_PATH=""
|
||||
|
||||
SKIP_BUILD=0
|
||||
BUILD_ONLY=0
|
||||
CLEAN_SHM=0
|
||||
KAMIL_ADC_MODE=0
|
||||
AUTO_START=0
|
||||
PRODUCER_ONLY=0
|
||||
|
||||
print_usage() {
|
||||
cat <<'EOF'
|
||||
Usage: ./start.sh [options]
|
||||
|
||||
Options:
|
||||
--skip-build Skip C++ build step and only run GUI
|
||||
--build-only Build C++ binaries and exit
|
||||
--clean-shm Remove known radar shared-memory segments before start
|
||||
-h, --help Show this help
|
||||
--kamil-adc Use the Raspberry Pi Kamil ADC profile
|
||||
--profile PATH Use a specific GUI/run config profile
|
||||
--auto-start Start the GUI pipeline automatically after launch
|
||||
--producer-only Run only the raw producer selected by the profile
|
||||
--skip-build Skip C++ build step
|
||||
--build-only Build C++ binaries and exit
|
||||
--clean-shm Remove known radar shared-memory segments before start
|
||||
-h, --help Show this help
|
||||
EOF
|
||||
}
|
||||
|
||||
@@ -36,6 +45,23 @@ parse_args() {
|
||||
--clean-shm)
|
||||
CLEAN_SHM=1
|
||||
;;
|
||||
--kamil-adc)
|
||||
KAMIL_ADC_MODE=1
|
||||
;;
|
||||
--profile)
|
||||
if (($# < 2)); then
|
||||
echo "--profile requires a path argument." >&2
|
||||
exit 1
|
||||
fi
|
||||
PROFILE_PATH="$2"
|
||||
shift
|
||||
;;
|
||||
--auto-start)
|
||||
AUTO_START=1
|
||||
;;
|
||||
--producer-only)
|
||||
PRODUCER_ONLY=1
|
||||
;;
|
||||
-h|--help)
|
||||
print_usage
|
||||
exit 0
|
||||
@@ -50,6 +76,35 @@ parse_args() {
|
||||
done
|
||||
}
|
||||
|
||||
absolute_path() {
|
||||
local path="$1"
|
||||
if [[ "${path}" = /* ]]; then
|
||||
printf '%s\n' "${path}"
|
||||
return
|
||||
fi
|
||||
printf '%s\n' "${PROJECT_ROOT}/${path}"
|
||||
}
|
||||
|
||||
resolve_profile_path() {
|
||||
if ((KAMIL_ADC_MODE == 1)); then
|
||||
if [[ -z "${PROFILE_PATH}" ]]; then
|
||||
if [[ -f "${PROJECT_ROOT}/run_config_kamil_adc.pi.json" ]]; then
|
||||
PROFILE_PATH="${PROJECT_ROOT}/run_config_kamil_adc.pi.json"
|
||||
else
|
||||
PROFILE_PATH="${PROJECT_ROOT}/run_config_kamil_adc.example.json"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ -n "${PROFILE_PATH}" ]]; then
|
||||
PROFILE_PATH="$(absolute_path "${PROFILE_PATH}")"
|
||||
if [[ ! -f "${PROFILE_PATH}" ]]; then
|
||||
echo "Config profile not found: ${PROFILE_PATH}" >&2
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
check_environment() {
|
||||
if ! command -v python3 >/dev/null 2>&1; then
|
||||
echo "python3 is not installed or not found in PATH." >&2
|
||||
@@ -68,6 +123,13 @@ check_environment() {
|
||||
}
|
||||
|
||||
ensure_python_dependencies() {
|
||||
local dependency_check
|
||||
if ((KAMIL_ADC_MODE == 1)); then
|
||||
dependency_check='import numpy, serial, PyQt6, pyqtgraph, usb1'
|
||||
else
|
||||
dependency_check='import numpy, serial, PyQt6, pyqtgraph, usb1, pyvisa'
|
||||
fi
|
||||
|
||||
if [[ ! -x "${VENV_PYTHON}" ]]; then
|
||||
echo "[start.sh] Creating virtual environment..."
|
||||
python3 -m venv "${PROJECT_ROOT}/.venv"
|
||||
@@ -78,9 +140,19 @@ ensure_python_dependencies() {
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "[start.sh] Installing Python dependencies..."
|
||||
"${VENV_PIP}" install --upgrade pip
|
||||
"${VENV_PIP}" install -r "${REQUIREMENTS_FILE}"
|
||||
if ! "${VENV_PYTHON}" -c "${dependency_check}" >/dev/null 2>&1; then
|
||||
echo "[start.sh] Installing Python dependencies into virtual environment..."
|
||||
"${VENV_PIP}" install --upgrade pip
|
||||
"${VENV_PIP}" install -r "${REQUIREMENTS_FILE}"
|
||||
fi
|
||||
|
||||
if ! "${VENV_PYTHON}" -c "${dependency_check}" >/dev/null 2>&1; then
|
||||
echo "Required Python dependencies are still unavailable in virtual environment: ${PROJECT_ROOT}/.venv" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
PYTHON_CMD="${VENV_PYTHON}"
|
||||
echo "[start.sh] Using virtual environment: ${PYTHON_CMD}"
|
||||
}
|
||||
|
||||
run_privileged() {
|
||||
@@ -170,19 +242,57 @@ build_cpp_binaries() {
|
||||
|
||||
cleanup_known_shm() {
|
||||
echo "[start.sh] Cleaning known shared-memory segments..."
|
||||
rm -f /dev/shm/radar_raw /dev/shm/radar_preprocessed /dev/shm/radar_results || true
|
||||
rm -f \
|
||||
/dev/shm/radar_raw \
|
||||
/dev/shm/radar_raw_tap \
|
||||
/dev/shm/radar_preprocessed \
|
||||
/dev/shm/radar_preprocessed_tap \
|
||||
/dev/shm/radar_results \
|
||||
/dev/shm/radar_raw_kamil_adc \
|
||||
/dev/shm/radar_raw_tap_kamil_adc \
|
||||
/dev/shm/radar_preprocessed_kamil_adc \
|
||||
/dev/shm/radar_preprocessed_tap_kamil_adc \
|
||||
/dev/shm/radar_results_kamil_adc \
|
||||
|| true
|
||||
}
|
||||
|
||||
run_gui() {
|
||||
if [[ -n "${PROFILE_PATH}" ]]; then
|
||||
export RADAR_SYSTEM_PROFILE="${PROFILE_PATH}"
|
||||
echo "[start.sh] Using config profile: ${PROFILE_PATH}"
|
||||
fi
|
||||
if ((AUTO_START == 1)); then
|
||||
export RADAR_SYSTEM_AUTO_START=1
|
||||
echo "[start.sh] GUI auto-start is enabled."
|
||||
fi
|
||||
|
||||
echo "[start.sh] Launching GUI..."
|
||||
exec "${VENV_PYTHON}" "${GUI_ENTRY}"
|
||||
exec "${PYTHON_CMD}" "${GUI_ENTRY}"
|
||||
}
|
||||
|
||||
run_producer_only() {
|
||||
if ((KAMIL_ADC_MODE != 1)); then
|
||||
echo "--producer-only currently requires --kamil-adc." >&2
|
||||
exit 1
|
||||
fi
|
||||
if [[ -z "${PROFILE_PATH}" ]]; then
|
||||
echo "--producer-only requires a resolved config profile." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
export PYTHONPATH="${PROJECT_ROOT}${PYTHONPATH:+:${PYTHONPATH}}"
|
||||
echo "[start.sh] Starting Kamil ADC raw producer with profile: ${PROFILE_PATH}"
|
||||
exec "${PYTHON_CMD}" -m python_app.scripts.kamil_adc_raw_producer --config "${PROFILE_PATH}"
|
||||
}
|
||||
|
||||
main() {
|
||||
parse_args "$@"
|
||||
resolve_profile_path
|
||||
check_environment
|
||||
ensure_system_dependencies
|
||||
ensure_usb_access_rules
|
||||
if ((KAMIL_ADC_MODE == 0)); then
|
||||
ensure_system_dependencies
|
||||
ensure_usb_access_rules
|
||||
fi
|
||||
ensure_python_dependencies
|
||||
|
||||
if ((CLEAN_SHM == 1)); then
|
||||
@@ -198,6 +308,10 @@ main() {
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if ((PRODUCER_ONLY == 1)); then
|
||||
run_producer_only
|
||||
fi
|
||||
|
||||
run_gui
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user