diff --git a/.web_config.json b/.web_config.json new file mode 100644 index 0000000..22ee460 --- /dev/null +++ b/.web_config.json @@ -0,0 +1,6 @@ +{ + "host_ip": "192.168.0.114", + "kl630_ip": "192.168.0.201", + "port": 8080, + "docker_image": "kl630-dev" +} \ No newline at end of file diff --git a/build/app_header_init.o b/build/app_header_init.o new file mode 100644 index 0000000..9177e71 Binary files /dev/null and b/build/app_header_init.o differ diff --git a/build/application_init.o b/build/application_init.o new file mode 100644 index 0000000..b69e915 Binary files /dev/null and b/build/application_init.o differ diff --git a/build/bt_uart.o b/build/bt_uart.o new file mode 100644 index 0000000..a3166d2 Binary files /dev/null and b/build/bt_uart.o differ diff --git a/build/demo_hdmi.sh b/build/demo_hdmi.sh new file mode 100644 index 0000000..75b1148 --- /dev/null +++ b/build/demo_hdmi.sh @@ -0,0 +1,46 @@ +#!/bin/sh +set -e + +BIN_DIR=/mnt/flash/plus/kp_firmware/kp_firmware_0/kp_firmware/bin +FW=/mnt/flash/vienna/kp_firmware_host_stream +INI=$BIN_DIR/ini/host_stream.ini + +cd $BIN_DIR + +# Load hardware drivers if not already loaded (required for EDMC/NPU) +[ -e /dev/vpl_edmc ] || (cd /mnt/flash/vienna/drivers && sh driver.sh 2>/dev/null && sleep 1) + +killall -9 kp_firmware_host_stream 2>/dev/null || true +killall -9 rtsps 2>/dev/null || true +sleep 1 +rm -f /dev/shm/* + +# Optional override: PIXFMT=NV21 MODEL_PATH=nef/other.nef MODEL_ID=xxxxx JOB_ID=yyy ./demo_hdmi.sh +PIXFMT=${PIXFMT:-NV12} + +# Model settings — read from INI as default, env var overrides at runtime +_ini_val() { grep "^$1" "$INI" | sed 's/.*= *//' | tr -d '"' | awk '{print $1}'; } +MODEL_PATH=${MODEL_PATH:-$(_ini_val ModelPath)} +MODEL_ID=${MODEL_ID:-$(_ini_val ModelId)} +JOB_ID=${JOB_ID:-$(_ini_val JobId)} + +# HDMI demo profile: inference on stream1 (724x362) + HDMI output from stream0 (1920x1080). +# InferenceStream=1: NPU receives 724x362 frames (model native res) — ~8x faster than InferenceStream=0. +# StreamCount=2: creates both stream0 (1920x1080, draw_box+HDMI) and stream1 (724x362, inference) SSMs. +sed -i 's/^NnmSource.*/NnmSource = 0/' $INI +sed -i 's/^GetImageBufMode.*/GetImageBufMode = 0/' $INI +sed -i 's/^InferenceStream.*/InferenceStream = 1/' $INI +sed -i 's/^StreamCount.*/StreamCount = 2/' $INI +sed -i 's/^voc_enable.*/voc_enable = 1/' $INI +sed -i "s/^PixFmt.*/PixFmt = ${PIXFMT}/" $INI +# DrawBoxEnable: respect INI value set by web UI (do not override) + +echo "=== HDMI Demo INI ===" +grep -E "ModelPath|ModelId|JobId|NnmSource|GetImageBufMode|InferenceStream|StreamCount|voc_enable|PixFmt" $INI +echo "=== Model (runtime): MODEL_PATH=$MODEL_PATH MODEL_ID=$MODEL_ID JOB_ID=$JOB_ID ===" + +echo "=== Start Firmware (HDMI demo) ===" +LD_LIBRARY_PATH=/mnt/flash/vienna/lib $FW -m "$MODEL_PATH" -i "$MODEL_ID" -j "$JOB_ID" & +FW_PID=$! +echo "Firmware PID: $FW_PID" +wait $FW_PID diff --git a/build/demo_post_utils.o b/build/demo_post_utils.o new file mode 100644 index 0000000..d4b3f16 Binary files /dev/null and b/build/demo_post_utils.o differ diff --git a/build/demo_rtsp.sh b/build/demo_rtsp.sh new file mode 100644 index 0000000..15b7ff1 --- /dev/null +++ b/build/demo_rtsp.sh @@ -0,0 +1,56 @@ +#!/bin/sh +set -e + +BIN_DIR=/mnt/flash/plus/kp_firmware/kp_firmware_0/kp_firmware/bin +FW=/mnt/flash/vienna/kp_firmware_host_stream +INI=$BIN_DIR/ini/host_stream.ini + +cd $BIN_DIR + +# Load hardware drivers if not already loaded (required for EDMC/NPU) +[ -e /dev/vpl_edmc ] || (cd /mnt/flash/vienna/drivers && sh driver.sh 2>/dev/null && sleep 1) + +killall -9 kp_firmware_host_stream 2>/dev/null || true +killall -9 rtsps 2>/dev/null || true +sleep 1 +rm -f /dev/shm/* + +# Optional overrides: +# PIXFMT=NV21 INF_STREAM=0 MODEL_PATH=nef/other.nef MODEL_ID=xxxxx JOB_ID=yyy ./demo_rtsp.sh +PIXFMT=${PIXFMT:-NV12} +INF_STREAM=${INF_STREAM:-1} + +# Model settings — read from INI as default, env var overrides at runtime +_ini_val() { grep "^$1" "$INI" | sed 's/.*= *//' | tr -d '"' | awk '{print $1}'; } +MODEL_PATH=${MODEL_PATH:-$(_ini_val ModelPath)} +MODEL_ID=${MODEL_ID:-$(_ini_val ModelId)} +JOB_ID=${JOB_ID:-$(_ini_val JobId)} + +# RTSP demo profile: single-process source + one encoder stream + RTSP server. +sed -i 's/^NnmSource.*/NnmSource = 0/' $INI +sed -i 's/^GetImageBufMode.*/GetImageBufMode = 0/' $INI +sed -i "s/^InferenceStream.*/InferenceStream = ${INF_STREAM}/" $INI +sed -i 's/^StreamCount.*/StreamCount = 2/' $INI +sed -i "s/^PixFmt.*/PixFmt = ${PIXFMT}/" $INI +sed -i 's/^voc_enable.*/voc_enable = 0/' $INI +# DrawBoxEnable: respect INI value set by web UI (do not override) + +echo "=== RTSP Demo INI ===" +grep -E "ModelPath|ModelId|JobId|NnmSource|GetImageBufMode|InferenceStream|StreamCount|voc_enable|PixFmt|DrawBoxEnable" $INI +echo "=== Model (runtime): MODEL_PATH=$MODEL_PATH MODEL_ID=$MODEL_ID JOB_ID=$JOB_ID ===" + +echo "=== Start Firmware (RTSP demo) ===" +LD_LIBRARY_PATH=/mnt/flash/vienna/lib $FW -m "$MODEL_PATH" -i "$MODEL_ID" -j "$JOB_ID" & +FW_PID=$! + +sleep 4 + +# Start RTSP server that reads venc_srb_* output. +LD_LIBRARY_PATH=/mnt/flash/vienna/lib ./rtsps -c stream_server_config.ini & +RTSP_PID=$! + +echo "Firmware PID: $FW_PID" +echo "RTSP PID: $RTSP_PID" +echo "RTSP URL: rtsp://192.168.3.10/live1.sdp" + +wait $FW_PID diff --git a/build/demo_rtsp_hdmi.sh b/build/demo_rtsp_hdmi.sh new file mode 100644 index 0000000..7cf1b29 --- /dev/null +++ b/build/demo_rtsp_hdmi.sh @@ -0,0 +1,58 @@ +#!/bin/sh +# by mars +set -e + +BIN_DIR=/mnt/flash/plus/kp_firmware/kp_firmware_0/kp_firmware/bin +FW=/mnt/flash/vienna/kp_firmware_host_stream +INI=$BIN_DIR/ini/host_stream.ini + +cd $BIN_DIR + +# Load hardware drivers if not already loaded (required for EDMC/NPU) +[ -e /dev/vpl_edmc ] || (cd /mnt/flash/vienna/drivers && sh driver.sh 2>/dev/null && sleep 1) + +killall -9 kp_firmware_host_stream 2>/dev/null || true +killall -9 rtsps 2>/dev/null || true +sleep 1 +rm -f /dev/shm/* + +# Optional override: PIXFMT=NV21 MODEL_PATH=nef/other.nef MODEL_ID=xxxxx JOB_ID=yyy ./demo_rtsp_hdmi.sh +PIXFMT=${PIXFMT:-NV12} + +# Model settings — read from INI as default, env var overrides at runtime +_ini_val() { grep "^$1" "$INI" | sed 's/.*= *//' | tr -d '"' | awk '{print $1}'; } +MODEL_PATH=${MODEL_PATH:-$(_ini_val ModelPath)} +MODEL_ID=${MODEL_ID:-$(_ini_val ModelId)} +JOB_ID=${JOB_ID:-$(_ini_val JobId)} + +# Combined RTSP + HDMI profile. +# InferenceStream=1 uses stream1 (724x362) for inference. +# DrawOnResize=1 so segmentation overlay is drawn on resize streams (RTSP streams). +sed -i 's/^NnmSource.*/NnmSource = 0/' $INI +sed -i 's/^GetImageBufMode.*/GetImageBufMode = 0/' $INI +sed -i 's/^InferenceStream.*/InferenceStream = 1/' $INI +sed -i 's/^StreamCount.*/StreamCount = 2/' $INI +sed -i 's/^voc_enable.*/voc_enable = 1/' $INI +sed -i "s/^PixFmt.*/PixFmt = ${PIXFMT}/" $INI +# DrawBoxEnable: respect INI value set by web UI (do not override) +# DrawOnResize: not needed — firmware auto-disables it when InferenceStream != 0 + +echo "=== RTSP+HDMI Demo INI ===" +grep -E "ModelPath|ModelId|JobId|NnmSource|GetImageBufMode|InferenceStream|StreamCount|voc_enable|PixFmt|DrawBoxEnable|DrawOnResize" $INI +echo "=== Model (runtime): MODEL_PATH=$MODEL_PATH MODEL_ID=$MODEL_ID JOB_ID=$JOB_ID ===" + +echo "=== Start Firmware (RTSP+HDMI demo) ===" +LD_LIBRARY_PATH=/mnt/flash/vienna/lib $FW -m "$MODEL_PATH" -i "$MODEL_ID" -j "$JOB_ID" & +FW_PID=$! + +sleep 4 + +# Start RTSP server that reads venc_srb_* output. +LD_LIBRARY_PATH=/mnt/flash/vienna/lib ./rtsps -c stream_server_config.ini & +RTSP_PID=$! + +echo "Firmware PID: $FW_PID" +echo "RTSP PID: $RTSP_PID" +echo "RTSP URL: rtsp://192.168.3.10/live1.sdp" + +wait $FW_PID diff --git a/build/deploy.sh b/build/deploy.sh new file mode 100644 index 0000000..3812ade --- /dev/null +++ b/build/deploy.sh @@ -0,0 +1,68 @@ +#!/bin/sh +# deploy.sh — 部署新編譯的 firmware 到裝置並重啟 RTSP demo +# +# 使用方式(在裝置上執行): +# sh deploy.sh +# +# 前提:host 192.168.3.1:8080 在提供以下檔案: +# /kp_firmware_host_stream (compile.sh 的輸出) +# /host_stream.ini (kl630_build/ini/host_stream.ini) +# +# 一次性設定(只需在新機器上執行一次,之後重開機不需要再跑): +# sh deploy.sh --setup + +set -e + +HOST_URL="http://192.168.0.114:8080" +BIN_DIR=/mnt/flash/plus/kp_firmware/kp_firmware_0/kp_firmware/bin +FW=/mnt/flash/vienna/kp_firmware_host_stream +INI=$BIN_DIR/ini/host_stream.ini + +# ── 一次性 ISP 資源修正 ───────────────────────────────────────────────────── +# IMX662 DOL-HDR 需要 dwStatisticsSrcType=2 和 bGTREnable=1。 +# 這些寫入 flash,重開機後自動保留,只需要執行一次。 +one_time_setup() { + echo "=== 一次性 ISP resource 設定 ===" + sed -i 's/dwStatisticsSrcType = 0/dwStatisticsSrcType = 2/' \ + $BIN_DIR/Resource/AWB/AutoWhiteBalance.ini + sed -i 's/bGTREnable = 0/bGTREnable = 1/' \ + $BIN_DIR/Resource/ISP/0/pqtable_ispe_Config.cfg + sed -i 's/bGTREnable = 0/bGTREnable = 1/' \ + $BIN_DIR/Resource/ISP/1/pqtable_ispe_Config.cfg + echo " dwStatisticsSrcType=$(grep dwStatisticsSrcType $BIN_DIR/Resource/AWB/AutoWhiteBalance.ini | head -1)" + echo " bGTREnable=$(grep bGTREnable $BIN_DIR/Resource/ISP/0/pqtable_ispe_Config.cfg)" + echo "=== 完成,之後重開機不需要再執行 ===" +} + +if [ "$1" = "--setup" ]; then + one_time_setup + exit 0 +fi + +# ── 停止舊的 firmware ───────────────────────────────────────────────────────── +echo "=== 停止舊 firmware ===" +killall -9 kp_firmware_host_stream 2>/dev/null || true +killall -9 rtsps 2>/dev/null || true +sleep 1 +rm -f /dev/shm/* + +# ── 下載新 binary ───────────────────────────────────────────────────────────── +echo "=== 下載 firmware binary ===" +wget -q "$HOST_URL/kp_firmware_host_stream" -O $FW +chmod +x $FW +echo " $FW: $(ls -lh $FW | awk '{print $5, $6, $7, $8}')" + +# ── 下載新 INI(保留裝置端的 fusion_cfg / ISP 設定)───────────────────────── +echo "=== 下載 INI ===" +wget -q "$HOST_URL/host_stream.ini" -O $INI +echo " fusion_cfg: $(grep '^fusion_cfg' $INI || echo '(not set!)')" + +# ── 下載 demo_rtsp.sh(確保裝置上版本與 host 一致)──────────────────────────── +echo "=== 下載 demo_rtsp.sh ===" +wget -q "$HOST_URL/demo_rtsp.sh" -O $BIN_DIR/ini/demo_rtsp.sh +chmod +x $BIN_DIR/ini/demo_rtsp.sh + +# ── 啟動 RTSP demo ──────────────────────────────────────────────────────────── +echo "=== 啟動 RTSP demo ===" +cd $BIN_DIR +sh ./ini/demo_rtsp.sh diff --git a/build/event_recorder.o b/build/event_recorder.o new file mode 100644 index 0000000..0828c49 Binary files /dev/null and b/build/event_recorder.o differ diff --git a/build/fec_api.o b/build/fec_api.o new file mode 100644 index 0000000..41b6621 Binary files /dev/null and b/build/fec_api.o differ diff --git a/build/glibc_shim.o b/build/glibc_shim.o new file mode 100644 index 0000000..fae6cba Binary files /dev/null and b/build/glibc_shim.o differ diff --git a/build/host_stream.ini b/build/host_stream.ini new file mode 100644 index 0000000..88be5a6 --- /dev/null +++ b/build/host_stream.ini @@ -0,0 +1,99 @@ +[sensor] +sensor_cfg = "./Resource/VIC/0/imx662_1920x1080_ch0.cfg" +fusion_cfg = "./Resource/VIC/1/imx662_1920x1080_ch1.cfg" +autoscene_config = "./Resource/AutoScene/autoscene_conf.cfg" +fec_calibrate_path = "./ini/fec_calibrate.ini" +fec_conf_path = "./ini/fec_conf.ini" +fec_mode = 4 # 0: Original, 1: 1 Region, 2: 180 all direction, 3: 180 one Direction, 4: 180 two direction, 5: PT Mode +initial_fec_app_type = 0 # 0: ceiling, 1: table, 2: wall +eis_enable = 1 + +[nnm] +ModelPath = "nef/STDC04012026_models_630.nef" +ModelId = 32769 # KNERON_YOLOV5S_COCO80_640_640_3 (YOLO v5s) +JobId = 200 # KDP2_INF_ID_APP_YOLO +InferenceStream = 1 # Inference stream index (use stream1: 640x640) +Threshold = 0.5 # for yolo only(JobId = 11) +Fps = 25 # Image input fps for NPU inference +GetImageBufMode = 0 # 0: block mode 1: non-block mode +RoiEnable = 0 # Enable ROI for nnm detect +RoiX = 0 # ROI start x +RoiY = 0 # ROI start y +DrawBoxEnable = 1 # draw object bounding box on stream0 (also enables STDC seg overlay) +OnlyPerson = 1 # only draw person bounding box when DrawBoxEnable + #(so far for yolo only, JobId = 11) +DrawOnResize = 0; # If InferenceStream is 0. This setting needs to be enabled. The box will be drawn on all resize streams. +verbose_log = 0 # 0: quiet (warnings only, ~30B/s), 1: per-frame class ratios every 20 frames (~1KB/s). Toggle from web UI. + +NnmSource = 0 # 0: run host_stream independently, 1: run with streamer +ssm_name = "vsrc_ssm_ifp_0" # If NnmSource is 1. This setting needs to be set. The name is automaticlly create by streamer. + +[voc] +voc_enable = 1 #enable Video Output Component +VocWidth = 1920 #video output width +VocHeight = 1080 #video output height +PixFmt = NV12 # HDMI input format for VOC: NV12 / NV21 / YM12 + +[streamer] +StreamCount = 2 #Stream amount +MemType = 0 #Encode buffer type, 0(SRB mode)/1(SCM mode) + +#stream0 is the main stream which has the same resolution as the sensor. +[stream0] +Codec = 0 #VMF_VENC_CODEC_TYPE_H264 +Width = 1920 #The image width of stream0 +Height = 1080 #The image height of stream0 +FPS = 25 #The frame rate of stream0 +QP = 25 #The base value of the quantization parameter. Its range is from 0 to 51. +Bitrate = 2000000 #The average bitrate of the encoded stream. Its range is from 30,000 to 700,000,000 bps. +PIQ = 0 #PIQ setting. Reduce the difference of QP between intra and inter frame. Default: 0 (disable). +GOP = 50 #Group of pictures. It specifies the number of frames between two intra frames. The maximum GOP value is 600. +Virt_I_Interval = 0 #Virtual intra frame interval. 0:disable, range: 1 ~ (gop-1) +KeepFrameRatio = 0 # This option is valid only on resized stream. +EncodeBufferSize = 6291456 # 6M: 6*1024*1024 = 6291456 +EncodeBufferAmount = 3 # (SRB only) + +[stream1] +Codec = 0 #VMF_VENC_CODEC_TYPE_H264 +Width = 724 #The image width of stream1 (STDC model training resolution) +Height = 362 #The image height of stream1 (STDC model training resolution) +FPS = 25 #The frame rate of stream0 +QP = 25 #The base value of the quantization parameter. Its range is from 0 to 51. +Bitrate = 2000000 #The average bitrate of the encoded stream. Its range is from 30,000 to 700,000,000 bps. +PIQ = 0 #PIQ setting. Reduce the difference of QP between intra and inter frame. Default: 0 (disable). +GOP = 50 #Group of pictures. It specifies the number of frames between two intra frames. The maximum GOP value is 600. +Virt_I_Interval = 0 #Virtual intra frame interval. 0:disable, range: 1 ~ (gop-1) +KeepFrameRatio = 0 # This option is valid only on resized stream. +EncodeBufferSize = 2097152 # 2M: 2*1024*1024 = 2097152 +EncodeBufferAmount = 3 # (SRB only) + +[stream2] +Codec = 0 #VMF_VENC_CODEC_TYPE_H264 +Width = 640 #The image width of stream0 +Height = 480 #The image height of stream0 +FPS = 25 #The frame rate of stream0 +QP = 25 #The base value of the quantization parameter. Its range is from 0 to 51. +Bitrate = 2000000 #The average bitrate of the encoded stream. Its range is from 30,000 to 700,000,000 bps. +PIQ = 0 #PIQ setting. Reduce the difference of QP between intra and inter frame. Default: 0 (disable). +GOP = 50 #Group of pictures. It specifies the number of frames between two intra frames. The maximum GOP value is 600. +Virt_I_Interval = 0 #Virtual intra frame interval. 0:disable, range: 1 ~ (gop-1) +KeepFrameRatio = 0 # This option is valid only on resized stream. +EncodeBufferSize = 2097152 # 2M: 2*1024*1024 = 2097152 +EncodeBufferAmount = 3 # (SRB only) + +[capture] +# Legacy single-JPEG capture (kept for reference, not used by event_recorder) +enable = 0 +http_url = http://192.168.0.114:8081/api/upload +cooldown_ms = 1000 + +[event] +# Violation event recorder — two-channel: JSON (BT/iPad) + tar.gz (Allxon OOB) +enable = 1 +bt_uart_dev = /dev/ttyS1 # Channel A: UART device for DX-BT24 BLE module → iPad +bt_at_probe = 0 # 0: skip AT commands (normal); 1: one-time baud upgrade (factory/reset only) +upload_url = http://192.168.0.114:8081/api/golf.cgi # Channel B: tar.gz upload (OOB/cloud path) + # Production: http://192.168.0.99/api/golf.cgi +sd_path = /tmp/sdcard/events # SD card event archive path +sd_max_mb = 7168 # 7 GB — delete oldest when exceeded +upload_delay_ms = 0 # 0: upload immediately after tar.gz built (tar is built after event ends, no extra delay needed) diff --git a/build/kCurl b/build/kCurl new file mode 100755 index 0000000..4d3a503 Binary files /dev/null and b/build/kCurl differ diff --git a/build/kdp2_host_stream.o b/build/kdp2_host_stream.o new file mode 100644 index 0000000..9eb6f50 Binary files /dev/null and b/build/kdp2_host_stream.o differ diff --git a/build/kp_firmware.o b/build/kp_firmware.o new file mode 100644 index 0000000..2c41f76 Binary files /dev/null and b/build/kp_firmware.o differ diff --git a/build/kp_firmware_host_stream b/build/kp_firmware_host_stream new file mode 100755 index 0000000..e63f111 Binary files /dev/null and b/build/kp_firmware_host_stream differ diff --git a/build/nef/STDC03302026_models_630.nef b/build/nef/STDC03302026_models_630.nef new file mode 100644 index 0000000..45f66c6 Binary files /dev/null and b/build/nef/STDC03302026_models_630.nef differ diff --git a/build/nef/STDC04012026_models_630.nef b/build/nef/STDC04012026_models_630.nef new file mode 100644 index 0000000..ac77033 Binary files /dev/null and b/build/nef/STDC04012026_models_630.nef differ diff --git a/build/stat_shim.o b/build/stat_shim.o new file mode 100644 index 0000000..b5069c7 Binary files /dev/null and b/build/stat_shim.o differ diff --git a/build/stdc_inf_single_model.o b/build/stdc_inf_single_model.o new file mode 100644 index 0000000..d9512da Binary files /dev/null and b/build/stdc_inf_single_model.o differ diff --git a/build/stdc_post_process.o b/build/stdc_post_process.o new file mode 100644 index 0000000..3625dbf Binary files /dev/null and b/build/stdc_post_process.o differ diff --git a/compile.sh b/compile.sh index 7bb21db..28005d0 100644 --- a/compile.sh +++ b/compile.sh @@ -65,7 +65,7 @@ fi ALL_SRCS=$(ls \ $WORKSPACE/src/host_stream/*.c \ $WORKSPACE/src/app_flow/*.c \ - $WORKSPACE/src/pre_post_proc/*.c \ + $WORKSPACE/src/pre_post_proc/*.c \ 2>/dev/null) echo "" diff --git a/include/host_stream/bt_uart.h b/include/host_stream/bt_uart.h new file mode 100644 index 0000000..596cd58 --- /dev/null +++ b/include/host_stream/bt_uart.h @@ -0,0 +1,33 @@ +#ifndef BT_UART_H +#define BT_UART_H + +/* + * bt_uart — DX-BT24 Bluetooth module UART driver + * + * The DX-BT24 is a UART-transparent BLE module. Whatever is written to the + * serial port is forwarded verbatim over BLE to the connected iOS/Android app. + * + * Usage (normal operation — module already at 115200): + * bt_uart_init("/dev/ttyS1", 0) — do_at_probe=0: skip AT commands + * bt_uart_send_json(json_str) — every event, thread-safe + * bt_uart_close() — shutdown (optional) + * + * First-time / factory-reset setup (module at factory default 9600): + * bt_uart_init("/dev/ttyS1", 1) — do_at_probe=1: negotiate baud via AT + * After success, set bt_at_probe = 0 in INI — never probe again. + */ + +/* Open and configure the UART to the BT module. + * dev: device path, e.g. "/dev/ttyS1" (NULL or "" = disabled). + * do_at_probe: 0 = open directly at 115200 (normal operation, no AT sent). + * 1 = run AT baud negotiation first (one-time setup only). + * Returns 0 on success, -1 on failure / disabled. */ +int bt_uart_init(const char *dev, int do_at_probe); + +/* Write JSON bytes to the BT module (no CRLF added). Thread-safe. No-op if not init'd. */ +void bt_uart_send_json(const char *json); + +/* Close the UART fd and release resources. */ +void bt_uart_close(void); + +#endif /* BT_UART_H */ diff --git a/include/host_stream/event_recorder.h b/include/host_stream/event_recorder.h index b2db24d..2638536 100644 --- a/include/host_stream/event_recorder.h +++ b/include/host_stream/event_recorder.h @@ -7,7 +7,7 @@ * event_recorder — golf cart violation event logger * * Two channels: - * A) Real-time JSON → POST /api/event (iPad / BLE path) + * A) Real-time JSON → UART → DX-BT24 BLE → iPad (bt_uart_send_json) * B) tar.gz archive → POST (OOB / cloud path) * Simulation: http://192.168.0.114:8081/api/upload * Production: http://192.168.0.99/api/golf.cgi @@ -21,9 +21,9 @@ * event_recorder_provide_frame() — every frame, from app_header_send_inference */ -/* Call once after INI is loaded (before VMF starts). */ -void event_recorder_init(const char *pc_url, - const char *upload_url, +/* Call once after INI is loaded (before VMF starts). + * bt_uart_init() must be called before this. */ +void event_recorder_init(const char *upload_url, const char *sd_path, int sd_max_mb, int upload_delay_ms, diff --git a/ini/host_stream.ini b/ini/host_stream.ini index 689ead0..88be5a6 100644 --- a/ini/host_stream.ini +++ b/ini/host_stream.ini @@ -88,10 +88,11 @@ http_url = http://192.168.0.114:8081/api/upload cooldown_ms = 1000 [event] -# Violation event recorder — two-channel: JSON (iPad) + tar.gz (Allxon OOB) +# Violation event recorder — two-channel: JSON (BT/iPad) + tar.gz (Allxon OOB) enable = 1 -pc_url = http://192.168.0.114:8081 # Channel A: PC mock server (iPad/BLE path) -upload_url = http://192.168.0.114:8081/api/upload # Channel B: tar.gz upload (OOB/cloud path) +bt_uart_dev = /dev/ttyS1 # Channel A: UART device for DX-BT24 BLE module → iPad +bt_at_probe = 0 # 0: skip AT commands (normal); 1: one-time baud upgrade (factory/reset only) +upload_url = http://192.168.0.114:8081/api/golf.cgi # Channel B: tar.gz upload (OOB/cloud path) # Production: http://192.168.0.99/api/golf.cgi sd_path = /tmp/sdcard/events # SD card event archive path sd_max_mb = 7168 # 7 GB — delete oldest when exceeded diff --git a/nef/STDC04132026_models_630.nef b/nef/STDC04132026_models_630.nef new file mode 100644 index 0000000..eaee484 Binary files /dev/null and b/nef/STDC04132026_models_630.nef differ diff --git a/src/host_stream/bt_uart.c b/src/host_stream/bt_uart.c new file mode 100644 index 0000000..552453b --- /dev/null +++ b/src/host_stream/bt_uart.c @@ -0,0 +1,279 @@ +/* + * bt_uart.c — DX-BT24 Bluetooth module UART driver for KL630 + * + * Normal operation (bt_at_probe = 0 in INI): + * Open directly at 115200 blocking (VMIN=1). No AT commands sent. + * The module's baud rate is persistent across power cycles once set. + * + * First-time / factory-reset setup (bt_at_probe = 1 in INI): + * Call bt_uart_probe_and_upgrade() which handles the 9600→115200 upgrade: + * 1. Try AT+BAUD at 115200 — if response, already configured. + * 2. If no response: try AT+BAUD at 9600 — if response, send AT+BAUD7 + * then AT+RESET to lock in the new baud rate. + * After this one-time step, set bt_at_probe = 0 in INI so AT commands are + * never sent again (avoids forwarding AT strings to connected BLE clients). + * + * bt_uart_send_json() is fully non-blocking: it enqueues the message into an + * internal FIFO and returns immediately. A dedicated writer thread drains the + * queue and performs the actual UART write, so callers are never stalled by IO. + */ + +#include +#include +#include +#include +#include +#include +#include + +#include "bt_uart.h" + +/* ── UART fd ─────────────────────────────────────────────────────────────── */ +static int s_bt_fd = -1; + +/* ── Message queue ───────────────────────────────────────────────────────── */ +typedef struct BtMsg { + char *json; + struct BtMsg *next; +} BtMsg; + +static BtMsg *s_q_head = NULL; +static BtMsg *s_q_tail = NULL; +static pthread_mutex_t s_q_mtx = PTHREAD_MUTEX_INITIALIZER; +static pthread_cond_t s_q_cond = PTHREAD_COND_INITIALIZER; +static pthread_t s_writer_tid; +static volatile int s_running = 0; + +/* ── Internal: write all bytes to fd ────────────────────────────────────── */ +static void uart_write_all(const char *data, size_t len) +{ + size_t off = 0; + while (off < len) { + ssize_t n = write(s_bt_fd, data + off, len - off); + if (n <= 0) { perror("[BT] write"); return; } + off += (size_t)n; + } +} + +/* ── Writer thread: drains queue, does actual IO ─────────────────────────── */ +static void *bt_writer_thread(void *arg) +{ + (void)arg; + while (1) { + pthread_mutex_lock(&s_q_mtx); + while (!s_q_head && s_running) + pthread_cond_wait(&s_q_cond, &s_q_mtx); + + if (!s_running && !s_q_head) { + pthread_mutex_unlock(&s_q_mtx); + break; + } + + BtMsg *msg = s_q_head; + if (msg) { + s_q_head = msg->next; + if (!s_q_head) s_q_tail = NULL; + } + pthread_mutex_unlock(&s_q_mtx); + + if (msg) { + if (s_bt_fd >= 0) + uart_write_all(msg->json, strlen(msg->json)); + free(msg->json); + free(msg); + } + } + return NULL; +} + +/* ── Internal: open + configure serial port ──────────────────────────────── */ +static int open_uart(const char *dev, speed_t baud, int vmin, int vtime) +{ + int fd = open(dev, O_RDWR | O_NOCTTY); + if (fd < 0) { perror("[BT] open uart"); return -1; } + + struct termios opts; + if (tcgetattr(fd, &opts) != 0) { + perror("[BT] tcgetattr"); + close(fd); + return -1; + } + + cfmakeraw(&opts); + cfsetispeed(&opts, baud); + cfsetospeed(&opts, baud); + + opts.c_cflag |= (CLOCAL | CREAD); + opts.c_cflag &= ~PARENB; + opts.c_cflag &= ~CSTOPB; + opts.c_cflag &= ~CSIZE; + opts.c_cflag |= CS8; + opts.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); + opts.c_iflag &= ~(IXON | IXOFF | IXANY | ICRNL | INLCR); + opts.c_oflag &= ~OPOST; + opts.c_cc[VMIN] = (cc_t)vmin; + opts.c_cc[VTIME] = (cc_t)vtime; + + if (tcsetattr(fd, TCSANOW, &opts) != 0) { + perror("[BT] tcsetattr"); + close(fd); + return -1; + } + return fd; +} + +/* ── One-time AT baud setup (call only when bt_at_probe = 1 in INI) ─────── */ +static void bt_uart_probe_and_upgrade(const char *dev) +{ + char buf[128] = {0}; + int n; + + /* Try AT+BAUD at 115200 first */ + int fd = open_uart(dev, B115200, 0, 10); /* VTIME=10 → 1s timeout */ + if (fd < 0) return; + write(fd, "AT+BAUD\r\n", 9); + n = read(fd, buf, sizeof(buf) - 1); + buf[n > 0 ? n : 0] = '\0'; + printf("[BT] AT probe @ 115200 => %d byte(s): %s\n", n, n > 0 ? buf : "(none)"); + close(fd); + + if (n > 0) { + printf("[BT] module already at 115200 — no upgrade needed\n"); + return; + } + + /* No response at 115200 — try 9600 */ + fd = open_uart(dev, B9600, 0, 10); + if (fd < 0) return; + memset(buf, 0, sizeof(buf)); + write(fd, "AT+BAUD\r\n", 9); + n = read(fd, buf, sizeof(buf) - 1); + printf("[BT] AT probe @ 9600 => %d byte(s): %s\n", n, n > 0 ? buf : "(none)"); + + if (n == 0) { + /* No response at either baud — cannot upgrade; proceed anyway */ + printf("[BT] WARNING: no AT response at 9600 or 115200\n"); + close(fd); + return; + } + + /* Module is at 9600 — send AT+BAUD7 to switch to 115200. + * The module switches baud immediately after responding; close this fd + * before sending any further commands. */ + printf("[BT] upgrading module from 9600 to 115200\n"); + memset(buf, 0, sizeof(buf)); + write(fd, "AT+BAUD7\r\n", 10); + usleep(100000); /* 100 ms: wait for ack + baud switch */ + n = read(fd, buf, sizeof(buf) - 1); + printf("[BT] AT+BAUD7 => %d byte(s): %s\n", n, n > 0 ? buf : "(none)"); + close(fd); + usleep(300000); /* 300 ms: let module stabilise at 115200 */ + + /* Reopen at 115200 and reset so the new baud persists across power cycles */ + fd = open_uart(dev, B115200, 0, 10); + if (fd < 0) return; + write(fd, "AT+RESET\r\n", 10); + usleep(100000); + read(fd, buf, sizeof(buf) - 1); + close(fd); + usleep(500000); /* 500 ms: wait for module to reboot */ + printf("[BT] upgrade complete — set bt_at_probe = 0 in INI to skip AT on next boot\n"); +} + +/* ── Public API ───────────────────────────────────────────────────────────── */ + +int bt_uart_init(const char *dev, int do_at_probe) +{ + if (!dev || !*dev) { + printf("[BT] bt_uart_init: no device configured — BT disabled\n"); + return -1; + } + + if (do_at_probe) { + /* One-time factory setup: negotiate baud rate via AT commands */ + bt_uart_probe_and_upgrade(dev); + } + + /* Open at 115200, blocking (VMIN=1) for normal operation */ + int fd = open_uart(dev, B115200, 1, 0); + if (fd < 0) { + printf("[BT] bt_uart_init: open at 115200 failed\n"); + return -1; + } + + /* Flush any residual bytes */ + tcflush(fd, TCIOFLUSH); + + s_bt_fd = fd; + + /* Start dedicated writer thread */ + s_running = 1; + if (pthread_create(&s_writer_tid, NULL, bt_writer_thread, NULL) != 0) { + perror("[BT] pthread_create writer"); + close(fd); + s_bt_fd = -1; + s_running = 0; + return -1; + } + pthread_setname_np(s_writer_tid, "bt_writer"); + + printf("[BT] bt_uart_init OK: %s @ 115200 (at_probe=%d)\n", dev, do_at_probe); + + /* Diagnostic ping — confirms UART→BLE channel is alive. + * No \r\n: BLE is packet-based; delimiter not needed and causes an extra + * empty notification in nRF Connect. */ + bt_uart_send_json("{\"class\":\"boot\",\"level\":0}"); + printf("[BT] boot ping queued\n"); + + return 0; +} + +void bt_uart_send_json(const char *json) +{ + if (s_bt_fd < 0 || !s_running || !json || !*json) return; + + BtMsg *msg = (BtMsg *)malloc(sizeof(BtMsg)); + if (!msg) return; + msg->json = strdup(json); + msg->next = NULL; + if (!msg->json) { free(msg); return; } + + pthread_mutex_lock(&s_q_mtx); + if (s_q_tail) { + s_q_tail->next = msg; + s_q_tail = msg; + } else { + s_q_head = s_q_tail = msg; + } + pthread_cond_signal(&s_q_cond); + pthread_mutex_unlock(&s_q_mtx); +} + +void bt_uart_close(void) +{ + if (!s_running) return; + + /* Signal writer thread to exit after draining remaining messages */ + pthread_mutex_lock(&s_q_mtx); + s_running = 0; + pthread_cond_signal(&s_q_cond); + pthread_mutex_unlock(&s_q_mtx); + + pthread_join(s_writer_tid, NULL); + + if (s_bt_fd >= 0) { + close(s_bt_fd); + s_bt_fd = -1; + printf("[BT] uart closed\n"); + } + + /* Drain any leftover queue entries */ + BtMsg *m = s_q_head; + while (m) { + BtMsg *next = m->next; + free(m->json); + free(m); + m = next; + } + s_q_head = s_q_tail = NULL; +} diff --git a/src/host_stream/event_recorder.c b/src/host_stream/event_recorder.c index e482a6d..386f920 100644 --- a/src/host_stream/event_recorder.c +++ b/src/host_stream/event_recorder.c @@ -4,7 +4,8 @@ * Golf cart violation event recorder for KL630. * * Channel A (iPad / BLE path): - * POST JSON to /api/event on every level change. + * Write JSON to UART → DX-BT24 BLE module → iPad on every level change. + * bt_uart_init() must be called before event_recorder_init(). * * Channel B (OOB / cloud path): * After event ends, wait upload_delay_ms, then: @@ -36,23 +37,23 @@ #include #include "event_recorder.h" +#include "bt_uart.h" #include "stdc_post_process.h" /* THR_*_COLLISION constants */ /* ── External (from kdp2_host_stream.c) ──────────────────────────────────── */ extern VMF_VSRC_HANDLE_T *g_ptVsrcHandle; /* ── Config ──────────────────────────────────────────────────────────────── */ -/* Channel A (JSON events → iPad path) */ -static char s_pc_host[64] = "192.168.0.114"; -static int s_pc_port = 8081; +/* Channel A: JSON events → BT UART → iPad (via DX-BT24 BLE module) + * Initialized by bt_uart_init() in kp_firmware.c. No local config needed. */ /* Channel B (tar.gz upload → OOB / cloud path) * Same endpoint as capture JPG upload (golf.cgi), just posting tar.gz. * Simulation: http://192.168.0.114:8081/api/upload * Production: http://192.168.0.99/api/golf.cgi */ -static char s_up_host[64] = "192.168.0.114"; +static char s_up_host[64] = "192.168.0.99"; static int s_up_port = 8081; -static char s_up_path[128] = "/api/upload"; +static char s_up_path[128] = "/api/golf.cgi"; static char s_sd_path[256] = "/tmp/sdcard/events"; static long long s_sd_max_bytes = (long long)7 * 1024 * 1024 * 1024; /* 7 GB — must be long long on 32-bit ARM */ @@ -113,7 +114,7 @@ static int g_last_pond = 0; static int g_last_tree = 0; /* ═══════════════════════════════════════════════════════════════════════════ - * URL / network helpers + * URL / network helpers (Channel B only) * ═══════════════════════════════════════════════════════════════════════════ */ static void parse_url_into(const char *url, @@ -144,11 +145,6 @@ static void parse_url_into(const char *url, if (host) snprintf(host, host_n, "%s", hostport); } -static void parse_url(const char *url) -{ - parse_url_into(url, s_pc_host, sizeof(s_pc_host), &s_pc_port, NULL, 0); -} - static int open_socket_to(const char *host, int port) { int sock = socket(AF_INET, SOCK_STREAM, 0); @@ -167,31 +163,6 @@ static int open_socket_to(const char *host, int port) return sock; } -static int open_socket(void) { return open_socket_to(s_pc_host, s_pc_port); } - -/* ── Channel A: POST JSON to /api/event ──────────────────────────────────── */ -static void http_post_json(const char *json) -{ - int sock = open_socket(); - if (sock < 0) { - printf("[EVT] JSON post: connect failed\n"); - return; - } - char hdr[256]; - int hdr_len = snprintf(hdr, sizeof(hdr), - "POST /api/event HTTP/1.0\r\n" - "Host: %s\r\n" - "Content-Type: application/json\r\n" - "Content-Length: %zu\r\n" - "Connection: close\r\n\r\n", - s_pc_host, strlen(json)); - send(sock, hdr, hdr_len, 0); - send(sock, json, strlen(json), 0); - char resp[128] = {0}; - recv(sock, resp, sizeof(resp) - 1, 0); - close(sock); -} - /* ── Channel B: POST tar.gz via kCurl (same method as golf.cgi JPEG upload) ── */ /* kCurl lives in the firmware bin directory — use absolute path so CWD doesn't matter */ #define KCURL_PATH "/mnt/flash/plus/kp_firmware/kp_firmware_0/kp_firmware/bin/kCurl" @@ -220,44 +191,6 @@ static void http_post_file(const char *filepath) printf("[EVT] upload: %s sent OK\n", basename); } -/* ── GET /api/time → settimeofday ────────────────────────────────────────── */ -static void http_sync_time(void) -{ - int sock = open_socket(); - if (sock < 0) { - printf("[EVT] time sync: connect failed\n"); - return; - } - char req[128]; - int rlen = snprintf(req, sizeof(req), - "GET /api/time HTTP/1.0\r\nHost: %s\r\nConnection: close\r\n\r\n", - s_pc_host); - send(sock, req, rlen, 0); - - char resp[512] = {0}; - recv(sock, resp, sizeof(resp) - 1, 0); - close(sock); - - /* Find "unix": in response body */ - char *p = strstr(resp, "\"unix\":"); - if (!p) { - printf("[EVT] time sync: parse failed\n"); - return; - } - p += 7; - while (*p == ' ') p++; - long unix_ts = atol(p); - if (unix_ts <= 0) { - printf("[EVT] time sync: bad timestamp %ld\n", unix_ts); - return; - } - struct timeval tv = { (time_t)unix_ts, 0 }; - if (settimeofday(&tv, NULL) == 0) - printf("[EVT] time synced: unix=%ld\n", unix_ts); - else - printf("[EVT] time sync: settimeofday failed (errno=%d)\n", errno); -} - /* ═══════════════════════════════════════════════════════════════════════════ * Helpers * ═══════════════════════════════════════════════════════════════════════════ */ @@ -265,7 +198,8 @@ static void http_sync_time(void) /* UTC+8 offset for Taiwan time (TZ env may not be set on embedded device) */ #define TZ_OFFSET_SEC (8 * 3600) -/* UTC time with Z suffix — used in channel A JSON (spec requires UTC ISO 8601) */ +/* UTC time with Z suffix — reserved for future use */ +__attribute__((unused)) static void now_iso_utc(char *buf, size_t n) { struct timeval tv; @@ -307,7 +241,7 @@ static void write_event_json(const char *work_dir, const char *event_id, char path[320]; snprintf(path, sizeof(path), "%s/event.json", work_dir); FILE *f = fopen(path, "w"); - if (!f) return; + if (!f) { printf("[EVT] write_event_json: fopen failed: %s\n", path); return; } char ts[32]; now_iso(ts, sizeof(ts)); @@ -417,39 +351,21 @@ static void rm_work_dir(const char *dir) } /* ═══════════════════════════════════════════════════════════════════════════ - * JSON event post (detached thread — doesn't block inference pipeline) + * JSON event fire — bt_uart_send_json() is non-blocking (internal queue + + * dedicated writer thread), so we call it directly without a wrapper thread. * ═══════════════════════════════════════════════════════════════════════════ */ -typedef struct { - char json[512]; -} JsonPostArg; - -static void *json_post_thread(void *arg) -{ - JsonPostArg *a = (JsonPostArg *)arg; - http_post_json(a->json); - free(a); - return NULL; -} - static void fire_json_async(const char *event_id, const char *type, int level) { - char ts[32]; - now_iso_utc(ts, sizeof(ts)); /* spec: ISO 8601 UTC with Z suffix */ + (void)event_id; /* not included in BT payload — kept for caller compatibility */ - JsonPostArg *a = (JsonPostArg *)malloc(sizeof(JsonPostArg)); - if (!a) return; - snprintf(a->json, sizeof(a->json), - "{\"response_type\":\"violation\"," - "\"content\":{\"id\":\"%s\",\"date\":\"%s\",\"type\":\"%s\",\"level\":%d}}", - event_id, ts, type, level); + if (!type) type = "unknown"; - pthread_t t; - pthread_attr_t attr; - pthread_attr_init(&attr); - pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); - if (pthread_create(&t, &attr, json_post_thread, a) != 0) free(a); - pthread_attr_destroy(&attr); + char json[64]; + /* Compact format fits in a single BLE packet: + * e.g. {"class":"lane","level":1} = 26 bytes */ + snprintf(json, sizeof(json), "{\"class\":\"%s\",\"level\":%d}", type, level); + bt_uart_send_json(json); /* enqueues and returns immediately */ } /* ═══════════════════════════════════════════════════════════════════════════ @@ -539,7 +455,10 @@ static void launch_upload(const char *work_dir, const char *event_id, pthread_attr_t attr; pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); - if (pthread_create(&t, &attr, upload_thread, a) != 0) free(a); + if (pthread_create(&t, &attr, upload_thread, a) != 0) { + printf("[EVT] launch_upload: pthread_create failed — upload dropped id=%s\n", a->event_id); + free(a); + } pthread_attr_destroy(&attr); } @@ -599,6 +518,9 @@ static void request_snap(const char *filename, const char *work_dir, snprintf(g_snap_req.work_dir, sizeof(g_snap_req.work_dir), "%s", work_dir); snprintf(g_snap_req.event_id, sizeof(g_snap_req.event_id), "%s", event_id); snprintf(g_snap_req.event_type, sizeof(g_snap_req.event_type), "%s", event_type); + } else { + printf("[EVT] snap dropped: already pending %s (new: %s/%s)\n", + g_snap_req.filename, event_id, filename); } pthread_mutex_unlock(&g_snap_mtx); } @@ -623,8 +545,7 @@ static void grass_enter_level(int level) * Public API * ═══════════════════════════════════════════════════════════════════════════ */ -void event_recorder_init(const char *pc_url, - const char *upload_url, +void event_recorder_init(const char *upload_url, const char *sd_path, int sd_max_mb, int upload_delay_ms, @@ -634,22 +555,16 @@ void event_recorder_init(const char *pc_url, s_upload_delay_ms = (upload_delay_ms >= 0) ? upload_delay_ms : 60000; s_sd_max_bytes = (long long)sd_max_mb * 1024 * 1024; - if (pc_url && *pc_url) parse_url(pc_url); if (upload_url && *upload_url) parse_url_into(upload_url, s_up_host, sizeof(s_up_host), &s_up_port, s_up_path, sizeof(s_up_path)); if (sd_path && *sd_path) snprintf(s_sd_path, sizeof(s_sd_path), "%s", sd_path); - printf("[EVT] init: enable=%d ch_a=%s:%d ch_b=%s:%d%s sd=%s max=%dMB delay=%dms\n", - s_enabled, s_pc_host, s_pc_port, + printf("[EVT] init: enable=%d ch_a=bt_uart ch_b=%s:%d%s sd=%s max=%dMB delay=%dms\n", + s_enabled, s_up_host, s_up_port, s_up_path, s_sd_path, sd_max_mb, s_upload_delay_ms); - - if (!s_enabled) return; - - /* Sync time from PC server */ - http_sync_time(); } /* ── Recv callback: drives state machine ─────────────────────────────────── */ diff --git a/src/host_stream/kdp2_host_stream.c b/src/host_stream/kdp2_host_stream.c index 6ccf15f..7817615 100644 --- a/src/host_stream/kdp2_host_stream.c +++ b/src/host_stream/kdp2_host_stream.c @@ -1655,6 +1655,13 @@ void *kdp2_host_stream_image_thread(void *arg) release_video_source(g_ptVsrcHandle); goto EXIT_MIPI_IMAGE_THREAD; } + /* Set g_dwDrawBoxType BEFORE g_dwInitBind=1. + * VOC thread unblocks on g_dwInitBind and immediately checks g_dwDrawBoxType + * to decide which SSM pin to read from. If draw box is enabled on stream 0, + * it must see g_dwDrawBoxType=1 so it reads from VENC_VSRC_B_PIN (overlay + * output) rather than the raw ISP SSM — fixes intermittent HDMI no-overlay. */ + if (pHostStreamInit->bDrawBoxEnable && pHostStreamInit->dwEncodeStreamCount > 0) + g_dwDrawBoxType = 1; g_dwInitBind = 1; if (((dwInferenceWidth == g_tLayout.dwVideoWidth) && (dwInferenceHeight == g_tLayout.dwVideoHeight)) || (pHostStreamInit->bRoiEnable)) { diff --git a/src/host_stream/kp_firmware.c b/src/host_stream/kp_firmware.c index f2ea11f..ed311ec 100644 --- a/src/host_stream/kp_firmware.c +++ b/src/host_stream/kp_firmware.c @@ -41,6 +41,7 @@ #include "kdp2_host_stream.h" #include "fec_api.h" #include "event_recorder.h" +#include "bt_uart.h" //fifo queue buffer setting #define IMAGE_BUFFER_COUNT 3 @@ -224,12 +225,14 @@ int loadConfig(HOST_STREAM_INIT_OPT_T* pHostStreamInit) /* --- [event] section: violation event recording + upload --- */ { int ev_enable = iniparser_getint(ini, "event:enable", 0); - const char *ev_url = iniparser_getstring(ini, "event:pc_url", "http://192.168.0.114:8081"); + const char *bt_dev = iniparser_getstring(ini, "event:bt_uart_dev", "/dev/ttyS1"); + int bt_at_probe = iniparser_getint(ini, "event:bt_at_probe", 0); const char *ev_up = iniparser_getstring(ini, "event:upload_url", "http://192.168.0.114:8081/api/upload"); const char *ev_sd = iniparser_getstring(ini, "event:sd_path", "/tmp/sdcard/events"); int ev_max_mb = iniparser_getint(ini, "event:sd_max_mb", 7168); int ev_delay = iniparser_getint(ini, "event:upload_delay_ms", 60000); - event_recorder_init(ev_url, ev_up, ev_sd, ev_max_mb, ev_delay, ev_enable); + bt_uart_init(bt_dev, bt_at_probe); + event_recorder_init(ev_up, ev_sd, ev_max_mb, ev_delay, ev_enable); } iniparser_freedict(ini); @@ -441,13 +444,6 @@ int main (int argc, char* argv[]) VMF_NNM_Fifoq_Manager_Allocate_Buffer(IMAGE_BUFFER_COUNT, ImageBufferSize, RESULT_BUFFER_COUNT, RESULT_BUFFER_SIZE); printf("[DBG] After AllocateBuffer, ImageBufferSize=%u\n", ImageBufferSize); - printf("###################################################\n"); - printf("###################################################\n"); - printf("%s: func:%s,line:%d \n", __FILE__, __func__,__LINE__); - printf("###################################################\n"); - printf("###################################################\n"); - - pthread_create(&task_stream_image_handle, NULL, kdp2_host_stream_image_thread, &HostStreamInit); pthread_create(&task_update_result_handle, NULL, kdp2_host_update_result_thread, &HostStreamInit); if(!HostStreamInit.dwNnmSource && HostStreamInit.dwEncodeStreamCount > 0) diff --git a/tools/bolt/time_cgi/content/time b/tools/bolt/time_cgi/content/time new file mode 100644 index 0000000..2377751 --- /dev/null +++ b/tools/bolt/time_cgi/content/time @@ -0,0 +1,9 @@ +#!/bin/sh +# /usr/local/sbin/www/api/time — Allxon Bolt time CGI +# Returns current Unix timestamp in JSON. +# Same response format as the KL630 mock server GET /api/time. +# +# Response: {"unix": } +printf "Content-Type: application/json\r\n" +printf "\r\n" +printf '{"unix": %s}' "$(date +%s)" diff --git a/tools/bolt/time_cgi/install.sh b/tools/bolt/time_cgi/install.sh new file mode 100644 index 0000000..fdcd7b9 --- /dev/null +++ b/tools/bolt/time_cgi/install.sh @@ -0,0 +1,7 @@ +#!/bin/sh +# 安裝 time CGI 到 Allxon Bolt HTTP server +# 在 Bolt 上執行:sh install.sh +# 安裝後可用:GET http://192.168.0.100/api/time → {"unix": } +cp ./content/time /usr/local/sbin/www/api/time +chmod +x /usr/local/sbin/www/api/time +echo "time CGI installed: http://192.168.0.100/api/time" diff --git a/tools/device/deploy.sh b/tools/device/deploy.sh index 4279f68..3812ade 100644 --- a/tools/device/deploy.sh +++ b/tools/device/deploy.sh @@ -13,7 +13,7 @@ set -e -HOST_URL="http://192.168.0.102:8080" +HOST_URL="http://192.168.0.114:8080" BIN_DIR=/mnt/flash/plus/kp_firmware/kp_firmware_0/kp_firmware/bin FW=/mnt/flash/vienna/kp_firmware_host_stream INI=$BIN_DIR/ini/host_stream.ini diff --git a/tools/mock_server/server.py b/tools/mock_server/server.py index 3241b4b..f5ee4e7 100644 --- a/tools/mock_server/server.py +++ b/tools/mock_server/server.py @@ -184,7 +184,7 @@ class Handler(BaseHTTPRequestHandler): self.send_error(400, str(e)) # ── Channel B: tar.gz archive upload ───────────────────────── - elif path == '/api/upload': + elif path in ('/api/upload', '/api/golf.cgi'): # 1) kCurl sends filename as query param: /api/upload?filename=xxx qs = parse_qs(urlparse(self.path).query) filename = (qs.get('filename') or [None])[0] @@ -205,8 +205,8 @@ class Handler(BaseHTTPRequestHandler): fp = os.path.join(UPLOAD_DIR, filename) with open(fp, 'wb') as f: f.write(body) - print(f" [CHANNEL-B] saved {filename} ({len(body):,} bytes)") - self._json({'ok': True, 'filename': filename, 'bytes': len(body)}) + print(f" [CHANNEL-B] {path} saved {filename} ({len(body):,} bytes)") + self._json({'ok': True, 'path': path, 'filename': filename, 'bytes': len(body)}) else: self.send_error(404) @@ -250,6 +250,7 @@ if __name__ == '__main__': print(f" Time API : GET http://localhost:{PORT}/api/time") print(f" Event API : POST http://localhost:{PORT}/api/event") print(f" Upload API : POST http://localhost:{PORT}/api/upload") + print(f" Golf API : POST http://localhost:{PORT}/api/golf.cgi") print(f" Uploads : {UPLOAD_DIR}") print("=" * 55) try: diff --git a/tools/mock_server/test_client.py b/tools/mock_server/test_client.py index a49a413..9917b7b 100644 --- a/tools/mock_server/test_client.py +++ b/tools/mock_server/test_client.py @@ -147,7 +147,7 @@ def build_targz(event_id: str, event_type: str, max_level: int, # ── Scenarios ───────────────────────────────────────────────────────── -def scenario_grass(server, event_id): +def scenario_grass(server, event_id, upload_path): """Full grass violation: L1 → L2 → L3 → L0, then upload tar.gz.""" print("\n[Grass Scenario]") print("Step 0: get server time (simulates NTP from OOB Enabler)") @@ -191,10 +191,10 @@ def scenario_grass(server, event_id): ts_fn = datetime.datetime.utcnow().strftime('%Y%m%d_%H%M%S') filename = f'event_{event_id}_{ts_fn}.tar.gz' print(f"\n→ [CHANNEL B] uploading {filename} ({len(tgz):,} bytes)") - post_targz(server, '/api/upload', filename, tgz) + post_targz(server, upload_path, filename, tgz) -def scenario_hazard(server, hazard_type, event_id): +def scenario_hazard(server, hazard_type, event_id, upload_path): """Single-shot hazard event — no level, no tar.gz wait.""" labels = {'bunker': '沙坑', 'pond': '水池', 'tree': '樹木'} label = labels.get(hazard_type, hazard_type) @@ -215,10 +215,10 @@ def scenario_hazard(server, hazard_type, event_id): ts_fn = datetime.datetime.utcnow().strftime('%Y%m%d_%H%M%S') filename = f'event_{event_id}_{ts_fn}.tar.gz' print(f"→ [CHANNEL B] uploading {filename} ({len(tgz):,} bytes)") - post_targz(server, '/api/upload', filename, tgz) + post_targz(server, upload_path, filename, tgz) -def scenario_person(server, event_id): +def scenario_person(server, event_id, upload_path): """Person detection — single-shot.""" print("\n[Person Scenario]") get_server_time(server) @@ -236,13 +236,15 @@ def scenario_person(server, event_id): ts_fn = datetime.datetime.utcnow().strftime('%Y%m%d_%H%M%S') filename = f'event_{event_id}_{ts_fn}.tar.gz' print(f"→ [CHANNEL B] uploading {filename} ({len(tgz):,} bytes)") - post_targz(server, '/api/upload', filename, tgz) + post_targz(server, upload_path, filename, tgz) # ── Main ─────────────────────────────────────────────────────────────── if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('--server', default=DEFAULT_SERVER) + parser.add_argument('--upload-path', default='/api/upload', + choices=['/api/upload', '/api/golf.cgi']) parser.add_argument('--hazard', choices=['bunker', 'pond', 'tree']) parser.add_argument('--person', action='store_true') args = parser.parse_args() @@ -250,8 +252,8 @@ if __name__ == '__main__': event_id = str(int(time.time())) if args.hazard: - scenario_hazard(args.server, args.hazard, event_id) + scenario_hazard(args.server, args.hazard, event_id, args.upload_path) elif args.person: - scenario_person(args.server, event_id) + scenario_person(args.server, event_id, args.upload_path) else: - scenario_grass(args.server, event_id) + scenario_grass(args.server, event_id, args.upload_path) diff --git a/tools/mock_server/uploads/event_1775699190_20260409_095106.tar.gz b/tools/mock_server/uploads/event_1775699190_20260409_095106.tar.gz new file mode 100644 index 0000000..29c3e33 Binary files /dev/null and b/tools/mock_server/uploads/event_1775699190_20260409_095106.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775699190_person_20260409_094631.tar.gz b/tools/mock_server/uploads/event_1775699190_person_20260409_094631.tar.gz new file mode 100644 index 0000000..f02b170 Binary files /dev/null and b/tools/mock_server/uploads/event_1775699190_person_20260409_094631.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775699192_tree_20260409_094632.tar.gz b/tools/mock_server/uploads/event_1775699192_tree_20260409_094632.tar.gz new file mode 100644 index 0000000..29b11ce Binary files /dev/null and b/tools/mock_server/uploads/event_1775699192_tree_20260409_094632.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775699337_person_20260409_094857.tar.gz b/tools/mock_server/uploads/event_1775699337_person_20260409_094857.tar.gz new file mode 100644 index 0000000..f8b6b7a Binary files /dev/null and b/tools/mock_server/uploads/event_1775699337_person_20260409_094857.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775699337_tree_20260409_094857.tar.gz b/tools/mock_server/uploads/event_1775699337_tree_20260409_094857.tar.gz new file mode 100644 index 0000000..43e4226 Binary files /dev/null and b/tools/mock_server/uploads/event_1775699337_tree_20260409_094857.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775699341_person_20260409_094901.tar.gz b/tools/mock_server/uploads/event_1775699341_person_20260409_094901.tar.gz new file mode 100644 index 0000000..d9c1e5f Binary files /dev/null and b/tools/mock_server/uploads/event_1775699341_person_20260409_094901.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775699343_person_20260409_094904.tar.gz b/tools/mock_server/uploads/event_1775699343_person_20260409_094904.tar.gz new file mode 100644 index 0000000..587d9d2 Binary files /dev/null and b/tools/mock_server/uploads/event_1775699343_person_20260409_094904.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775699349_person_20260409_094909.tar.gz b/tools/mock_server/uploads/event_1775699349_person_20260409_094909.tar.gz new file mode 100644 index 0000000..691076e Binary files /dev/null and b/tools/mock_server/uploads/event_1775699349_person_20260409_094909.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775699351_person_20260409_094911.tar.gz b/tools/mock_server/uploads/event_1775699351_person_20260409_094911.tar.gz new file mode 100644 index 0000000..b33a2d1 Binary files /dev/null and b/tools/mock_server/uploads/event_1775699351_person_20260409_094911.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775699355_person_20260409_094915.tar.gz b/tools/mock_server/uploads/event_1775699355_person_20260409_094915.tar.gz new file mode 100644 index 0000000..b3d6eea Binary files /dev/null and b/tools/mock_server/uploads/event_1775699355_person_20260409_094915.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775699402_person_20260409_095002.tar.gz b/tools/mock_server/uploads/event_1775699402_person_20260409_095002.tar.gz new file mode 100644 index 0000000..011dea6 Binary files /dev/null and b/tools/mock_server/uploads/event_1775699402_person_20260409_095002.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775699402_tree_20260409_095002.tar.gz b/tools/mock_server/uploads/event_1775699402_tree_20260409_095002.tar.gz new file mode 100644 index 0000000..5d9be3c Binary files /dev/null and b/tools/mock_server/uploads/event_1775699402_tree_20260409_095002.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775699423_tree_20260409_095023.tar.gz b/tools/mock_server/uploads/event_1775699423_tree_20260409_095023.tar.gz new file mode 100644 index 0000000..a2b5e7d Binary files /dev/null and b/tools/mock_server/uploads/event_1775699423_tree_20260409_095023.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775699424_tree_20260409_095024.tar.gz b/tools/mock_server/uploads/event_1775699424_tree_20260409_095024.tar.gz new file mode 100644 index 0000000..5f9cda8 Binary files /dev/null and b/tools/mock_server/uploads/event_1775699424_tree_20260409_095024.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775700677_20260409_102754.tar.gz b/tools/mock_server/uploads/event_1775700677_20260409_102754.tar.gz new file mode 100644 index 0000000..9fa4185 Binary files /dev/null and b/tools/mock_server/uploads/event_1775700677_20260409_102754.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775700677_tree_20260409_101118.tar.gz b/tools/mock_server/uploads/event_1775700677_tree_20260409_101118.tar.gz new file mode 100644 index 0000000..b7c3255 Binary files /dev/null and b/tools/mock_server/uploads/event_1775700677_tree_20260409_101118.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775701641_person_20260409_102721.tar.gz b/tools/mock_server/uploads/event_1775701641_person_20260409_102721.tar.gz new file mode 100644 index 0000000..0bca45a Binary files /dev/null and b/tools/mock_server/uploads/event_1775701641_person_20260409_102721.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775701669_person_20260409_102749.tar.gz b/tools/mock_server/uploads/event_1775701669_person_20260409_102749.tar.gz new file mode 100644 index 0000000..1e8559b Binary files /dev/null and b/tools/mock_server/uploads/event_1775701669_person_20260409_102749.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775701671_person_20260409_102751.tar.gz b/tools/mock_server/uploads/event_1775701671_person_20260409_102751.tar.gz new file mode 100644 index 0000000..7a9c93d Binary files /dev/null and b/tools/mock_server/uploads/event_1775701671_person_20260409_102751.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775701671_tree_20260409_102751.tar.gz b/tools/mock_server/uploads/event_1775701671_tree_20260409_102751.tar.gz new file mode 100644 index 0000000..0feb23d Binary files /dev/null and b/tools/mock_server/uploads/event_1775701671_tree_20260409_102751.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775716733_person_20260409_143906.tar.gz b/tools/mock_server/uploads/event_1775716733_person_20260409_143906.tar.gz new file mode 100644 index 0000000..fc66cb7 Binary files /dev/null and b/tools/mock_server/uploads/event_1775716733_person_20260409_143906.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775716748_person_20260409_143913.tar.gz b/tools/mock_server/uploads/event_1775716748_person_20260409_143913.tar.gz new file mode 100644 index 0000000..7355ed9 Binary files /dev/null and b/tools/mock_server/uploads/event_1775716748_person_20260409_143913.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775717376_person_20260409_144945.tar.gz b/tools/mock_server/uploads/event_1775717376_person_20260409_144945.tar.gz new file mode 100644 index 0000000..b9eb201 Binary files /dev/null and b/tools/mock_server/uploads/event_1775717376_person_20260409_144945.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775717926_20260409_145848.tar.gz b/tools/mock_server/uploads/event_1775717926_20260409_145848.tar.gz new file mode 100644 index 0000000..ef052b2 Binary files /dev/null and b/tools/mock_server/uploads/event_1775717926_20260409_145848.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775717936_person_20260409_145856.tar.gz b/tools/mock_server/uploads/event_1775717936_person_20260409_145856.tar.gz new file mode 100644 index 0000000..1febd8f Binary files /dev/null and b/tools/mock_server/uploads/event_1775717936_person_20260409_145856.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775717937_20260409_145902.tar.gz b/tools/mock_server/uploads/event_1775717937_20260409_145902.tar.gz new file mode 100644 index 0000000..7a0a319 Binary files /dev/null and b/tools/mock_server/uploads/event_1775717937_20260409_145902.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775783979_20260410_091953.tar.gz b/tools/mock_server/uploads/event_1775783979_20260410_091953.tar.gz new file mode 100644 index 0000000..c9cb3b6 Binary files /dev/null and b/tools/mock_server/uploads/event_1775783979_20260410_091953.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775783979_tree_20260410_091940.tar.gz b/tools/mock_server/uploads/event_1775783979_tree_20260410_091940.tar.gz new file mode 100644 index 0000000..fdafb4d Binary files /dev/null and b/tools/mock_server/uploads/event_1775783979_tree_20260410_091940.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775783990_person_20260410_091950.tar.gz b/tools/mock_server/uploads/event_1775783990_person_20260410_091950.tar.gz new file mode 100644 index 0000000..0b4a803 Binary files /dev/null and b/tools/mock_server/uploads/event_1775783990_person_20260410_091950.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775786232_20260410_095740.tar.gz b/tools/mock_server/uploads/event_1775786232_20260410_095740.tar.gz new file mode 100644 index 0000000..adbbf99 Binary files /dev/null and b/tools/mock_server/uploads/event_1775786232_20260410_095740.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775786234_tree_20260410_095714.tar.gz b/tools/mock_server/uploads/event_1775786234_tree_20260410_095714.tar.gz new file mode 100644 index 0000000..633c9af Binary files /dev/null and b/tools/mock_server/uploads/event_1775786234_tree_20260410_095714.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775787588_person_20260410_101948.tar.gz b/tools/mock_server/uploads/event_1775787588_person_20260410_101948.tar.gz new file mode 100644 index 0000000..d506a6f Binary files /dev/null and b/tools/mock_server/uploads/event_1775787588_person_20260410_101948.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775788914_person_20260410_104154.tar.gz b/tools/mock_server/uploads/event_1775788914_person_20260410_104154.tar.gz new file mode 100644 index 0000000..5889fe4 Binary files /dev/null and b/tools/mock_server/uploads/event_1775788914_person_20260410_104154.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775788915_person_20260410_104155.tar.gz b/tools/mock_server/uploads/event_1775788915_person_20260410_104155.tar.gz new file mode 100644 index 0000000..fd46513 Binary files /dev/null and b/tools/mock_server/uploads/event_1775788915_person_20260410_104155.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775788918_person_20260410_104158.tar.gz b/tools/mock_server/uploads/event_1775788918_person_20260410_104158.tar.gz new file mode 100644 index 0000000..c821d40 Binary files /dev/null and b/tools/mock_server/uploads/event_1775788918_person_20260410_104158.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775788925_person_20260410_104205.tar.gz b/tools/mock_server/uploads/event_1775788925_person_20260410_104205.tar.gz new file mode 100644 index 0000000..4a4c758 Binary files /dev/null and b/tools/mock_server/uploads/event_1775788925_person_20260410_104205.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775788927_person_20260410_104207.tar.gz b/tools/mock_server/uploads/event_1775788927_person_20260410_104207.tar.gz new file mode 100644 index 0000000..49a6dd3 Binary files /dev/null and b/tools/mock_server/uploads/event_1775788927_person_20260410_104207.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775788933_person_20260410_104213.tar.gz b/tools/mock_server/uploads/event_1775788933_person_20260410_104213.tar.gz new file mode 100644 index 0000000..09ac881 Binary files /dev/null and b/tools/mock_server/uploads/event_1775788933_person_20260410_104213.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775788940_person_20260410_104220.tar.gz b/tools/mock_server/uploads/event_1775788940_person_20260410_104220.tar.gz new file mode 100644 index 0000000..578d1cb Binary files /dev/null and b/tools/mock_server/uploads/event_1775788940_person_20260410_104220.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775788941_person_20260410_104221.tar.gz b/tools/mock_server/uploads/event_1775788941_person_20260410_104221.tar.gz new file mode 100644 index 0000000..5993837 Binary files /dev/null and b/tools/mock_server/uploads/event_1775788941_person_20260410_104221.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775788946_person_20260410_104226.tar.gz b/tools/mock_server/uploads/event_1775788946_person_20260410_104226.tar.gz new file mode 100644 index 0000000..caf2fb8 Binary files /dev/null and b/tools/mock_server/uploads/event_1775788946_person_20260410_104226.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775788948_person_20260410_104228.tar.gz b/tools/mock_server/uploads/event_1775788948_person_20260410_104228.tar.gz new file mode 100644 index 0000000..1793153 Binary files /dev/null and b/tools/mock_server/uploads/event_1775788948_person_20260410_104228.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775788951_person_20260410_104231.tar.gz b/tools/mock_server/uploads/event_1775788951_person_20260410_104231.tar.gz new file mode 100644 index 0000000..1fba017 Binary files /dev/null and b/tools/mock_server/uploads/event_1775788951_person_20260410_104231.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775788959_person_20260410_104239.tar.gz b/tools/mock_server/uploads/event_1775788959_person_20260410_104239.tar.gz new file mode 100644 index 0000000..4e70b2d Binary files /dev/null and b/tools/mock_server/uploads/event_1775788959_person_20260410_104239.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775788961_person_20260410_104241.tar.gz b/tools/mock_server/uploads/event_1775788961_person_20260410_104241.tar.gz new file mode 100644 index 0000000..d242276 Binary files /dev/null and b/tools/mock_server/uploads/event_1775788961_person_20260410_104241.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775788966_person_20260410_104247.tar.gz b/tools/mock_server/uploads/event_1775788966_person_20260410_104247.tar.gz new file mode 100644 index 0000000..0b359a2 Binary files /dev/null and b/tools/mock_server/uploads/event_1775788966_person_20260410_104247.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775788968_person_20260410_104248.tar.gz b/tools/mock_server/uploads/event_1775788968_person_20260410_104248.tar.gz new file mode 100644 index 0000000..bbf432c Binary files /dev/null and b/tools/mock_server/uploads/event_1775788968_person_20260410_104248.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775788970_person_20260410_104250.tar.gz b/tools/mock_server/uploads/event_1775788970_person_20260410_104250.tar.gz new file mode 100644 index 0000000..d0344f1 Binary files /dev/null and b/tools/mock_server/uploads/event_1775788970_person_20260410_104250.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775788971_person_20260410_104251.tar.gz b/tools/mock_server/uploads/event_1775788971_person_20260410_104251.tar.gz new file mode 100644 index 0000000..68e4115 Binary files /dev/null and b/tools/mock_server/uploads/event_1775788971_person_20260410_104251.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775788973_person_20260410_104253.tar.gz b/tools/mock_server/uploads/event_1775788973_person_20260410_104253.tar.gz new file mode 100644 index 0000000..f126103 Binary files /dev/null and b/tools/mock_server/uploads/event_1775788973_person_20260410_104253.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775788974_person_20260410_104254.tar.gz b/tools/mock_server/uploads/event_1775788974_person_20260410_104254.tar.gz new file mode 100644 index 0000000..189e1d2 Binary files /dev/null and b/tools/mock_server/uploads/event_1775788974_person_20260410_104254.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775788989_person_20260410_104310.tar.gz b/tools/mock_server/uploads/event_1775788989_person_20260410_104310.tar.gz new file mode 100644 index 0000000..bd0aa8b Binary files /dev/null and b/tools/mock_server/uploads/event_1775788989_person_20260410_104310.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775788990_person_20260410_104310.tar.gz b/tools/mock_server/uploads/event_1775788990_person_20260410_104310.tar.gz new file mode 100644 index 0000000..3795db1 Binary files /dev/null and b/tools/mock_server/uploads/event_1775788990_person_20260410_104310.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775788993_person_20260410_104313.tar.gz b/tools/mock_server/uploads/event_1775788993_person_20260410_104313.tar.gz new file mode 100644 index 0000000..5409a04 Binary files /dev/null and b/tools/mock_server/uploads/event_1775788993_person_20260410_104313.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775788996_person_20260410_104316.tar.gz b/tools/mock_server/uploads/event_1775788996_person_20260410_104316.tar.gz new file mode 100644 index 0000000..4e09075 Binary files /dev/null and b/tools/mock_server/uploads/event_1775788996_person_20260410_104316.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775789005_person_20260410_104325.tar.gz b/tools/mock_server/uploads/event_1775789005_person_20260410_104325.tar.gz new file mode 100644 index 0000000..3e8aece Binary files /dev/null and b/tools/mock_server/uploads/event_1775789005_person_20260410_104325.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775789017_person_20260410_104337.tar.gz b/tools/mock_server/uploads/event_1775789017_person_20260410_104337.tar.gz new file mode 100644 index 0000000..4754ed5 Binary files /dev/null and b/tools/mock_server/uploads/event_1775789017_person_20260410_104337.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775789024_person_20260410_104344.tar.gz b/tools/mock_server/uploads/event_1775789024_person_20260410_104344.tar.gz new file mode 100644 index 0000000..dc8f5e6 Binary files /dev/null and b/tools/mock_server/uploads/event_1775789024_person_20260410_104344.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775789025_person_20260410_104345.tar.gz b/tools/mock_server/uploads/event_1775789025_person_20260410_104345.tar.gz new file mode 100644 index 0000000..dbad245 Binary files /dev/null and b/tools/mock_server/uploads/event_1775789025_person_20260410_104345.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775789029_person_20260410_104350.tar.gz b/tools/mock_server/uploads/event_1775789029_person_20260410_104350.tar.gz new file mode 100644 index 0000000..4ac80a7 Binary files /dev/null and b/tools/mock_server/uploads/event_1775789029_person_20260410_104350.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775789033_person_20260410_104353.tar.gz b/tools/mock_server/uploads/event_1775789033_person_20260410_104353.tar.gz new file mode 100644 index 0000000..f312171 Binary files /dev/null and b/tools/mock_server/uploads/event_1775789033_person_20260410_104353.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775789034_person_20260410_104354.tar.gz b/tools/mock_server/uploads/event_1775789034_person_20260410_104354.tar.gz new file mode 100644 index 0000000..bf69012 Binary files /dev/null and b/tools/mock_server/uploads/event_1775789034_person_20260410_104354.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775789035_person_20260410_104355.tar.gz b/tools/mock_server/uploads/event_1775789035_person_20260410_104355.tar.gz new file mode 100644 index 0000000..4639cfb Binary files /dev/null and b/tools/mock_server/uploads/event_1775789035_person_20260410_104355.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775789041_person_20260410_104401.tar.gz b/tools/mock_server/uploads/event_1775789041_person_20260410_104401.tar.gz new file mode 100644 index 0000000..6c2757d Binary files /dev/null and b/tools/mock_server/uploads/event_1775789041_person_20260410_104401.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775789042_person_20260410_104402.tar.gz b/tools/mock_server/uploads/event_1775789042_person_20260410_104402.tar.gz new file mode 100644 index 0000000..9d42d08 Binary files /dev/null and b/tools/mock_server/uploads/event_1775789042_person_20260410_104402.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775789044_person_20260410_104404.tar.gz b/tools/mock_server/uploads/event_1775789044_person_20260410_104404.tar.gz new file mode 100644 index 0000000..94b21db Binary files /dev/null and b/tools/mock_server/uploads/event_1775789044_person_20260410_104404.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775789046_person_20260410_104406.tar.gz b/tools/mock_server/uploads/event_1775789046_person_20260410_104406.tar.gz new file mode 100644 index 0000000..1898db7 Binary files /dev/null and b/tools/mock_server/uploads/event_1775789046_person_20260410_104406.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775789047_person_20260410_104407.tar.gz b/tools/mock_server/uploads/event_1775789047_person_20260410_104407.tar.gz new file mode 100644 index 0000000..a1f1bd4 Binary files /dev/null and b/tools/mock_server/uploads/event_1775789047_person_20260410_104407.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775789049_person_20260410_104410.tar.gz b/tools/mock_server/uploads/event_1775789049_person_20260410_104410.tar.gz new file mode 100644 index 0000000..bd1b0e3 Binary files /dev/null and b/tools/mock_server/uploads/event_1775789049_person_20260410_104410.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775789050_person_20260410_104410.tar.gz b/tools/mock_server/uploads/event_1775789050_person_20260410_104410.tar.gz new file mode 100644 index 0000000..c9c0f5f Binary files /dev/null and b/tools/mock_server/uploads/event_1775789050_person_20260410_104410.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775789051_person_20260410_104411.tar.gz b/tools/mock_server/uploads/event_1775789051_person_20260410_104411.tar.gz new file mode 100644 index 0000000..6aaf612 Binary files /dev/null and b/tools/mock_server/uploads/event_1775789051_person_20260410_104411.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775789052_bunker_20260410_104412.tar.gz b/tools/mock_server/uploads/event_1775789052_bunker_20260410_104412.tar.gz new file mode 100644 index 0000000..02ad5c2 Binary files /dev/null and b/tools/mock_server/uploads/event_1775789052_bunker_20260410_104412.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775789053_bunker_20260410_104414.tar.gz b/tools/mock_server/uploads/event_1775789053_bunker_20260410_104414.tar.gz new file mode 100644 index 0000000..760bd89 Binary files /dev/null and b/tools/mock_server/uploads/event_1775789053_bunker_20260410_104414.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775789056_bunker_20260410_104417.tar.gz b/tools/mock_server/uploads/event_1775789056_bunker_20260410_104417.tar.gz new file mode 100644 index 0000000..2e045e0 Binary files /dev/null and b/tools/mock_server/uploads/event_1775789056_bunker_20260410_104417.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775789058_bunker_20260410_104418.tar.gz b/tools/mock_server/uploads/event_1775789058_bunker_20260410_104418.tar.gz new file mode 100644 index 0000000..43494b6 Binary files /dev/null and b/tools/mock_server/uploads/event_1775789058_bunker_20260410_104418.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775789059_tree_20260410_104419.tar.gz b/tools/mock_server/uploads/event_1775789059_tree_20260410_104419.tar.gz new file mode 100644 index 0000000..7660504 Binary files /dev/null and b/tools/mock_server/uploads/event_1775789059_tree_20260410_104419.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775789060_pond_20260410_104420.tar.gz b/tools/mock_server/uploads/event_1775789060_pond_20260410_104420.tar.gz new file mode 100644 index 0000000..a7effa1 Binary files /dev/null and b/tools/mock_server/uploads/event_1775789060_pond_20260410_104420.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775789061_bunker_20260410_104421.tar.gz b/tools/mock_server/uploads/event_1775789061_bunker_20260410_104421.tar.gz new file mode 100644 index 0000000..c980386 Binary files /dev/null and b/tools/mock_server/uploads/event_1775789061_bunker_20260410_104421.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775789062_pond_20260410_104422.tar.gz b/tools/mock_server/uploads/event_1775789062_pond_20260410_104422.tar.gz new file mode 100644 index 0000000..2cacd7b Binary files /dev/null and b/tools/mock_server/uploads/event_1775789062_pond_20260410_104422.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775797893_tree_20260410_131133.tar.gz b/tools/mock_server/uploads/event_1775797893_tree_20260410_131133.tar.gz new file mode 100644 index 0000000..88ef7e0 Binary files /dev/null and b/tools/mock_server/uploads/event_1775797893_tree_20260410_131133.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775797894_person_20260410_131134.tar.gz b/tools/mock_server/uploads/event_1775797894_person_20260410_131134.tar.gz new file mode 100644 index 0000000..c42de16 Binary files /dev/null and b/tools/mock_server/uploads/event_1775797894_person_20260410_131134.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775797902_tree_20260410_131142.tar.gz b/tools/mock_server/uploads/event_1775797902_tree_20260410_131142.tar.gz new file mode 100644 index 0000000..926ca98 Binary files /dev/null and b/tools/mock_server/uploads/event_1775797902_tree_20260410_131142.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775797904_tree_20260410_131144.tar.gz b/tools/mock_server/uploads/event_1775797904_tree_20260410_131144.tar.gz new file mode 100644 index 0000000..f8ca124 Binary files /dev/null and b/tools/mock_server/uploads/event_1775797904_tree_20260410_131144.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775797911_person_20260410_131151.tar.gz b/tools/mock_server/uploads/event_1775797911_person_20260410_131151.tar.gz new file mode 100644 index 0000000..b41bcfa Binary files /dev/null and b/tools/mock_server/uploads/event_1775797911_person_20260410_131151.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775797911_tree_20260410_131151.tar.gz b/tools/mock_server/uploads/event_1775797911_tree_20260410_131151.tar.gz new file mode 100644 index 0000000..188e406 Binary files /dev/null and b/tools/mock_server/uploads/event_1775797911_tree_20260410_131151.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775797914_tree_20260410_131154.tar.gz b/tools/mock_server/uploads/event_1775797914_tree_20260410_131154.tar.gz new file mode 100644 index 0000000..8a80f27 Binary files /dev/null and b/tools/mock_server/uploads/event_1775797914_tree_20260410_131154.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775797920_person_20260410_131200.tar.gz b/tools/mock_server/uploads/event_1775797920_person_20260410_131200.tar.gz new file mode 100644 index 0000000..8451187 Binary files /dev/null and b/tools/mock_server/uploads/event_1775797920_person_20260410_131200.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775797922_tree_20260410_131203.tar.gz b/tools/mock_server/uploads/event_1775797922_tree_20260410_131203.tar.gz new file mode 100644 index 0000000..5705947 Binary files /dev/null and b/tools/mock_server/uploads/event_1775797922_tree_20260410_131203.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775797926_person_20260410_131206.tar.gz b/tools/mock_server/uploads/event_1775797926_person_20260410_131206.tar.gz new file mode 100644 index 0000000..b9a09d8 Binary files /dev/null and b/tools/mock_server/uploads/event_1775797926_person_20260410_131206.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775797926_tree_20260410_131206.tar.gz b/tools/mock_server/uploads/event_1775797926_tree_20260410_131206.tar.gz new file mode 100644 index 0000000..6d1b278 Binary files /dev/null and b/tools/mock_server/uploads/event_1775797926_tree_20260410_131206.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775797938_person_20260410_131218.tar.gz b/tools/mock_server/uploads/event_1775797938_person_20260410_131218.tar.gz new file mode 100644 index 0000000..9576c79 Binary files /dev/null and b/tools/mock_server/uploads/event_1775797938_person_20260410_131218.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775797939_person_20260410_131219.tar.gz b/tools/mock_server/uploads/event_1775797939_person_20260410_131219.tar.gz new file mode 100644 index 0000000..ea1f696 Binary files /dev/null and b/tools/mock_server/uploads/event_1775797939_person_20260410_131219.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775797940_person_20260410_131220.tar.gz b/tools/mock_server/uploads/event_1775797940_person_20260410_131220.tar.gz new file mode 100644 index 0000000..51ad2b3 Binary files /dev/null and b/tools/mock_server/uploads/event_1775797940_person_20260410_131220.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775797941_person_20260410_131221.tar.gz b/tools/mock_server/uploads/event_1775797941_person_20260410_131221.tar.gz new file mode 100644 index 0000000..5b506d2 Binary files /dev/null and b/tools/mock_server/uploads/event_1775797941_person_20260410_131221.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775802544_20260410_142906.tar.gz b/tools/mock_server/uploads/event_1775802544_20260410_142906.tar.gz new file mode 100644 index 0000000..a5506dd Binary files /dev/null and b/tools/mock_server/uploads/event_1775802544_20260410_142906.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775802544_person_20260410_142904.tar.gz b/tools/mock_server/uploads/event_1775802544_person_20260410_142904.tar.gz new file mode 100644 index 0000000..1056160 Binary files /dev/null and b/tools/mock_server/uploads/event_1775802544_person_20260410_142904.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775802611_person_20260410_143011.tar.gz b/tools/mock_server/uploads/event_1775802611_person_20260410_143011.tar.gz new file mode 100644 index 0000000..e4623dd Binary files /dev/null and b/tools/mock_server/uploads/event_1775802611_person_20260410_143011.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775802618_person_20260410_143018.tar.gz b/tools/mock_server/uploads/event_1775802618_person_20260410_143018.tar.gz new file mode 100644 index 0000000..22b2ca1 Binary files /dev/null and b/tools/mock_server/uploads/event_1775802618_person_20260410_143018.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775802619_person_20260410_143019.tar.gz b/tools/mock_server/uploads/event_1775802619_person_20260410_143019.tar.gz new file mode 100644 index 0000000..15d6a89 Binary files /dev/null and b/tools/mock_server/uploads/event_1775802619_person_20260410_143019.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775802619_pond_20260410_143019.tar.gz b/tools/mock_server/uploads/event_1775802619_pond_20260410_143019.tar.gz new file mode 100644 index 0000000..4105cf9 Binary files /dev/null and b/tools/mock_server/uploads/event_1775802619_pond_20260410_143019.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775802620_person_20260410_143021.tar.gz b/tools/mock_server/uploads/event_1775802620_person_20260410_143021.tar.gz new file mode 100644 index 0000000..866d0d1 Binary files /dev/null and b/tools/mock_server/uploads/event_1775802620_person_20260410_143021.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775802620_tree_20260410_143020.tar.gz b/tools/mock_server/uploads/event_1775802620_tree_20260410_143020.tar.gz new file mode 100644 index 0000000..f463462 Binary files /dev/null and b/tools/mock_server/uploads/event_1775802620_tree_20260410_143020.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775802622_tree_20260410_143022.tar.gz b/tools/mock_server/uploads/event_1775802622_tree_20260410_143022.tar.gz new file mode 100644 index 0000000..d2e8d63 Binary files /dev/null and b/tools/mock_server/uploads/event_1775802622_tree_20260410_143022.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775802623_person_20260410_143023.tar.gz b/tools/mock_server/uploads/event_1775802623_person_20260410_143023.tar.gz new file mode 100644 index 0000000..f8ca28c Binary files /dev/null and b/tools/mock_server/uploads/event_1775802623_person_20260410_143023.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775802624_20260410_143027.tar.gz b/tools/mock_server/uploads/event_1775802624_20260410_143027.tar.gz new file mode 100644 index 0000000..213b740 Binary files /dev/null and b/tools/mock_server/uploads/event_1775802624_20260410_143027.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775802641_20260410_143043.tar.gz b/tools/mock_server/uploads/event_1775802641_20260410_143043.tar.gz new file mode 100644 index 0000000..9de7d3d Binary files /dev/null and b/tools/mock_server/uploads/event_1775802641_20260410_143043.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775802648_20260410_143051.tar.gz b/tools/mock_server/uploads/event_1775802648_20260410_143051.tar.gz new file mode 100644 index 0000000..6d4e471 Binary files /dev/null and b/tools/mock_server/uploads/event_1775802648_20260410_143051.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775802669_20260410_143115.tar.gz b/tools/mock_server/uploads/event_1775802669_20260410_143115.tar.gz new file mode 100644 index 0000000..c0dfd96 Binary files /dev/null and b/tools/mock_server/uploads/event_1775802669_20260410_143115.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775802670_person_20260410_143110.tar.gz b/tools/mock_server/uploads/event_1775802670_person_20260410_143110.tar.gz new file mode 100644 index 0000000..62ffecb Binary files /dev/null and b/tools/mock_server/uploads/event_1775802670_person_20260410_143110.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775802673_person_20260410_143113.tar.gz b/tools/mock_server/uploads/event_1775802673_person_20260410_143113.tar.gz new file mode 100644 index 0000000..09edf29 Binary files /dev/null and b/tools/mock_server/uploads/event_1775802673_person_20260410_143113.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775802716_20260410_143158.tar.gz b/tools/mock_server/uploads/event_1775802716_20260410_143158.tar.gz new file mode 100644 index 0000000..1096c42 Binary files /dev/null and b/tools/mock_server/uploads/event_1775802716_20260410_143158.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775802726_20260410_143245.tar.gz b/tools/mock_server/uploads/event_1775802726_20260410_143245.tar.gz new file mode 100644 index 0000000..7b50490 Binary files /dev/null and b/tools/mock_server/uploads/event_1775802726_20260410_143245.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775802735_tree_20260410_143215.tar.gz b/tools/mock_server/uploads/event_1775802735_tree_20260410_143215.tar.gz new file mode 100644 index 0000000..e2b72bc Binary files /dev/null and b/tools/mock_server/uploads/event_1775802735_tree_20260410_143215.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775802739_tree_20260410_143219.tar.gz b/tools/mock_server/uploads/event_1775802739_tree_20260410_143219.tar.gz new file mode 100644 index 0000000..709e7f5 Binary files /dev/null and b/tools/mock_server/uploads/event_1775802739_tree_20260410_143219.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775802741_tree_20260410_143221.tar.gz b/tools/mock_server/uploads/event_1775802741_tree_20260410_143221.tar.gz new file mode 100644 index 0000000..fe3a982 Binary files /dev/null and b/tools/mock_server/uploads/event_1775802741_tree_20260410_143221.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775802742_tree_20260410_143222.tar.gz b/tools/mock_server/uploads/event_1775802742_tree_20260410_143222.tar.gz new file mode 100644 index 0000000..24896a9 Binary files /dev/null and b/tools/mock_server/uploads/event_1775802742_tree_20260410_143222.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775802758_person_20260410_143238.tar.gz b/tools/mock_server/uploads/event_1775802758_person_20260410_143238.tar.gz new file mode 100644 index 0000000..69adf3f Binary files /dev/null and b/tools/mock_server/uploads/event_1775802758_person_20260410_143238.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775802759_tree_20260410_143239.tar.gz b/tools/mock_server/uploads/event_1775802759_tree_20260410_143239.tar.gz new file mode 100644 index 0000000..415558e Binary files /dev/null and b/tools/mock_server/uploads/event_1775802759_tree_20260410_143239.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775802763_person_20260410_143243.tar.gz b/tools/mock_server/uploads/event_1775802763_person_20260410_143243.tar.gz new file mode 100644 index 0000000..74c8a5e Binary files /dev/null and b/tools/mock_server/uploads/event_1775802763_person_20260410_143243.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775802764_person_20260410_143244.tar.gz b/tools/mock_server/uploads/event_1775802764_person_20260410_143244.tar.gz new file mode 100644 index 0000000..9da04df Binary files /dev/null and b/tools/mock_server/uploads/event_1775802764_person_20260410_143244.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775802766_20260410_143248.tar.gz b/tools/mock_server/uploads/event_1775802766_20260410_143248.tar.gz new file mode 100644 index 0000000..861b2c0 Binary files /dev/null and b/tools/mock_server/uploads/event_1775802766_20260410_143248.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775803045_person_20260410_143725.tar.gz b/tools/mock_server/uploads/event_1775803045_person_20260410_143725.tar.gz new file mode 100644 index 0000000..b30652b Binary files /dev/null and b/tools/mock_server/uploads/event_1775803045_person_20260410_143725.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775803046_20260410_143746.tar.gz b/tools/mock_server/uploads/event_1775803046_20260410_143746.tar.gz new file mode 100644 index 0000000..e1ebe8e Binary files /dev/null and b/tools/mock_server/uploads/event_1775803046_20260410_143746.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775803047_person_20260410_143727.tar.gz b/tools/mock_server/uploads/event_1775803047_person_20260410_143727.tar.gz new file mode 100644 index 0000000..f7af4e3 Binary files /dev/null and b/tools/mock_server/uploads/event_1775803047_person_20260410_143727.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775803047_tree_20260410_143727.tar.gz b/tools/mock_server/uploads/event_1775803047_tree_20260410_143727.tar.gz new file mode 100644 index 0000000..5ddd32d Binary files /dev/null and b/tools/mock_server/uploads/event_1775803047_tree_20260410_143727.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775803050_person_20260410_143730.tar.gz b/tools/mock_server/uploads/event_1775803050_person_20260410_143730.tar.gz new file mode 100644 index 0000000..511b707 Binary files /dev/null and b/tools/mock_server/uploads/event_1775803050_person_20260410_143730.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775803051_tree_20260410_143731.tar.gz b/tools/mock_server/uploads/event_1775803051_tree_20260410_143731.tar.gz new file mode 100644 index 0000000..2329635 Binary files /dev/null and b/tools/mock_server/uploads/event_1775803051_tree_20260410_143731.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775803063_person_20260410_143743.tar.gz b/tools/mock_server/uploads/event_1775803063_person_20260410_143743.tar.gz new file mode 100644 index 0000000..fa57042 Binary files /dev/null and b/tools/mock_server/uploads/event_1775803063_person_20260410_143743.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775803783_person_20260410_144943.tar.gz b/tools/mock_server/uploads/event_1775803783_person_20260410_144943.tar.gz new file mode 100644 index 0000000..012e48a Binary files /dev/null and b/tools/mock_server/uploads/event_1775803783_person_20260410_144943.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775803786_20260410_144955.tar.gz b/tools/mock_server/uploads/event_1775803786_20260410_144955.tar.gz new file mode 100644 index 0000000..25e070f Binary files /dev/null and b/tools/mock_server/uploads/event_1775803786_20260410_144955.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775803790_person_20260410_144950.tar.gz b/tools/mock_server/uploads/event_1775803790_person_20260410_144950.tar.gz new file mode 100644 index 0000000..ada7878 Binary files /dev/null and b/tools/mock_server/uploads/event_1775803790_person_20260410_144950.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775803791_person_20260410_144951.tar.gz b/tools/mock_server/uploads/event_1775803791_person_20260410_144951.tar.gz new file mode 100644 index 0000000..b4b2a50 Binary files /dev/null and b/tools/mock_server/uploads/event_1775803791_person_20260410_144951.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775803792_person_20260410_144952.tar.gz b/tools/mock_server/uploads/event_1775803792_person_20260410_144952.tar.gz new file mode 100644 index 0000000..a850374 Binary files /dev/null and b/tools/mock_server/uploads/event_1775803792_person_20260410_144952.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775803792_tree_20260410_144953.tar.gz b/tools/mock_server/uploads/event_1775803792_tree_20260410_144953.tar.gz new file mode 100644 index 0000000..d8f882f Binary files /dev/null and b/tools/mock_server/uploads/event_1775803792_tree_20260410_144953.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775803794_person_20260410_144955.tar.gz b/tools/mock_server/uploads/event_1775803794_person_20260410_144955.tar.gz new file mode 100644 index 0000000..439066e Binary files /dev/null and b/tools/mock_server/uploads/event_1775803794_person_20260410_144955.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775803794_tree_20260410_144954.tar.gz b/tools/mock_server/uploads/event_1775803794_tree_20260410_144954.tar.gz new file mode 100644 index 0000000..f07c4a9 Binary files /dev/null and b/tools/mock_server/uploads/event_1775803794_tree_20260410_144954.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775804259_20260410_145743.tar.gz b/tools/mock_server/uploads/event_1775804259_20260410_145743.tar.gz new file mode 100644 index 0000000..a2a9920 Binary files /dev/null and b/tools/mock_server/uploads/event_1775804259_20260410_145743.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775804259_tree_20260410_145739.tar.gz b/tools/mock_server/uploads/event_1775804259_tree_20260410_145739.tar.gz new file mode 100644 index 0000000..1ad7cd4 Binary files /dev/null and b/tools/mock_server/uploads/event_1775804259_tree_20260410_145739.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775804260_person_20260410_145740.tar.gz b/tools/mock_server/uploads/event_1775804260_person_20260410_145740.tar.gz new file mode 100644 index 0000000..5223500 Binary files /dev/null and b/tools/mock_server/uploads/event_1775804260_person_20260410_145740.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775804334_20260410_145918.tar.gz b/tools/mock_server/uploads/event_1775804334_20260410_145918.tar.gz new file mode 100644 index 0000000..e59a583 Binary files /dev/null and b/tools/mock_server/uploads/event_1775804334_20260410_145918.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775804334_person_20260410_145854.tar.gz b/tools/mock_server/uploads/event_1775804334_person_20260410_145854.tar.gz new file mode 100644 index 0000000..3f358a6 Binary files /dev/null and b/tools/mock_server/uploads/event_1775804334_person_20260410_145854.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775804337_tree_20260410_145857.tar.gz b/tools/mock_server/uploads/event_1775804337_tree_20260410_145857.tar.gz new file mode 100644 index 0000000..3abd42b Binary files /dev/null and b/tools/mock_server/uploads/event_1775804337_tree_20260410_145857.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775804364_person_20260410_145924.tar.gz b/tools/mock_server/uploads/event_1775804364_person_20260410_145924.tar.gz new file mode 100644 index 0000000..45c3bcc Binary files /dev/null and b/tools/mock_server/uploads/event_1775804364_person_20260410_145924.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775804365_20260410_145929.tar.gz b/tools/mock_server/uploads/event_1775804365_20260410_145929.tar.gz new file mode 100644 index 0000000..bf38c4e Binary files /dev/null and b/tools/mock_server/uploads/event_1775804365_20260410_145929.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775804365_person_20260410_145925.tar.gz b/tools/mock_server/uploads/event_1775804365_person_20260410_145925.tar.gz new file mode 100644 index 0000000..2a74b66 Binary files /dev/null and b/tools/mock_server/uploads/event_1775804365_person_20260410_145925.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775804366_person_20260410_145926.tar.gz b/tools/mock_server/uploads/event_1775804366_person_20260410_145926.tar.gz new file mode 100644 index 0000000..cb6364f Binary files /dev/null and b/tools/mock_server/uploads/event_1775804366_person_20260410_145926.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775804366_tree_20260410_145926.tar.gz b/tools/mock_server/uploads/event_1775804366_tree_20260410_145926.tar.gz new file mode 100644 index 0000000..3767e3f Binary files /dev/null and b/tools/mock_server/uploads/event_1775804366_tree_20260410_145926.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775804425_person_20260410_150025.tar.gz b/tools/mock_server/uploads/event_1775804425_person_20260410_150025.tar.gz new file mode 100644 index 0000000..09a4d9c Binary files /dev/null and b/tools/mock_server/uploads/event_1775804425_person_20260410_150025.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775804426_20260410_150030.tar.gz b/tools/mock_server/uploads/event_1775804426_20260410_150030.tar.gz new file mode 100644 index 0000000..2b7626f Binary files /dev/null and b/tools/mock_server/uploads/event_1775804426_20260410_150030.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775804440_20260410_150047.tar.gz b/tools/mock_server/uploads/event_1775804440_20260410_150047.tar.gz new file mode 100644 index 0000000..539d55f Binary files /dev/null and b/tools/mock_server/uploads/event_1775804440_20260410_150047.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775804440_person_20260410_150040.tar.gz b/tools/mock_server/uploads/event_1775804440_person_20260410_150040.tar.gz new file mode 100644 index 0000000..c52d980 Binary files /dev/null and b/tools/mock_server/uploads/event_1775804440_person_20260410_150040.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775804444_person_20260410_150044.tar.gz b/tools/mock_server/uploads/event_1775804444_person_20260410_150044.tar.gz new file mode 100644 index 0000000..f710291 Binary files /dev/null and b/tools/mock_server/uploads/event_1775804444_person_20260410_150044.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775804444_tree_20260410_150045.tar.gz b/tools/mock_server/uploads/event_1775804444_tree_20260410_150045.tar.gz new file mode 100644 index 0000000..862f70b Binary files /dev/null and b/tools/mock_server/uploads/event_1775804444_tree_20260410_150045.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775804451_20260410_150058.tar.gz b/tools/mock_server/uploads/event_1775804451_20260410_150058.tar.gz new file mode 100644 index 0000000..442a9fa Binary files /dev/null and b/tools/mock_server/uploads/event_1775804451_20260410_150058.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775804451_person_20260410_150051.tar.gz b/tools/mock_server/uploads/event_1775804451_person_20260410_150051.tar.gz new file mode 100644 index 0000000..2f3ec6f Binary files /dev/null and b/tools/mock_server/uploads/event_1775804451_person_20260410_150051.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775804452_tree_20260410_150052.tar.gz b/tools/mock_server/uploads/event_1775804452_tree_20260410_150052.tar.gz new file mode 100644 index 0000000..4d98adb Binary files /dev/null and b/tools/mock_server/uploads/event_1775804452_tree_20260410_150052.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775804456_tree_20260410_150056.tar.gz b/tools/mock_server/uploads/event_1775804456_tree_20260410_150056.tar.gz new file mode 100644 index 0000000..fad76f6 Binary files /dev/null and b/tools/mock_server/uploads/event_1775804456_tree_20260410_150056.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775804826_20260410_150731.tar.gz b/tools/mock_server/uploads/event_1775804826_20260410_150731.tar.gz new file mode 100644 index 0000000..6d427a3 Binary files /dev/null and b/tools/mock_server/uploads/event_1775804826_20260410_150731.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775804826_person_20260410_150706.tar.gz b/tools/mock_server/uploads/event_1775804826_person_20260410_150706.tar.gz new file mode 100644 index 0000000..6ca0d87 Binary files /dev/null and b/tools/mock_server/uploads/event_1775804826_person_20260410_150706.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775804827_tree_20260410_150707.tar.gz b/tools/mock_server/uploads/event_1775804827_tree_20260410_150707.tar.gz new file mode 100644 index 0000000..ffe0f7e Binary files /dev/null and b/tools/mock_server/uploads/event_1775804827_tree_20260410_150707.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775804828_tree_20260410_150708.tar.gz b/tools/mock_server/uploads/event_1775804828_tree_20260410_150708.tar.gz new file mode 100644 index 0000000..04bb746 Binary files /dev/null and b/tools/mock_server/uploads/event_1775804828_tree_20260410_150708.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775804849_person_20260410_150729.tar.gz b/tools/mock_server/uploads/event_1775804849_person_20260410_150729.tar.gz new file mode 100644 index 0000000..8bfae7e Binary files /dev/null and b/tools/mock_server/uploads/event_1775804849_person_20260410_150729.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775804849_pond_20260410_150729.tar.gz b/tools/mock_server/uploads/event_1775804849_pond_20260410_150729.tar.gz new file mode 100644 index 0000000..efdc037 Binary files /dev/null and b/tools/mock_server/uploads/event_1775804849_pond_20260410_150729.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775804849_tree_20260410_150729.tar.gz b/tools/mock_server/uploads/event_1775804849_tree_20260410_150729.tar.gz new file mode 100644 index 0000000..40e4d1d Binary files /dev/null and b/tools/mock_server/uploads/event_1775804849_tree_20260410_150729.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775804855_tree_20260410_150735.tar.gz b/tools/mock_server/uploads/event_1775804855_tree_20260410_150735.tar.gz new file mode 100644 index 0000000..51c67d2 Binary files /dev/null and b/tools/mock_server/uploads/event_1775804855_tree_20260410_150735.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775804860_person_20260410_150740.tar.gz b/tools/mock_server/uploads/event_1775804860_person_20260410_150740.tar.gz new file mode 100644 index 0000000..3fba426 Binary files /dev/null and b/tools/mock_server/uploads/event_1775804860_person_20260410_150740.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775804862_person_20260410_150742.tar.gz b/tools/mock_server/uploads/event_1775804862_person_20260410_150742.tar.gz new file mode 100644 index 0000000..2edb6e3 Binary files /dev/null and b/tools/mock_server/uploads/event_1775804862_person_20260410_150742.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775804862_person_20260410_150743.tar.gz b/tools/mock_server/uploads/event_1775804862_person_20260410_150743.tar.gz new file mode 100644 index 0000000..d4b9926 Binary files /dev/null and b/tools/mock_server/uploads/event_1775804862_person_20260410_150743.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775804864_person_20260410_150744.tar.gz b/tools/mock_server/uploads/event_1775804864_person_20260410_150744.tar.gz new file mode 100644 index 0000000..7c275eb Binary files /dev/null and b/tools/mock_server/uploads/event_1775804864_person_20260410_150744.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775804865_person_20260410_150745.tar.gz b/tools/mock_server/uploads/event_1775804865_person_20260410_150745.tar.gz new file mode 100644 index 0000000..5a1c961 Binary files /dev/null and b/tools/mock_server/uploads/event_1775804865_person_20260410_150745.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775804866_person_20260410_150746.tar.gz b/tools/mock_server/uploads/event_1775804866_person_20260410_150746.tar.gz new file mode 100644 index 0000000..c3a0bdc Binary files /dev/null and b/tools/mock_server/uploads/event_1775804866_person_20260410_150746.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775804868_person_20260410_150748.tar.gz b/tools/mock_server/uploads/event_1775804868_person_20260410_150748.tar.gz new file mode 100644 index 0000000..8ba0a1a Binary files /dev/null and b/tools/mock_server/uploads/event_1775804868_person_20260410_150748.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775804870_person_20260410_150750.tar.gz b/tools/mock_server/uploads/event_1775804870_person_20260410_150750.tar.gz new file mode 100644 index 0000000..f956e48 Binary files /dev/null and b/tools/mock_server/uploads/event_1775804870_person_20260410_150750.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775804871_person_20260410_150751.tar.gz b/tools/mock_server/uploads/event_1775804871_person_20260410_150751.tar.gz new file mode 100644 index 0000000..fd3f1e5 Binary files /dev/null and b/tools/mock_server/uploads/event_1775804871_person_20260410_150751.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775804881_person_20260410_150801.tar.gz b/tools/mock_server/uploads/event_1775804881_person_20260410_150801.tar.gz new file mode 100644 index 0000000..855d77c Binary files /dev/null and b/tools/mock_server/uploads/event_1775804881_person_20260410_150801.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775804886_person_20260410_150806.tar.gz b/tools/mock_server/uploads/event_1775804886_person_20260410_150806.tar.gz new file mode 100644 index 0000000..ac7e1c7 Binary files /dev/null and b/tools/mock_server/uploads/event_1775804886_person_20260410_150806.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775804897_person_20260410_150818.tar.gz b/tools/mock_server/uploads/event_1775804897_person_20260410_150818.tar.gz new file mode 100644 index 0000000..5819ba3 Binary files /dev/null and b/tools/mock_server/uploads/event_1775804897_person_20260410_150818.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775804899_person_20260410_150819.tar.gz b/tools/mock_server/uploads/event_1775804899_person_20260410_150819.tar.gz new file mode 100644 index 0000000..1db2174 Binary files /dev/null and b/tools/mock_server/uploads/event_1775804899_person_20260410_150819.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775804900_person_20260410_150820.tar.gz b/tools/mock_server/uploads/event_1775804900_person_20260410_150820.tar.gz new file mode 100644 index 0000000..4ed794e Binary files /dev/null and b/tools/mock_server/uploads/event_1775804900_person_20260410_150820.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775804902_person_20260410_150823.tar.gz b/tools/mock_server/uploads/event_1775804902_person_20260410_150823.tar.gz new file mode 100644 index 0000000..c65e30d Binary files /dev/null and b/tools/mock_server/uploads/event_1775804902_person_20260410_150823.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775804904_person_20260410_150824.tar.gz b/tools/mock_server/uploads/event_1775804904_person_20260410_150824.tar.gz new file mode 100644 index 0000000..3be292a Binary files /dev/null and b/tools/mock_server/uploads/event_1775804904_person_20260410_150824.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775804906_person_20260410_150826.tar.gz b/tools/mock_server/uploads/event_1775804906_person_20260410_150826.tar.gz new file mode 100644 index 0000000..3605be0 Binary files /dev/null and b/tools/mock_server/uploads/event_1775804906_person_20260410_150826.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775804907_person_20260410_150827.tar.gz b/tools/mock_server/uploads/event_1775804907_person_20260410_150827.tar.gz new file mode 100644 index 0000000..5ac76a9 Binary files /dev/null and b/tools/mock_server/uploads/event_1775804907_person_20260410_150827.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775804908_person_20260410_150828.tar.gz b/tools/mock_server/uploads/event_1775804908_person_20260410_150828.tar.gz new file mode 100644 index 0000000..75799d3 Binary files /dev/null and b/tools/mock_server/uploads/event_1775804908_person_20260410_150828.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775804909_person_20260410_150829.tar.gz b/tools/mock_server/uploads/event_1775804909_person_20260410_150829.tar.gz new file mode 100644 index 0000000..4100aa6 Binary files /dev/null and b/tools/mock_server/uploads/event_1775804909_person_20260410_150829.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775804911_person_20260410_150831.tar.gz b/tools/mock_server/uploads/event_1775804911_person_20260410_150831.tar.gz new file mode 100644 index 0000000..5048dbd Binary files /dev/null and b/tools/mock_server/uploads/event_1775804911_person_20260410_150831.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775804911_person_20260410_150832.tar.gz b/tools/mock_server/uploads/event_1775804911_person_20260410_150832.tar.gz new file mode 100644 index 0000000..d4b9926 Binary files /dev/null and b/tools/mock_server/uploads/event_1775804911_person_20260410_150832.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775804912_tree_20260410_150833.tar.gz b/tools/mock_server/uploads/event_1775804912_tree_20260410_150833.tar.gz new file mode 100644 index 0000000..f1692a1 Binary files /dev/null and b/tools/mock_server/uploads/event_1775804912_tree_20260410_150833.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775804918_20260410_150847.tar.gz b/tools/mock_server/uploads/event_1775804918_20260410_150847.tar.gz new file mode 100644 index 0000000..cbf74d7 Binary files /dev/null and b/tools/mock_server/uploads/event_1775804918_20260410_150847.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775804918_person_20260410_150839.tar.gz b/tools/mock_server/uploads/event_1775804918_person_20260410_150839.tar.gz new file mode 100644 index 0000000..539487a Binary files /dev/null and b/tools/mock_server/uploads/event_1775804918_person_20260410_150839.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775804924_tree_20260410_150844.tar.gz b/tools/mock_server/uploads/event_1775804924_tree_20260410_150844.tar.gz new file mode 100644 index 0000000..9bbf993 Binary files /dev/null and b/tools/mock_server/uploads/event_1775804924_tree_20260410_150844.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775804925_tree_20260410_150845.tar.gz b/tools/mock_server/uploads/event_1775804925_tree_20260410_150845.tar.gz new file mode 100644 index 0000000..92e29aa Binary files /dev/null and b/tools/mock_server/uploads/event_1775804925_tree_20260410_150845.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775804925_tree_20260410_150846.tar.gz b/tools/mock_server/uploads/event_1775804925_tree_20260410_150846.tar.gz new file mode 100644 index 0000000..9a4ee2f Binary files /dev/null and b/tools/mock_server/uploads/event_1775804925_tree_20260410_150846.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775804926_tree_20260410_150847.tar.gz b/tools/mock_server/uploads/event_1775804926_tree_20260410_150847.tar.gz new file mode 100644 index 0000000..f0541f4 Binary files /dev/null and b/tools/mock_server/uploads/event_1775804926_tree_20260410_150847.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775805058_person_20260410_151058.tar.gz b/tools/mock_server/uploads/event_1775805058_person_20260410_151058.tar.gz new file mode 100644 index 0000000..687e390 Binary files /dev/null and b/tools/mock_server/uploads/event_1775805058_person_20260410_151058.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775805059_person_20260410_151059.tar.gz b/tools/mock_server/uploads/event_1775805059_person_20260410_151059.tar.gz new file mode 100644 index 0000000..9c80abe Binary files /dev/null and b/tools/mock_server/uploads/event_1775805059_person_20260410_151059.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775805059_tree_20260410_151059.tar.gz b/tools/mock_server/uploads/event_1775805059_tree_20260410_151059.tar.gz new file mode 100644 index 0000000..ee4edf5 Binary files /dev/null and b/tools/mock_server/uploads/event_1775805059_tree_20260410_151059.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775805060_tree_20260410_151100.tar.gz b/tools/mock_server/uploads/event_1775805060_tree_20260410_151100.tar.gz new file mode 100644 index 0000000..0641b0e Binary files /dev/null and b/tools/mock_server/uploads/event_1775805060_tree_20260410_151100.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775805062_person_20260410_151102.tar.gz b/tools/mock_server/uploads/event_1775805062_person_20260410_151102.tar.gz new file mode 100644 index 0000000..b07c4d7 Binary files /dev/null and b/tools/mock_server/uploads/event_1775805062_person_20260410_151102.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775805063_person_20260410_151103.tar.gz b/tools/mock_server/uploads/event_1775805063_person_20260410_151103.tar.gz new file mode 100644 index 0000000..912bcf9 Binary files /dev/null and b/tools/mock_server/uploads/event_1775805063_person_20260410_151103.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775805064_person_20260410_151104.tar.gz b/tools/mock_server/uploads/event_1775805064_person_20260410_151104.tar.gz new file mode 100644 index 0000000..424d0b3 Binary files /dev/null and b/tools/mock_server/uploads/event_1775805064_person_20260410_151104.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775805066_person_20260410_151106.tar.gz b/tools/mock_server/uploads/event_1775805066_person_20260410_151106.tar.gz new file mode 100644 index 0000000..31cb475 Binary files /dev/null and b/tools/mock_server/uploads/event_1775805066_person_20260410_151106.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775805066_tree_20260410_151106.tar.gz b/tools/mock_server/uploads/event_1775805066_tree_20260410_151106.tar.gz new file mode 100644 index 0000000..4faadca Binary files /dev/null and b/tools/mock_server/uploads/event_1775805066_tree_20260410_151106.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775805072_person_20260410_151112.tar.gz b/tools/mock_server/uploads/event_1775805072_person_20260410_151112.tar.gz new file mode 100644 index 0000000..0afae89 Binary files /dev/null and b/tools/mock_server/uploads/event_1775805072_person_20260410_151112.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775805074_tree_20260410_151114.tar.gz b/tools/mock_server/uploads/event_1775805074_tree_20260410_151114.tar.gz new file mode 100644 index 0000000..979dba0 Binary files /dev/null and b/tools/mock_server/uploads/event_1775805074_tree_20260410_151114.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775805075_person_20260410_151115.tar.gz b/tools/mock_server/uploads/event_1775805075_person_20260410_151115.tar.gz new file mode 100644 index 0000000..cf5c3bf Binary files /dev/null and b/tools/mock_server/uploads/event_1775805075_person_20260410_151115.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775805076_person_20260410_151116.tar.gz b/tools/mock_server/uploads/event_1775805076_person_20260410_151116.tar.gz new file mode 100644 index 0000000..a5a89a0 Binary files /dev/null and b/tools/mock_server/uploads/event_1775805076_person_20260410_151116.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775805081_tree_20260410_151121.tar.gz b/tools/mock_server/uploads/event_1775805081_tree_20260410_151121.tar.gz new file mode 100644 index 0000000..515b8f6 Binary files /dev/null and b/tools/mock_server/uploads/event_1775805081_tree_20260410_151121.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775805084_tree_20260410_151124.tar.gz b/tools/mock_server/uploads/event_1775805084_tree_20260410_151124.tar.gz new file mode 100644 index 0000000..4c859b3 Binary files /dev/null and b/tools/mock_server/uploads/event_1775805084_tree_20260410_151124.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775805084_tree_20260410_151125.tar.gz b/tools/mock_server/uploads/event_1775805084_tree_20260410_151125.tar.gz new file mode 100644 index 0000000..be9423b Binary files /dev/null and b/tools/mock_server/uploads/event_1775805084_tree_20260410_151125.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775805091_20260410_151135.tar.gz b/tools/mock_server/uploads/event_1775805091_20260410_151135.tar.gz new file mode 100644 index 0000000..c29b5d7 Binary files /dev/null and b/tools/mock_server/uploads/event_1775805091_20260410_151135.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775805091_tree_20260410_151131.tar.gz b/tools/mock_server/uploads/event_1775805091_tree_20260410_151131.tar.gz new file mode 100644 index 0000000..e8eedc4 Binary files /dev/null and b/tools/mock_server/uploads/event_1775805091_tree_20260410_151131.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775805092_person_20260410_151132.tar.gz b/tools/mock_server/uploads/event_1775805092_person_20260410_151132.tar.gz new file mode 100644 index 0000000..119617d Binary files /dev/null and b/tools/mock_server/uploads/event_1775805092_person_20260410_151132.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775805853_person_20260410_152413.tar.gz b/tools/mock_server/uploads/event_1775805853_person_20260410_152413.tar.gz new file mode 100644 index 0000000..801c94a Binary files /dev/null and b/tools/mock_server/uploads/event_1775805853_person_20260410_152413.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775805855_20260410_152418.tar.gz b/tools/mock_server/uploads/event_1775805855_20260410_152418.tar.gz new file mode 100644 index 0000000..ace8177 Binary files /dev/null and b/tools/mock_server/uploads/event_1775805855_20260410_152418.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775805855_person_20260410_152415.tar.gz b/tools/mock_server/uploads/event_1775805855_person_20260410_152415.tar.gz new file mode 100644 index 0000000..b915423 Binary files /dev/null and b/tools/mock_server/uploads/event_1775805855_person_20260410_152415.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775805856_tree_20260410_152416.tar.gz b/tools/mock_server/uploads/event_1775805856_tree_20260410_152416.tar.gz new file mode 100644 index 0000000..f4be774 Binary files /dev/null and b/tools/mock_server/uploads/event_1775805856_tree_20260410_152416.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775805891_person_20260410_152451.tar.gz b/tools/mock_server/uploads/event_1775805891_person_20260410_152451.tar.gz new file mode 100644 index 0000000..4d9203a Binary files /dev/null and b/tools/mock_server/uploads/event_1775805891_person_20260410_152451.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775805894_person_20260410_152454.tar.gz b/tools/mock_server/uploads/event_1775805894_person_20260410_152454.tar.gz new file mode 100644 index 0000000..0afd4c0 Binary files /dev/null and b/tools/mock_server/uploads/event_1775805894_person_20260410_152454.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775805894_tree_20260410_152454.tar.gz b/tools/mock_server/uploads/event_1775805894_tree_20260410_152454.tar.gz new file mode 100644 index 0000000..4564e13 Binary files /dev/null and b/tools/mock_server/uploads/event_1775805894_tree_20260410_152454.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775805902_person_20260410_152502.tar.gz b/tools/mock_server/uploads/event_1775805902_person_20260410_152502.tar.gz new file mode 100644 index 0000000..e5b2eb0 Binary files /dev/null and b/tools/mock_server/uploads/event_1775805902_person_20260410_152502.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775805902_tree_20260410_152503.tar.gz b/tools/mock_server/uploads/event_1775805902_tree_20260410_152503.tar.gz new file mode 100644 index 0000000..4a9fb65 Binary files /dev/null and b/tools/mock_server/uploads/event_1775805902_tree_20260410_152503.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775805903_tree_20260410_152503.tar.gz b/tools/mock_server/uploads/event_1775805903_tree_20260410_152503.tar.gz new file mode 100644 index 0000000..6178f8a Binary files /dev/null and b/tools/mock_server/uploads/event_1775805903_tree_20260410_152503.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775805917_person_20260410_152518.tar.gz b/tools/mock_server/uploads/event_1775805917_person_20260410_152518.tar.gz new file mode 100644 index 0000000..131b27f Binary files /dev/null and b/tools/mock_server/uploads/event_1775805917_person_20260410_152518.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775805918_20260410_152521.tar.gz b/tools/mock_server/uploads/event_1775805918_20260410_152521.tar.gz new file mode 100644 index 0000000..d13a75e Binary files /dev/null and b/tools/mock_server/uploads/event_1775805918_20260410_152521.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775805918_tree_20260410_152518.tar.gz b/tools/mock_server/uploads/event_1775805918_tree_20260410_152518.tar.gz new file mode 100644 index 0000000..4aa0af9 Binary files /dev/null and b/tools/mock_server/uploads/event_1775805918_tree_20260410_152518.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775806002_20260410_152648.tar.gz b/tools/mock_server/uploads/event_1775806002_20260410_152648.tar.gz new file mode 100644 index 0000000..b3f989e Binary files /dev/null and b/tools/mock_server/uploads/event_1775806002_20260410_152648.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775806002_person_20260410_152642.tar.gz b/tools/mock_server/uploads/event_1775806002_person_20260410_152642.tar.gz new file mode 100644 index 0000000..1938400 Binary files /dev/null and b/tools/mock_server/uploads/event_1775806002_person_20260410_152642.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775806004_person_20260410_152644.tar.gz b/tools/mock_server/uploads/event_1775806004_person_20260410_152644.tar.gz new file mode 100644 index 0000000..d96c5f8 Binary files /dev/null and b/tools/mock_server/uploads/event_1775806004_person_20260410_152644.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775806005_tree_20260410_152645.tar.gz b/tools/mock_server/uploads/event_1775806005_tree_20260410_152645.tar.gz new file mode 100644 index 0000000..fad2460 Binary files /dev/null and b/tools/mock_server/uploads/event_1775806005_tree_20260410_152645.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775806430_20260410_153409.tar.gz b/tools/mock_server/uploads/event_1775806430_20260410_153409.tar.gz new file mode 100644 index 0000000..ab7adf6 Binary files /dev/null and b/tools/mock_server/uploads/event_1775806430_20260410_153409.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775806447_person_20260410_153407.tar.gz b/tools/mock_server/uploads/event_1775806447_person_20260410_153407.tar.gz new file mode 100644 index 0000000..b6007ef Binary files /dev/null and b/tools/mock_server/uploads/event_1775806447_person_20260410_153407.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775806447_tree_20260410_153408.tar.gz b/tools/mock_server/uploads/event_1775806447_tree_20260410_153408.tar.gz new file mode 100644 index 0000000..3258e2c Binary files /dev/null and b/tools/mock_server/uploads/event_1775806447_tree_20260410_153408.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775806449_person_20260410_153410.tar.gz b/tools/mock_server/uploads/event_1775806449_person_20260410_153410.tar.gz new file mode 100644 index 0000000..7adaa4e Binary files /dev/null and b/tools/mock_server/uploads/event_1775806449_person_20260410_153410.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775806451_20260410_153413.tar.gz b/tools/mock_server/uploads/event_1775806451_20260410_153413.tar.gz new file mode 100644 index 0000000..cc4c348 Binary files /dev/null and b/tools/mock_server/uploads/event_1775806451_20260410_153413.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775806451_person_20260410_153412.tar.gz b/tools/mock_server/uploads/event_1775806451_person_20260410_153412.tar.gz new file mode 100644 index 0000000..51e9914 Binary files /dev/null and b/tools/mock_server/uploads/event_1775806451_person_20260410_153412.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775806452_tree_20260410_153412.tar.gz b/tools/mock_server/uploads/event_1775806452_tree_20260410_153412.tar.gz new file mode 100644 index 0000000..a141a7d Binary files /dev/null and b/tools/mock_server/uploads/event_1775806452_tree_20260410_153412.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775806456_person_20260410_153417.tar.gz b/tools/mock_server/uploads/event_1775806456_person_20260410_153417.tar.gz new file mode 100644 index 0000000..87a7b6b Binary files /dev/null and b/tools/mock_server/uploads/event_1775806456_person_20260410_153417.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775806456_tree_20260410_153417.tar.gz b/tools/mock_server/uploads/event_1775806456_tree_20260410_153417.tar.gz new file mode 100644 index 0000000..2f8d5bc Binary files /dev/null and b/tools/mock_server/uploads/event_1775806456_tree_20260410_153417.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775806457_20260410_153421.tar.gz b/tools/mock_server/uploads/event_1775806457_20260410_153421.tar.gz new file mode 100644 index 0000000..d408adf Binary files /dev/null and b/tools/mock_server/uploads/event_1775806457_20260410_153421.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775806457_bunker_20260410_153417.tar.gz b/tools/mock_server/uploads/event_1775806457_bunker_20260410_153417.tar.gz new file mode 100644 index 0000000..7f28ed3 Binary files /dev/null and b/tools/mock_server/uploads/event_1775806457_bunker_20260410_153417.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775806457_tree_20260410_153417.tar.gz b/tools/mock_server/uploads/event_1775806457_tree_20260410_153417.tar.gz new file mode 100644 index 0000000..a6cb62c Binary files /dev/null and b/tools/mock_server/uploads/event_1775806457_tree_20260410_153417.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775806459_bunker_20260410_153419.tar.gz b/tools/mock_server/uploads/event_1775806459_bunker_20260410_153419.tar.gz new file mode 100644 index 0000000..0dd28fd Binary files /dev/null and b/tools/mock_server/uploads/event_1775806459_bunker_20260410_153419.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775806460_person_20260410_153420.tar.gz b/tools/mock_server/uploads/event_1775806460_person_20260410_153420.tar.gz new file mode 100644 index 0000000..65ec5e0 Binary files /dev/null and b/tools/mock_server/uploads/event_1775806460_person_20260410_153420.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775806460_tree_20260410_153420.tar.gz b/tools/mock_server/uploads/event_1775806460_tree_20260410_153420.tar.gz new file mode 100644 index 0000000..f5c7490 Binary files /dev/null and b/tools/mock_server/uploads/event_1775806460_tree_20260410_153420.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775807221_20260410_154724.tar.gz b/tools/mock_server/uploads/event_1775807221_20260410_154724.tar.gz new file mode 100644 index 0000000..0fd2815 Binary files /dev/null and b/tools/mock_server/uploads/event_1775807221_20260410_154724.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775807237_person_20260410_154717.tar.gz b/tools/mock_server/uploads/event_1775807237_person_20260410_154717.tar.gz new file mode 100644 index 0000000..796c910 Binary files /dev/null and b/tools/mock_server/uploads/event_1775807237_person_20260410_154717.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775807237_tree_20260410_154718.tar.gz b/tools/mock_server/uploads/event_1775807237_tree_20260410_154718.tar.gz new file mode 100644 index 0000000..32668df Binary files /dev/null and b/tools/mock_server/uploads/event_1775807237_tree_20260410_154718.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775807239_tree_20260410_154719.tar.gz b/tools/mock_server/uploads/event_1775807239_tree_20260410_154719.tar.gz new file mode 100644 index 0000000..6e76e3c Binary files /dev/null and b/tools/mock_server/uploads/event_1775807239_tree_20260410_154719.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775807241_tree_20260410_154721.tar.gz b/tools/mock_server/uploads/event_1775807241_tree_20260410_154721.tar.gz new file mode 100644 index 0000000..d2158f7 Binary files /dev/null and b/tools/mock_server/uploads/event_1775807241_tree_20260410_154721.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775807269_person_20260410_154749.tar.gz b/tools/mock_server/uploads/event_1775807269_person_20260410_154749.tar.gz new file mode 100644 index 0000000..1451cd2 Binary files /dev/null and b/tools/mock_server/uploads/event_1775807269_person_20260410_154749.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775807269_tree_20260410_154749.tar.gz b/tools/mock_server/uploads/event_1775807269_tree_20260410_154749.tar.gz new file mode 100644 index 0000000..7ef0dc3 Binary files /dev/null and b/tools/mock_server/uploads/event_1775807269_tree_20260410_154749.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775807271_tree_20260410_154751.tar.gz b/tools/mock_server/uploads/event_1775807271_tree_20260410_154751.tar.gz new file mode 100644 index 0000000..39fb417 Binary files /dev/null and b/tools/mock_server/uploads/event_1775807271_tree_20260410_154751.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775808359_20260410_160615.tar.gz b/tools/mock_server/uploads/event_1775808359_20260410_160615.tar.gz new file mode 100644 index 0000000..f23cfd8 Binary files /dev/null and b/tools/mock_server/uploads/event_1775808359_20260410_160615.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775808369_person_20260410_160609.tar.gz b/tools/mock_server/uploads/event_1775808369_person_20260410_160609.tar.gz new file mode 100644 index 0000000..f6e35ff Binary files /dev/null and b/tools/mock_server/uploads/event_1775808369_person_20260410_160609.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775808371_person_20260410_160611.tar.gz b/tools/mock_server/uploads/event_1775808371_person_20260410_160611.tar.gz new file mode 100644 index 0000000..55ed8b8 Binary files /dev/null and b/tools/mock_server/uploads/event_1775808371_person_20260410_160611.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775808372_person_20260410_160612.tar.gz b/tools/mock_server/uploads/event_1775808372_person_20260410_160612.tar.gz new file mode 100644 index 0000000..ded46ae Binary files /dev/null and b/tools/mock_server/uploads/event_1775808372_person_20260410_160612.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775808372_tree_20260410_160613.tar.gz b/tools/mock_server/uploads/event_1775808372_tree_20260410_160613.tar.gz new file mode 100644 index 0000000..253ed60 Binary files /dev/null and b/tools/mock_server/uploads/event_1775808372_tree_20260410_160613.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775808650_person_20260410_161051.tar.gz b/tools/mock_server/uploads/event_1775808650_person_20260410_161051.tar.gz new file mode 100644 index 0000000..8b25214 Binary files /dev/null and b/tools/mock_server/uploads/event_1775808650_person_20260410_161051.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775808651_20260410_161053.tar.gz b/tools/mock_server/uploads/event_1775808651_20260410_161053.tar.gz new file mode 100644 index 0000000..d042a4f Binary files /dev/null and b/tools/mock_server/uploads/event_1775808651_20260410_161053.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775808651_tree_20260410_161051.tar.gz b/tools/mock_server/uploads/event_1775808651_tree_20260410_161051.tar.gz new file mode 100644 index 0000000..b8a6933 Binary files /dev/null and b/tools/mock_server/uploads/event_1775808651_tree_20260410_161051.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775808696_20260410_161144.tar.gz b/tools/mock_server/uploads/event_1775808696_20260410_161144.tar.gz new file mode 100644 index 0000000..22eabb9 Binary files /dev/null and b/tools/mock_server/uploads/event_1775808696_20260410_161144.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775808701_person_20260410_161141.tar.gz b/tools/mock_server/uploads/event_1775808701_person_20260410_161141.tar.gz new file mode 100644 index 0000000..364b63b Binary files /dev/null and b/tools/mock_server/uploads/event_1775808701_person_20260410_161141.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775808702_tree_20260410_161142.tar.gz b/tools/mock_server/uploads/event_1775808702_tree_20260410_161142.tar.gz new file mode 100644 index 0000000..a2263de Binary files /dev/null and b/tools/mock_server/uploads/event_1775808702_tree_20260410_161142.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775808733_20260410_161216.tar.gz b/tools/mock_server/uploads/event_1775808733_20260410_161216.tar.gz new file mode 100644 index 0000000..627acfd Binary files /dev/null and b/tools/mock_server/uploads/event_1775808733_20260410_161216.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775808733_person_20260410_161213.tar.gz b/tools/mock_server/uploads/event_1775808733_person_20260410_161213.tar.gz new file mode 100644 index 0000000..f8b41b3 Binary files /dev/null and b/tools/mock_server/uploads/event_1775808733_person_20260410_161213.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775808734_person_20260410_161214.tar.gz b/tools/mock_server/uploads/event_1775808734_person_20260410_161214.tar.gz new file mode 100644 index 0000000..9558473 Binary files /dev/null and b/tools/mock_server/uploads/event_1775808734_person_20260410_161214.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775809053_20260410_161756.tar.gz b/tools/mock_server/uploads/event_1775809053_20260410_161756.tar.gz new file mode 100644 index 0000000..3143222 Binary files /dev/null and b/tools/mock_server/uploads/event_1775809053_20260410_161756.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775809070_person_20260410_161750.tar.gz b/tools/mock_server/uploads/event_1775809070_person_20260410_161750.tar.gz new file mode 100644 index 0000000..3446029 Binary files /dev/null and b/tools/mock_server/uploads/event_1775809070_person_20260410_161750.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775809070_tree_20260410_161750.tar.gz b/tools/mock_server/uploads/event_1775809070_tree_20260410_161750.tar.gz new file mode 100644 index 0000000..1ea986d Binary files /dev/null and b/tools/mock_server/uploads/event_1775809070_tree_20260410_161750.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775809072_person_20260410_161752.tar.gz b/tools/mock_server/uploads/event_1775809072_person_20260410_161752.tar.gz new file mode 100644 index 0000000..32bd151 Binary files /dev/null and b/tools/mock_server/uploads/event_1775809072_person_20260410_161752.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775809073_bunker_20260410_161753.tar.gz b/tools/mock_server/uploads/event_1775809073_bunker_20260410_161753.tar.gz new file mode 100644 index 0000000..f1e7aae Binary files /dev/null and b/tools/mock_server/uploads/event_1775809073_bunker_20260410_161753.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775809073_tree_20260410_161753.tar.gz b/tools/mock_server/uploads/event_1775809073_tree_20260410_161753.tar.gz new file mode 100644 index 0000000..9f6f707 Binary files /dev/null and b/tools/mock_server/uploads/event_1775809073_tree_20260410_161753.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775809836_20260410_163105.tar.gz b/tools/mock_server/uploads/event_1775809836_20260410_163105.tar.gz new file mode 100644 index 0000000..836b6b0 Binary files /dev/null and b/tools/mock_server/uploads/event_1775809836_20260410_163105.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775809861_person_20260410_163101.tar.gz b/tools/mock_server/uploads/event_1775809861_person_20260410_163101.tar.gz new file mode 100644 index 0000000..c50fa91 Binary files /dev/null and b/tools/mock_server/uploads/event_1775809861_person_20260410_163101.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775809868_person_20260410_163108.tar.gz b/tools/mock_server/uploads/event_1775809868_person_20260410_163108.tar.gz new file mode 100644 index 0000000..033f48d Binary files /dev/null and b/tools/mock_server/uploads/event_1775809868_person_20260410_163108.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775809869_20260410_163111.tar.gz b/tools/mock_server/uploads/event_1775809869_20260410_163111.tar.gz new file mode 100644 index 0000000..1ed67f9 Binary files /dev/null and b/tools/mock_server/uploads/event_1775809869_20260410_163111.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775809869_tree_20260410_163109.tar.gz b/tools/mock_server/uploads/event_1775809869_tree_20260410_163109.tar.gz new file mode 100644 index 0000000..6e2dd6b Binary files /dev/null and b/tools/mock_server/uploads/event_1775809869_tree_20260410_163109.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775810194_20260410_163636.tar.gz b/tools/mock_server/uploads/event_1775810194_20260410_163636.tar.gz new file mode 100644 index 0000000..93b6932 Binary files /dev/null and b/tools/mock_server/uploads/event_1775810194_20260410_163636.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775810194_tree_20260410_163634.tar.gz b/tools/mock_server/uploads/event_1775810194_tree_20260410_163634.tar.gz new file mode 100644 index 0000000..a043152 Binary files /dev/null and b/tools/mock_server/uploads/event_1775810194_tree_20260410_163634.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775810324_20260410_163850.tar.gz b/tools/mock_server/uploads/event_1775810324_20260410_163850.tar.gz new file mode 100644 index 0000000..062324c Binary files /dev/null and b/tools/mock_server/uploads/event_1775810324_20260410_163850.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775810324_person_20260410_163844.tar.gz b/tools/mock_server/uploads/event_1775810324_person_20260410_163844.tar.gz new file mode 100644 index 0000000..1693e50 Binary files /dev/null and b/tools/mock_server/uploads/event_1775810324_person_20260410_163844.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775810325_person_20260410_163845.tar.gz b/tools/mock_server/uploads/event_1775810325_person_20260410_163845.tar.gz new file mode 100644 index 0000000..725b656 Binary files /dev/null and b/tools/mock_server/uploads/event_1775810325_person_20260410_163845.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775810326_bunker_20260410_163846.tar.gz b/tools/mock_server/uploads/event_1775810326_bunker_20260410_163846.tar.gz new file mode 100644 index 0000000..7febdee Binary files /dev/null and b/tools/mock_server/uploads/event_1775810326_bunker_20260410_163846.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775810326_tree_20260410_163846.tar.gz b/tools/mock_server/uploads/event_1775810326_tree_20260410_163846.tar.gz new file mode 100644 index 0000000..6944c80 Binary files /dev/null and b/tools/mock_server/uploads/event_1775810326_tree_20260410_163846.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775810328_person_20260410_163848.tar.gz b/tools/mock_server/uploads/event_1775810328_person_20260410_163848.tar.gz new file mode 100644 index 0000000..8eee81d Binary files /dev/null and b/tools/mock_server/uploads/event_1775810328_person_20260410_163848.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775811171_20260410_165428.tar.gz b/tools/mock_server/uploads/event_1775811171_20260410_165428.tar.gz new file mode 100644 index 0000000..76c3617 Binary files /dev/null and b/tools/mock_server/uploads/event_1775811171_20260410_165428.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775811266_person_20260410_165426.tar.gz b/tools/mock_server/uploads/event_1775811266_person_20260410_165426.tar.gz new file mode 100644 index 0000000..4980c8f Binary files /dev/null and b/tools/mock_server/uploads/event_1775811266_person_20260410_165426.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775811267_tree_20260410_165427.tar.gz b/tools/mock_server/uploads/event_1775811267_tree_20260410_165427.tar.gz new file mode 100644 index 0000000..cf4f4c5 Binary files /dev/null and b/tools/mock_server/uploads/event_1775811267_tree_20260410_165427.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775811311_20260410_165514.tar.gz b/tools/mock_server/uploads/event_1775811311_20260410_165514.tar.gz new file mode 100644 index 0000000..a4c6701 Binary files /dev/null and b/tools/mock_server/uploads/event_1775811311_20260410_165514.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775811311_person_20260410_165511.tar.gz b/tools/mock_server/uploads/event_1775811311_person_20260410_165511.tar.gz new file mode 100644 index 0000000..7045256 Binary files /dev/null and b/tools/mock_server/uploads/event_1775811311_person_20260410_165511.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775811311_tree_20260410_165511.tar.gz b/tools/mock_server/uploads/event_1775811311_tree_20260410_165511.tar.gz new file mode 100644 index 0000000..68e197b Binary files /dev/null and b/tools/mock_server/uploads/event_1775811311_tree_20260410_165511.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775811317_person_20260410_165517.tar.gz b/tools/mock_server/uploads/event_1775811317_person_20260410_165517.tar.gz new file mode 100644 index 0000000..9eef952 Binary files /dev/null and b/tools/mock_server/uploads/event_1775811317_person_20260410_165517.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775811318_20260410_165523.tar.gz b/tools/mock_server/uploads/event_1775811318_20260410_165523.tar.gz new file mode 100644 index 0000000..dbb0a17 Binary files /dev/null and b/tools/mock_server/uploads/event_1775811318_20260410_165523.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775811319_person_20260410_165519.tar.gz b/tools/mock_server/uploads/event_1775811319_person_20260410_165519.tar.gz new file mode 100644 index 0000000..1b0a6ca Binary files /dev/null and b/tools/mock_server/uploads/event_1775811319_person_20260410_165519.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775811320_tree_20260410_165520.tar.gz b/tools/mock_server/uploads/event_1775811320_tree_20260410_165520.tar.gz new file mode 100644 index 0000000..3732d48 Binary files /dev/null and b/tools/mock_server/uploads/event_1775811320_tree_20260410_165520.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775812239_20260410_171145.tar.gz b/tools/mock_server/uploads/event_1775812239_20260410_171145.tar.gz new file mode 100644 index 0000000..d18aece Binary files /dev/null and b/tools/mock_server/uploads/event_1775812239_20260410_171145.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775812274_person_20260410_171115.tar.gz b/tools/mock_server/uploads/event_1775812274_person_20260410_171115.tar.gz new file mode 100644 index 0000000..b6b45c3 Binary files /dev/null and b/tools/mock_server/uploads/event_1775812274_person_20260410_171115.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775812294_person_20260410_171134.tar.gz b/tools/mock_server/uploads/event_1775812294_person_20260410_171134.tar.gz new file mode 100644 index 0000000..df7ac02 Binary files /dev/null and b/tools/mock_server/uploads/event_1775812294_person_20260410_171134.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775812294_tree_20260410_171134.tar.gz b/tools/mock_server/uploads/event_1775812294_tree_20260410_171134.tar.gz new file mode 100644 index 0000000..4d55adb Binary files /dev/null and b/tools/mock_server/uploads/event_1775812294_tree_20260410_171134.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775812295_person_20260410_171136.tar.gz b/tools/mock_server/uploads/event_1775812295_person_20260410_171136.tar.gz new file mode 100644 index 0000000..fd18f57 Binary files /dev/null and b/tools/mock_server/uploads/event_1775812295_person_20260410_171136.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775812296_tree_20260410_171136.tar.gz b/tools/mock_server/uploads/event_1775812296_tree_20260410_171136.tar.gz new file mode 100644 index 0000000..c076d9c Binary files /dev/null and b/tools/mock_server/uploads/event_1775812296_tree_20260410_171136.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775812304_person_20260410_171144.tar.gz b/tools/mock_server/uploads/event_1775812304_person_20260410_171144.tar.gz new file mode 100644 index 0000000..4fb603a Binary files /dev/null and b/tools/mock_server/uploads/event_1775812304_person_20260410_171144.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775812306_20260410_171148.tar.gz b/tools/mock_server/uploads/event_1775812306_20260410_171148.tar.gz new file mode 100644 index 0000000..fe2e709 Binary files /dev/null and b/tools/mock_server/uploads/event_1775812306_20260410_171148.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775812306_person_20260410_171146.tar.gz b/tools/mock_server/uploads/event_1775812306_person_20260410_171146.tar.gz new file mode 100644 index 0000000..c6d370f Binary files /dev/null and b/tools/mock_server/uploads/event_1775812306_person_20260410_171146.tar.gz differ diff --git a/tools/mock_server/uploads/event_1775813419_20260410_173022.tar.gz b/tools/mock_server/uploads/event_1775813419_20260410_173022.tar.gz new file mode 100644 index 0000000..f8ec7f8 Binary files /dev/null and b/tools/mock_server/uploads/event_1775813419_20260410_173022.tar.gz differ diff --git a/tools/mock_server/uploads/event_1776041827_20260413_085801.tar.gz b/tools/mock_server/uploads/event_1776041827_20260413_085801.tar.gz new file mode 100644 index 0000000..1f92a0e Binary files /dev/null and b/tools/mock_server/uploads/event_1776041827_20260413_085801.tar.gz differ diff --git a/tools/mock_server/uploads/event_1776041877_person_20260413_085757.tar.gz b/tools/mock_server/uploads/event_1776041877_person_20260413_085757.tar.gz new file mode 100644 index 0000000..723ec6f Binary files /dev/null and b/tools/mock_server/uploads/event_1776041877_person_20260413_085757.tar.gz differ diff --git a/tools/mock_server/uploads/event_1776041883_20260413_085810.tar.gz b/tools/mock_server/uploads/event_1776041883_20260413_085810.tar.gz new file mode 100644 index 0000000..65595c1 Binary files /dev/null and b/tools/mock_server/uploads/event_1776041883_20260413_085810.tar.gz differ diff --git a/tools/mock_server/uploads/event_1776041883_person_20260413_085803.tar.gz b/tools/mock_server/uploads/event_1776041883_person_20260413_085803.tar.gz new file mode 100644 index 0000000..63012cd Binary files /dev/null and b/tools/mock_server/uploads/event_1776041883_person_20260413_085803.tar.gz differ diff --git a/tools/mock_server/uploads/event_1776041885_person_20260413_085805.tar.gz b/tools/mock_server/uploads/event_1776041885_person_20260413_085805.tar.gz new file mode 100644 index 0000000..b02071c Binary files /dev/null and b/tools/mock_server/uploads/event_1776041885_person_20260413_085805.tar.gz differ diff --git a/tools/mock_server/uploads/event_1776041885_tree_20260413_085805.tar.gz b/tools/mock_server/uploads/event_1776041885_tree_20260413_085805.tar.gz new file mode 100644 index 0000000..edb757a Binary files /dev/null and b/tools/mock_server/uploads/event_1776041885_tree_20260413_085805.tar.gz differ diff --git a/tools/mock_server/uploads/event_1776041887_person_20260413_085807.tar.gz b/tools/mock_server/uploads/event_1776041887_person_20260413_085807.tar.gz new file mode 100644 index 0000000..961db7d Binary files /dev/null and b/tools/mock_server/uploads/event_1776041887_person_20260413_085807.tar.gz differ diff --git a/tools/mock_server/uploads/event_1776041888_tree_20260413_085808.tar.gz b/tools/mock_server/uploads/event_1776041888_tree_20260413_085808.tar.gz new file mode 100644 index 0000000..9c91dfe Binary files /dev/null and b/tools/mock_server/uploads/event_1776041888_tree_20260413_085808.tar.gz differ diff --git a/tools/mock_server/uploads/event_1776042438_20260413_090850.tar.gz b/tools/mock_server/uploads/event_1776042438_20260413_090850.tar.gz new file mode 100644 index 0000000..c53e996 Binary files /dev/null and b/tools/mock_server/uploads/event_1776042438_20260413_090850.tar.gz differ diff --git a/tools/mock_server/uploads/event_1776042489_person_20260413_090809.tar.gz b/tools/mock_server/uploads/event_1776042489_person_20260413_090809.tar.gz new file mode 100644 index 0000000..4d15a31 Binary files /dev/null and b/tools/mock_server/uploads/event_1776042489_person_20260413_090809.tar.gz differ diff --git a/tools/mock_server/uploads/event_1776042490_person_20260413_090810.tar.gz b/tools/mock_server/uploads/event_1776042490_person_20260413_090810.tar.gz new file mode 100644 index 0000000..b0f4320 Binary files /dev/null and b/tools/mock_server/uploads/event_1776042490_person_20260413_090810.tar.gz differ diff --git a/tools/mock_server/uploads/event_1776043627_20260413_092709.tar.gz b/tools/mock_server/uploads/event_1776043627_20260413_092709.tar.gz new file mode 100644 index 0000000..c0d84d8 Binary files /dev/null and b/tools/mock_server/uploads/event_1776043627_20260413_092709.tar.gz differ diff --git a/tools/mock_server/uploads/event_1776043654_20260413_092736.tar.gz b/tools/mock_server/uploads/event_1776043654_20260413_092736.tar.gz new file mode 100644 index 0000000..c814876 Binary files /dev/null and b/tools/mock_server/uploads/event_1776043654_20260413_092736.tar.gz differ diff --git a/tools/mock_server/uploads/event_1776043701_person_20260413_092821.tar.gz b/tools/mock_server/uploads/event_1776043701_person_20260413_092821.tar.gz new file mode 100644 index 0000000..a20438c Binary files /dev/null and b/tools/mock_server/uploads/event_1776043701_person_20260413_092821.tar.gz differ diff --git a/tools/mock_server/uploads/event_1776043701_tree_20260413_092821.tar.gz b/tools/mock_server/uploads/event_1776043701_tree_20260413_092821.tar.gz new file mode 100644 index 0000000..7edafc4 Binary files /dev/null and b/tools/mock_server/uploads/event_1776043701_tree_20260413_092821.tar.gz differ diff --git a/tools/mock_server/uploads/event_1776043704_person_20260413_092824.tar.gz b/tools/mock_server/uploads/event_1776043704_person_20260413_092824.tar.gz new file mode 100644 index 0000000..513c27a Binary files /dev/null and b/tools/mock_server/uploads/event_1776043704_person_20260413_092824.tar.gz differ diff --git a/tools/mock_server/uploads/event_1776043732_person_20260413_092852.tar.gz b/tools/mock_server/uploads/event_1776043732_person_20260413_092852.tar.gz new file mode 100644 index 0000000..5c3814f Binary files /dev/null and b/tools/mock_server/uploads/event_1776043732_person_20260413_092852.tar.gz differ diff --git a/tools/mock_server/uploads/event_1776043732_tree_20260413_092853.tar.gz b/tools/mock_server/uploads/event_1776043732_tree_20260413_092853.tar.gz new file mode 100644 index 0000000..d10ca74 Binary files /dev/null and b/tools/mock_server/uploads/event_1776043732_tree_20260413_092853.tar.gz differ diff --git a/tools/mock_server/uploads/event_1776043757_person_20260413_092918.tar.gz b/tools/mock_server/uploads/event_1776043757_person_20260413_092918.tar.gz new file mode 100644 index 0000000..0e4a362 Binary files /dev/null and b/tools/mock_server/uploads/event_1776043757_person_20260413_092918.tar.gz differ diff --git a/tools/mock_server/uploads/event_1776043758_20260413_092923.tar.gz b/tools/mock_server/uploads/event_1776043758_20260413_092923.tar.gz new file mode 100644 index 0000000..08290c5 Binary files /dev/null and b/tools/mock_server/uploads/event_1776043758_20260413_092923.tar.gz differ diff --git a/tools/mock_server/uploads/event_1776043759_person_20260413_092919.tar.gz b/tools/mock_server/uploads/event_1776043759_person_20260413_092919.tar.gz new file mode 100644 index 0000000..4a5bb04 Binary files /dev/null and b/tools/mock_server/uploads/event_1776043759_person_20260413_092919.tar.gz differ diff --git a/tools/mock_server/uploads/event_1776043760_person_20260413_092920.tar.gz b/tools/mock_server/uploads/event_1776043760_person_20260413_092920.tar.gz new file mode 100644 index 0000000..71d91c2 Binary files /dev/null and b/tools/mock_server/uploads/event_1776043760_person_20260413_092920.tar.gz differ diff --git a/tools/mock_server/uploads/event_1776043760_tree_20260413_092920.tar.gz b/tools/mock_server/uploads/event_1776043760_tree_20260413_092920.tar.gz new file mode 100644 index 0000000..5eeedc3 Binary files /dev/null and b/tools/mock_server/uploads/event_1776043760_tree_20260413_092920.tar.gz differ diff --git a/tools/mock_server/uploads/event_1776043769_20260413_092943.tar.gz b/tools/mock_server/uploads/event_1776043769_20260413_092943.tar.gz new file mode 100644 index 0000000..76c5411 Binary files /dev/null and b/tools/mock_server/uploads/event_1776043769_20260413_092943.tar.gz differ diff --git a/tools/mock_server/uploads/event_1776043770_tree_20260413_092930.tar.gz b/tools/mock_server/uploads/event_1776043770_tree_20260413_092930.tar.gz new file mode 100644 index 0000000..f99722c Binary files /dev/null and b/tools/mock_server/uploads/event_1776043770_tree_20260413_092930.tar.gz differ diff --git a/tools/mock_server/uploads/event_1776043772_person_20260413_092932.tar.gz b/tools/mock_server/uploads/event_1776043772_person_20260413_092932.tar.gz new file mode 100644 index 0000000..3f0b9af Binary files /dev/null and b/tools/mock_server/uploads/event_1776043772_person_20260413_092932.tar.gz differ diff --git a/tools/mock_server/uploads/event_1776043777_person_20260413_092937.tar.gz b/tools/mock_server/uploads/event_1776043777_person_20260413_092937.tar.gz new file mode 100644 index 0000000..7e70703 Binary files /dev/null and b/tools/mock_server/uploads/event_1776043777_person_20260413_092937.tar.gz differ diff --git a/tools/mock_server/uploads/event_1776043779_person_20260413_092939.tar.gz b/tools/mock_server/uploads/event_1776043779_person_20260413_092939.tar.gz new file mode 100644 index 0000000..8aca31c Binary files /dev/null and b/tools/mock_server/uploads/event_1776043779_person_20260413_092939.tar.gz differ diff --git a/tools/mock_server/uploads/event_1776043780_person_20260413_092940.tar.gz b/tools/mock_server/uploads/event_1776043780_person_20260413_092940.tar.gz new file mode 100644 index 0000000..6edc3a9 Binary files /dev/null and b/tools/mock_server/uploads/event_1776043780_person_20260413_092940.tar.gz differ diff --git a/tools/mock_server/uploads/event_1776043781_person_20260413_092941.tar.gz b/tools/mock_server/uploads/event_1776043781_person_20260413_092941.tar.gz new file mode 100644 index 0000000..b3769c7 Binary files /dev/null and b/tools/mock_server/uploads/event_1776043781_person_20260413_092941.tar.gz differ diff --git a/tools/mock_server/uploads/event_1776044034_20260413_093629.tar.gz b/tools/mock_server/uploads/event_1776044034_20260413_093629.tar.gz new file mode 100644 index 0000000..6de2bf2 Binary files /dev/null and b/tools/mock_server/uploads/event_1776044034_20260413_093629.tar.gz differ diff --git a/tools/mock_server/uploads/event_1922456514_20301202_234205.tar.gz b/tools/mock_server/uploads/event_1922456514_20301202_234205.tar.gz new file mode 100644 index 0000000..1a250eb Binary files /dev/null and b/tools/mock_server/uploads/event_1922456514_20301202_234205.tar.gz differ diff --git a/tools/mock_server/uploads/event_1922456514_person_20301202_234155.tar.gz b/tools/mock_server/uploads/event_1922456514_person_20301202_234155.tar.gz new file mode 100644 index 0000000..f1541bc Binary files /dev/null and b/tools/mock_server/uploads/event_1922456514_person_20301202_234155.tar.gz differ diff --git a/tools/mock_server/uploads/event_1922456520_tree_20301202_234200.tar.gz b/tools/mock_server/uploads/event_1922456520_tree_20301202_234200.tar.gz new file mode 100644 index 0000000..c498c80 Binary files /dev/null and b/tools/mock_server/uploads/event_1922456520_tree_20301202_234200.tar.gz differ diff --git a/tools/mock_server/uploads/event_1922456523_person_20301202_234203.tar.gz b/tools/mock_server/uploads/event_1922456523_person_20301202_234203.tar.gz new file mode 100644 index 0000000..dd889c1 Binary files /dev/null and b/tools/mock_server/uploads/event_1922456523_person_20301202_234203.tar.gz differ diff --git a/tools/mock_server/uploads/event_1922456794_20301202_234721.tar.gz b/tools/mock_server/uploads/event_1922456794_20301202_234721.tar.gz new file mode 100644 index 0000000..d72d1dc Binary files /dev/null and b/tools/mock_server/uploads/event_1922456794_20301202_234721.tar.gz differ diff --git a/tools/mock_server/uploads/event_20260409_150024.tar.gz b/tools/mock_server/uploads/event_20260409_150024.tar.gz new file mode 100644 index 0000000..e848754 Binary files /dev/null and b/tools/mock_server/uploads/event_20260409_150024.tar.gz differ diff --git a/tools/mock_server/uploads/event_20260409_150029.tar.gz b/tools/mock_server/uploads/event_20260409_150029.tar.gz new file mode 100644 index 0000000..638e6ee Binary files /dev/null and b/tools/mock_server/uploads/event_20260409_150029.tar.gz differ diff --git a/tools/mock_server/uploads/event_20260409_150054.tar.gz b/tools/mock_server/uploads/event_20260409_150054.tar.gz new file mode 100644 index 0000000..44b43be Binary files /dev/null and b/tools/mock_server/uploads/event_20260409_150054.tar.gz differ diff --git a/tools/mock_server/uploads/event_20260409_150742.tar.gz b/tools/mock_server/uploads/event_20260409_150742.tar.gz new file mode 100644 index 0000000..dbbae03 Binary files /dev/null and b/tools/mock_server/uploads/event_20260409_150742.tar.gz differ diff --git a/tools/mock_server/uploads/event_20260409_150746.tar.gz b/tools/mock_server/uploads/event_20260409_150746.tar.gz new file mode 100644 index 0000000..0257bc4 Binary files /dev/null and b/tools/mock_server/uploads/event_20260409_150746.tar.gz differ diff --git a/tools/mock_server/uploads/event_20260409_155858.tar.gz b/tools/mock_server/uploads/event_20260409_155858.tar.gz new file mode 100644 index 0000000..fefe7e6 Binary files /dev/null and b/tools/mock_server/uploads/event_20260409_155858.tar.gz differ diff --git a/web_serve.py b/web_serve.py index 00dbc7a..a86dfe9 100644 --- a/web_serve.py +++ b/web_serve.py @@ -506,36 +506,101 @@ def api_deploy_run(): return Response(generate(), mimetype="text/event-stream", headers={"Cache-Control": "no-cache", "X-Accel-Buffering": "no"}) -# ── API: first-time ISP setup via Telnet (SSE) ──────────────────────────────── -@app.route("/api/setup/run") -def api_setup_run(): +# ── API: BT UART one-time baud setup via Telnet (SSE) ──────────────────────── +@app.route("/api/bt_setup/run") +def api_bt_setup_run(): cfg = load_config() kl_ip = request.args.get("ip", cfg["kl630_ip"]) bd = BIN_DIR_DEVICE - awb = f"{bd}/Resource/AWB/AutoWhiteBalance.ini" - isp0 = f"{bd}/Resource/ISP/0/pqtable_ispe_Config.cfg" - isp1 = f"{bd}/Resource/ISP/1/pqtable_ispe_Config.cfg" - - commands = [ - f"sed -i 's/dwStatisticsSrcType = 0/dwStatisticsSrcType = 2/' {awb}", - f"sed -i 's/bGTREnable = 0/bGTREnable = 1/' {isp0}", - f"sed -i 's/bGTREnable = 0/bGTREnable = 1/' {isp1}", - f"grep dwStatisticsSrcType {awb}", - f"grep bGTREnable {isp0}", - ] + fw = FW_PATH_DEVICE + restart_cmd = (f"cd {bd} && rm -f /dev/shm/* && " + f"nohup sh ./ini/demo_rtsp.sh > /tmp/fw.log 2>&1 &") def generate(): + yield sse("⚠ 請先關閉手機 nRF Connect 並確保 DX-BT24 未連線,再繼續!", "warn") yield sse(f"Connecting to {kl_ip}:23 via Telnet...") try: tn = _telnet_connect(kl_ip) _drain_shell(tn) yield sse("Connected.", "ok") - for cmd in commands: - yield sse(f"$ {cmd}", "prompt") - for ln in _telnet_run(tn, cmd): + + # Step 1: kill firmware so UART is free + yield sse("Step 1: stopping firmware...") + _telnet_run(tn, "killall -9 kp_firmware_host_stream 2>/dev/null; " + "killall -9 rtsps 2>/dev/null; sleep 1; echo stopped", timeout=10) + + # Step 2: probe current baud by reading UART response + yield sse("Step 2: probing module baud rate...") + probe_115200 = ( + "stty -F /dev/ttyS1 115200 raw cs8 -parenb -cstopb -echo; " + "cat /dev/ttyS1 > /tmp/_bt_resp.bin & CPID=$!; " + "printf 'AT+BAUD\\r\\n' > /dev/ttyS1; sleep 1; " + "kill $CPID 2>/dev/null; " + "BYTES=$(wc -c < /tmp/_bt_resp.bin 2>/dev/null || echo 0); " + "echo \"115200_bytes=$BYTES\"; " + "[ \"$BYTES\" -gt 0 ] && cat /tmp/_bt_resp.bin || true" + ) + resp_115200 = _telnet_run(tn, probe_115200, timeout=8) + for ln in resp_115200: + yield sse(ln, "ok") + + got_115200 = any("115200_bytes=" in ln and not ln.endswith("=0") for ln in resp_115200) + + if got_115200: + yield sse("Module responded at 115200 — already configured!", "ok") + else: + yield sse("No response at 115200 — trying 9600...", "warn") + probe_9600 = ( + "stty -F /dev/ttyS1 9600 raw cs8 -parenb -cstopb -echo; " + "cat /dev/ttyS1 > /tmp/_bt_resp.bin & CPID=$!; " + "printf 'AT+BAUD\\r\\n' > /dev/ttyS1; sleep 1; " + "kill $CPID 2>/dev/null; " + "BYTES=$(wc -c < /tmp/_bt_resp.bin 2>/dev/null || echo 0); " + "echo \"9600_bytes=$BYTES\"; " + "[ \"$BYTES\" -gt 0 ] && cat /tmp/_bt_resp.bin || true" + ) + resp_9600 = _telnet_run(tn, probe_9600, timeout=8) + for ln in resp_9600: yield sse(ln, "ok") + + got_9600 = any("9600_bytes=" in ln and not ln.endswith("=0") for ln in resp_9600) + + if got_9600: + yield sse("Module at 9600 — sending AT+BAUD7 to upgrade...", "ok") + upgrade = ( + "stty -F /dev/ttyS1 9600 raw cs8 -parenb -cstopb -echo; " + "printf 'AT+BAUD7\\r\\n' > /dev/ttyS1; sleep 0.3; " + "stty -F /dev/ttyS1 115200 raw cs8 -parenb -cstopb -echo; " + "printf 'AT+RESET\\r\\n' > /dev/ttyS1; sleep 1.5; " + "echo 'upgrade_sent'" + ) + for ln in _telnet_run(tn, upgrade, timeout=8): + yield sse(ln, "ok") + yield sse("AT+BAUD7 + AT+RESET sent. Module rebooting...", "ok") + else: + yield sse("No response at 9600 either.", "warn") + yield sse("Can't probe module — it may be in BLE transparent mode or disconnected.", "warn") + yield sse("Make sure phone is DISCONNECTED from DX-BT24, then run this again.", "error") + + # Step 3: send test string at 115200 to verify + yield sse("Step 3: sending test ping at 115200...") + test_cmd = ( + "stty -F /dev/ttyS1 115200 raw cs8 -parenb -cstopb -echo; " + "printf '{\"class\":\"test\",\"level\":0}' > /dev/ttyS1; " + "echo 'ping_sent'" + ) + for ln in _telnet_run(tn, test_cmd, timeout=5): + yield sse(ln, "ok") + + # Step 4: restart firmware normally (bt_at_probe stays 0) + yield sse("Step 4: restarting firmware...") + _telnet_run(tn, "killall -9 kp_firmware_host_stream 2>/dev/null; " + "killall -9 rtsps 2>/dev/null; sleep 1; rm -f /dev/shm/*", timeout=10) + _telnet_run_bg(tn, restart_cmd) + yield sse("Firmware restarted.", "ok") + tn.close() - yield sse("One-time ISP setup complete. Settings written to flash.", "ok") + yield sse('完成!現在連上手機 → 訂閱 Notify → 如果看到 {"class":"test","level":0} 或 {"class":"boot","level":0} 表示成功', "ok") except Exception as e: yield sse(f"Telnet error: {e}", "error") yield sse_done() @@ -1548,9 +1613,9 @@ input:checked+.slider:before{transform:translateX(16px);background:#fff} Deploy to KL630 -