From bb6586660a9d9d8224d746461665659d8a12ae79 Mon Sep 17 00:00:00 2001 From: adaskar Date: Thu, 4 Dec 2025 15:36:24 +0300 Subject: [PATCH 1/2] feat: make OSDP protocol constants configurable at build time - Add 7 configurable OSDP timeout/retry constants to CMakeLists.txt - Update osdp_config.h.in to use CMake variable substitution for configurable constants - Add command-line options to configure.sh for configurable constants - Keep 10 constants hardcoded (buffer sizes, limits, offsets, short timeouts) as they should not be changed - Maintain full backward compatibility with existing builds - All configurable constants default to their original hardcoded values Configurable constants: - OSDP_PD_SC_RETRY_MS - OSDP_PD_SC_TIMEOUT_MS - OSDP_PD_ONLINE_TOUT_MS - OSDP_CMD_MAX_RETRIES - OSDP_ONLINE_RETRY_WAIT_MAX_MS - OSDP_CMD_RETRY_WAIT_MS - OSDP_FILE_ERROR_RETRY_MAX Hardcoded constants (not configurable): - OSDP_PD_POLL_TIMEOUT_MS (50) - OSDP_RESP_TOUT_MS (200) - OSDP_PACKET_BUF_SIZE (256) - OSDP_RX_RB_SIZE (512) - OSDP_CP_CMD_POOL_SIZE (4) - OSDP_PD_MAX (126) - OSDP_CMD_ID_OFFSET (5) - OSDP_PCAP_LINK_TYPE (162) - OSDP_PD_NAME_MAXLEN (16) - OSDP_MINIMUM_PACKET_SIZE (128) Users can now configure timeout/retry values via: - CMake: -DOSDP_ONLINE_RETRY_WAIT_MAX_MS=3000 - configure.sh: --osdp-online-retry-wait-max-ms 3000 --- CMakeLists.txt | 9 +++++++++ configure.sh | 25 +++++++++++++++++++++++++ src/osdp_config.h.in | 16 ++++++++-------- 3 files changed, 42 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 24849926..b2e2cdb8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -35,6 +35,15 @@ option(OPT_OSDP_STATIC_PD "Setup PD single statically" OFF) option(OPT_OSDP_LIB_ONLY "Only build the library" OFF) option(OPT_BUILD_BARE_METAL "Build library for bare metal targets" OFF) +## OSDP Protocol Configuration Constants +set(OSDP_PD_SC_RETRY_MS "600000" CACHE STRING "PD Secure Channel retry timeout (ms)") +set(OSDP_PD_SC_TIMEOUT_MS "8000" CACHE STRING "PD Secure Channel timeout (ms)") +set(OSDP_PD_ONLINE_TOUT_MS "8000" CACHE STRING "PD online timeout (ms)") +set(OSDP_CMD_MAX_RETRIES "8" CACHE STRING "Maximum command retries") +set(OSDP_ONLINE_RETRY_WAIT_MAX_MS "300000" CACHE STRING "Maximum online retry wait (ms)") +set(OSDP_CMD_RETRY_WAIT_MS "800" CACHE STRING "Command retry wait (ms)") +set(OSDP_FILE_ERROR_RETRY_MAX "10" CACHE STRING "File transfer error retry max") + ## Includes list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") include(AddCCompilerFlag) diff --git a/configure.sh b/configure.sh index e97d65ec..adf99cba 100755 --- a/configure.sh +++ b/configure.sh @@ -29,6 +29,17 @@ usage() { -d, --debug Enable debug builds -f, --force Use this flags to override some checks -h, --help Print this help + + OSDP Protocol Configuration: + --osdp-pd-sc-retry-ms MS Set OSDP_PD_SC_RETRY_MS (default: 600000) + --osdp-pd-poll-timeout-ms MS Set OSDP_PD_POLL_TIMEOUT_MS (default: 50) + --osdp-pd-sc-timeout-ms MS Set OSDP_PD_SC_TIMEOUT_MS (default: 8000) + --osdp-pd-online-tout-ms MS Set OSDP_PD_ONLINE_TOUT_MS (default: 8000) + --osdp-resp-tout-ms MS Set OSDP_RESP_TOUT_MS (default: 200) + --osdp-cmd-max-retries N Set OSDP_CMD_MAX_RETRIES (default: 8) + --osdp-online-retry-wait-max-ms MS Set OSDP_ONLINE_RETRY_WAIT_MAX_MS (default: 300000) + --osdp-cmd-retry-wait-ms MS Set OSDP_CMD_RETRY_WAIT_MS (default: 800) + --osdp-file-error-retry-max N Set OSDP_FILE_ERROR_RETRY_MAX (default: 10) --- } @@ -49,6 +60,13 @@ while [ $# -gt 0 ]; do --static-pd) STATIC_PD=1;; --lib-only) LIB_ONLY=1;; --build-dir) BUILD_DIR=$2; shift;; + --osdp-pd-sc-retry-ms) OSDP_PD_SC_RETRY_MS=$2; shift;; + --osdp-pd-sc-timeout-ms) OSDP_PD_SC_TIMEOUT_MS=$2; shift;; + --osdp-pd-online-tout-ms) OSDP_PD_ONLINE_TOUT_MS=$2; shift;; + --osdp-cmd-max-retries) OSDP_CMD_MAX_RETRIES=$2; shift;; + --osdp-online-retry-wait-max-ms) OSDP_ONLINE_RETRY_WAIT_MAX_MS=$2; shift;; + --osdp-cmd-retry-wait-ms) OSDP_CMD_RETRY_WAIT_MS=$2; shift;; + --osdp-file-error-retry-max) OSDP_FILE_ERROR_RETRY_MAX=$2; shift;; -d|--debug) DEBUG=1;; -f|--force) FORCE=1;; -h|--help) usage; exit 0;; @@ -193,6 +211,13 @@ sed -e "s|@PROJECT_VERSION@|${PROJECT_VERSION}|" \ -e "s|@GIT_TAG@|${GIT_TAG}|" \ -e "s|@GIT_DIFF@|${GIT_DIFF}|" \ -e "s|@REPO_ROOT@|${SCRIPT_DIR}|" \ + -e "s|@OSDP_PD_SC_RETRY_MS@|${OSDP_PD_SC_RETRY_MS:-600000}|" \ + -e "s|@OSDP_PD_SC_TIMEOUT_MS@|${OSDP_PD_SC_TIMEOUT_MS:-8000}|" \ + -e "s|@OSDP_PD_ONLINE_TOUT_MS@|${OSDP_PD_ONLINE_TOUT_MS:-8000}|" \ + -e "s|@OSDP_CMD_MAX_RETRIES@|${OSDP_CMD_MAX_RETRIES:-8}|" \ + -e "s|@OSDP_ONLINE_RETRY_WAIT_MAX_MS@|${OSDP_ONLINE_RETRY_WAIT_MAX_MS:-300000}|" \ + -e "s|@OSDP_CMD_RETRY_WAIT_MS@|${OSDP_CMD_RETRY_WAIT_MS:-800}|" \ + -e "s|@OSDP_FILE_ERROR_RETRY_MAX@|${OSDP_FILE_ERROR_RETRY_MAX:-10}|" \ src/osdp_config.h.in > ${BUILD_DIR}/include/osdp_config.h CCFLAGS+=" -I${BUILD_DIR}/include" diff --git a/src/osdp_config.h.in b/src/osdp_config.h.in index 597fc1ef..422ffd23 100644 --- a/src/osdp_config.h.in +++ b/src/osdp_config.h.in @@ -22,22 +22,22 @@ /** * @brief Other OSDP constants */ -#define OSDP_PD_SC_RETRY_MS (600 * 1000u) +#define OSDP_PD_SC_RETRY_MS (@OSDP_PD_SC_RETRY_MS@u) #define OSDP_PD_POLL_TIMEOUT_MS (50) -#define OSDP_PD_SC_TIMEOUT_MS (8 * 1000u) -#define OSDP_PD_ONLINE_TOUT_MS (8 * 1000u) +#define OSDP_PD_SC_TIMEOUT_MS (@OSDP_PD_SC_TIMEOUT_MS@u) +#define OSDP_PD_ONLINE_TOUT_MS (@OSDP_PD_ONLINE_TOUT_MS@u) #define OSDP_RESP_TOUT_MS (200) -#define OSDP_CMD_MAX_RETRIES (8) -#define OSDP_ONLINE_RETRY_WAIT_MAX_MS (300 * 1000u) -#define OSDP_CMD_RETRY_WAIT_MS (800) +#define OSDP_CMD_MAX_RETRIES (@OSDP_CMD_MAX_RETRIES@) +#define OSDP_ONLINE_RETRY_WAIT_MAX_MS (@OSDP_ONLINE_RETRY_WAIT_MAX_MS@u) +#define OSDP_CMD_RETRY_WAIT_MS (@OSDP_CMD_RETRY_WAIT_MS@) #define OSDP_PACKET_BUF_SIZE (256) #define OSDP_RX_RB_SIZE (512) #define OSDP_CP_CMD_POOL_SIZE (4) -#define OSDP_FILE_ERROR_RETRY_MAX (10) +#define OSDP_FILE_ERROR_RETRY_MAX (@OSDP_FILE_ERROR_RETRY_MAX@) #define OSDP_PD_MAX (126) #define OSDP_CMD_ID_OFFSET (5) #define OSDP_PCAP_LINK_TYPE (162) #define OSDP_PD_NAME_MAXLEN (16) -#define OSDP_MINIMUM_PACKET_SIZE (128) +#define OSDP_MINIMUM_PACKET_SIZE (128) #endif /* _OSDP_CONFIG_H_ */ From 0a73b46b80ff741e2c1806f6b23a57eaa2295865 Mon Sep 17 00:00:00 2001 From: adaskar Date: Thu, 4 Dec 2025 15:36:24 +0300 Subject: [PATCH 2/2] setup fix --- CMakeLists.txt | 9 +++++++++ configure.sh | 23 +++++++++++++++++++++++ python/setup.py | 8 ++++++++ src/osdp_config.h.in | 16 ++++++++-------- 4 files changed, 48 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 24849926..b2e2cdb8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -35,6 +35,15 @@ option(OPT_OSDP_STATIC_PD "Setup PD single statically" OFF) option(OPT_OSDP_LIB_ONLY "Only build the library" OFF) option(OPT_BUILD_BARE_METAL "Build library for bare metal targets" OFF) +## OSDP Protocol Configuration Constants +set(OSDP_PD_SC_RETRY_MS "600000" CACHE STRING "PD Secure Channel retry timeout (ms)") +set(OSDP_PD_SC_TIMEOUT_MS "8000" CACHE STRING "PD Secure Channel timeout (ms)") +set(OSDP_PD_ONLINE_TOUT_MS "8000" CACHE STRING "PD online timeout (ms)") +set(OSDP_CMD_MAX_RETRIES "8" CACHE STRING "Maximum command retries") +set(OSDP_ONLINE_RETRY_WAIT_MAX_MS "300000" CACHE STRING "Maximum online retry wait (ms)") +set(OSDP_CMD_RETRY_WAIT_MS "800" CACHE STRING "Command retry wait (ms)") +set(OSDP_FILE_ERROR_RETRY_MAX "10" CACHE STRING "File transfer error retry max") + ## Includes list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") include(AddCCompilerFlag) diff --git a/configure.sh b/configure.sh index e97d65ec..957d444e 100755 --- a/configure.sh +++ b/configure.sh @@ -29,6 +29,15 @@ usage() { -d, --debug Enable debug builds -f, --force Use this flags to override some checks -h, --help Print this help + + OSDP Protocol Configuration: + --osdp-pd-sc-retry-ms MS Set OSDP_PD_SC_RETRY_MS (default: 600000) + --osdp-pd-sc-timeout-ms MS Set OSDP_PD_SC_TIMEOUT_MS (default: 8000) + --osdp-pd-online-tout-ms MS Set OSDP_PD_ONLINE_TOUT_MS (default: 8000) + --osdp-cmd-max-retries N Set OSDP_CMD_MAX_RETRIES (default: 8) + --osdp-online-retry-wait-max-ms MS Set OSDP_ONLINE_RETRY_WAIT_MAX_MS (default: 300000) + --osdp-cmd-retry-wait-ms MS Set OSDP_CMD_RETRY_WAIT_MS (default: 800) + --osdp-file-error-retry-max N Set OSDP_FILE_ERROR_RETRY_MAX (default: 10) --- } @@ -49,6 +58,13 @@ while [ $# -gt 0 ]; do --static-pd) STATIC_PD=1;; --lib-only) LIB_ONLY=1;; --build-dir) BUILD_DIR=$2; shift;; + --osdp-pd-sc-retry-ms) OSDP_PD_SC_RETRY_MS=$2; shift;; + --osdp-pd-sc-timeout-ms) OSDP_PD_SC_TIMEOUT_MS=$2; shift;; + --osdp-pd-online-tout-ms) OSDP_PD_ONLINE_TOUT_MS=$2; shift;; + --osdp-cmd-max-retries) OSDP_CMD_MAX_RETRIES=$2; shift;; + --osdp-online-retry-wait-max-ms) OSDP_ONLINE_RETRY_WAIT_MAX_MS=$2; shift;; + --osdp-cmd-retry-wait-ms) OSDP_CMD_RETRY_WAIT_MS=$2; shift;; + --osdp-file-error-retry-max) OSDP_FILE_ERROR_RETRY_MAX=$2; shift;; -d|--debug) DEBUG=1;; -f|--force) FORCE=1;; -h|--help) usage; exit 0;; @@ -193,6 +209,13 @@ sed -e "s|@PROJECT_VERSION@|${PROJECT_VERSION}|" \ -e "s|@GIT_TAG@|${GIT_TAG}|" \ -e "s|@GIT_DIFF@|${GIT_DIFF}|" \ -e "s|@REPO_ROOT@|${SCRIPT_DIR}|" \ + -e "s|@OSDP_PD_SC_RETRY_MS@|${OSDP_PD_SC_RETRY_MS:-600000}|" \ + -e "s|@OSDP_PD_SC_TIMEOUT_MS@|${OSDP_PD_SC_TIMEOUT_MS:-8000}|" \ + -e "s|@OSDP_PD_ONLINE_TOUT_MS@|${OSDP_PD_ONLINE_TOUT_MS:-8000}|" \ + -e "s|@OSDP_CMD_MAX_RETRIES@|${OSDP_CMD_MAX_RETRIES:-8}|" \ + -e "s|@OSDP_ONLINE_RETRY_WAIT_MAX_MS@|${OSDP_ONLINE_RETRY_WAIT_MAX_MS:-300000}|" \ + -e "s|@OSDP_CMD_RETRY_WAIT_MS@|${OSDP_CMD_RETRY_WAIT_MS:-800}|" \ + -e "s|@OSDP_FILE_ERROR_RETRY_MAX@|${OSDP_FILE_ERROR_RETRY_MAX:-10}|" \ src/osdp_config.h.in > ${BUILD_DIR}/include/osdp_config.h CCFLAGS+=" -I${BUILD_DIR}/include" diff --git a/python/setup.py b/python/setup.py index e3d8e5de..13aadec1 100644 --- a/python/setup.py +++ b/python/setup.py @@ -73,6 +73,14 @@ def try_vendor_sources(src_dir, src_files, vendor_dir): "GIT_TAG": git["tag"], "GIT_DIFF": git["diff"], "REPO_ROOT": git["root"], + # OSDP Configuration Constants (must match CMakeLists.txt defaults) + "OSDP_PD_SC_RETRY_MS": "600000", + "OSDP_PD_SC_TIMEOUT_MS": "8000", + "OSDP_PD_ONLINE_TOUT_MS": "8000", + "OSDP_CMD_MAX_RETRIES": "8", + "OSDP_ONLINE_RETRY_WAIT_MAX_MS": "300000", + "OSDP_CMD_RETRY_WAIT_MS": "800", + "OSDP_FILE_ERROR_RETRY_MAX": "10", }) utils_sources = [ diff --git a/src/osdp_config.h.in b/src/osdp_config.h.in index 597fc1ef..422ffd23 100644 --- a/src/osdp_config.h.in +++ b/src/osdp_config.h.in @@ -22,22 +22,22 @@ /** * @brief Other OSDP constants */ -#define OSDP_PD_SC_RETRY_MS (600 * 1000u) +#define OSDP_PD_SC_RETRY_MS (@OSDP_PD_SC_RETRY_MS@u) #define OSDP_PD_POLL_TIMEOUT_MS (50) -#define OSDP_PD_SC_TIMEOUT_MS (8 * 1000u) -#define OSDP_PD_ONLINE_TOUT_MS (8 * 1000u) +#define OSDP_PD_SC_TIMEOUT_MS (@OSDP_PD_SC_TIMEOUT_MS@u) +#define OSDP_PD_ONLINE_TOUT_MS (@OSDP_PD_ONLINE_TOUT_MS@u) #define OSDP_RESP_TOUT_MS (200) -#define OSDP_CMD_MAX_RETRIES (8) -#define OSDP_ONLINE_RETRY_WAIT_MAX_MS (300 * 1000u) -#define OSDP_CMD_RETRY_WAIT_MS (800) +#define OSDP_CMD_MAX_RETRIES (@OSDP_CMD_MAX_RETRIES@) +#define OSDP_ONLINE_RETRY_WAIT_MAX_MS (@OSDP_ONLINE_RETRY_WAIT_MAX_MS@u) +#define OSDP_CMD_RETRY_WAIT_MS (@OSDP_CMD_RETRY_WAIT_MS@) #define OSDP_PACKET_BUF_SIZE (256) #define OSDP_RX_RB_SIZE (512) #define OSDP_CP_CMD_POOL_SIZE (4) -#define OSDP_FILE_ERROR_RETRY_MAX (10) +#define OSDP_FILE_ERROR_RETRY_MAX (@OSDP_FILE_ERROR_RETRY_MAX@) #define OSDP_PD_MAX (126) #define OSDP_CMD_ID_OFFSET (5) #define OSDP_PCAP_LINK_TYPE (162) #define OSDP_PD_NAME_MAXLEN (16) -#define OSDP_MINIMUM_PACKET_SIZE (128) +#define OSDP_MINIMUM_PACKET_SIZE (128) #endif /* _OSDP_CONFIG_H_ */