diff --git a/support/sg2002/additional/sophgo-middleware/v2/sample/common/sample_comm.h.patch b/support/sg2002/additional/sophgo-middleware/v2/sample/common/sample_comm.h.patch new file mode 100644 index 00000000..054c64ba --- /dev/null +++ b/support/sg2002/additional/sophgo-middleware/v2/sample/common/sample_comm.h.patch @@ -0,0 +1,8 @@ +--- sample_comm.h ++++ sample_comm.h +@@ -185 +184,0 @@ typedef enum _SAMPLE_SNS_TYPE_E { +- GCORE_GC030A_MIPI_480P_30FPS_10BIT, +@@ -317,3 +315,0 @@ typedef enum _SAMPLE_SNS_TYPE_E { +- GCORE_GC4653_MIPI_720P_60FPS_10BIT, +- GCORE_OV2685_MIPI_1600x1200_30FPS_10BIT, +- OV_OS04A10_MIPI_4M_720P90_12BIT, diff --git a/support/sg2002/build b/support/sg2002/build index 9238f144..e0b85164 100755 --- a/support/sg2002/build +++ b/support/sg2002/build @@ -1,5 +1,10 @@ #!/bin/bash +if [ -z "${BASH_VERSION:-}" ]; then + echo "[build] This script must be run with bash." >&2 + exit 1 +fi + export MAIXCDK_PATH=~/MaixCDK export NanoKVM_PATH=~/NanoKVM @@ -7,6 +12,10 @@ Project_Name="None" Project_PATH="None" Project_Action="None" KVMAPP_PATH="$NanoKVM_PATH/kvmapp" +SOPHGO_SAMPLE_COMMON_PATH="$MAIXCDK_PATH/components/3rd_party/sophgo-middleware/sophgo-middleware/v2/sample/common" +SAMPLE_COMM_PATCH="$NanoKVM_PATH/support/sg2002/additional/sophgo-middleware/v2/sample/common/sample_comm.h.patch" +SENSOR_ABI_REMOVED_PATTERN="GCORE_GC030A_MIPI_480P_30FPS_10BIT|GCORE_GC4653_MIPI_720P_60FPS_10BIT|GCORE_OV2685_MIPI_1600x1200_30FPS_10BIT|OV_OS04A10_MIPI_4M_720P90_12BIT" +SENSOR_ABI_ANCHOR_PATTERN="GCORE_GC0312_MIPI_480P_20FPS_8BIT|LONTIUM_LT6911_2M_60FPS_8BIT|SAMPLE_SNS_TYPE_LINEAR_BUTT" maixcdk_build() { local input_value="$1" @@ -39,16 +48,58 @@ maixcdk_clean(){ maixcdk clean } +sync_sensor_abi(){ + local sample_comm="$SOPHGO_SAMPLE_COMMON_PATH/sample_comm.h" + local sample_comm_mode + + if [ ! -f "$sample_comm" ]; then + echo -e "\e[36m[build] \e[31mMissing sensor header: $sample_comm\e[0m" >&2 + return 1 + fi + + if [ ! -f "$SAMPLE_COMM_PATCH" ]; then + echo -e "\e[36m[build] \e[31mMissing sensor header patch: $SAMPLE_COMM_PATCH\e[0m" >&2 + return 1 + fi + + sample_comm_mode="$(stat -c %a "$sample_comm" 2>/dev/null || stat -f %Lp "$sample_comm")" || return 1 + + # sample_common_sensor.c and sample_comm.h are versioned separately by MaixCDK. + # Keep the enum layout aligned with the NanoKVM sensor implementation copied below. + if patch --forward --dry-run --silent "$sample_comm" "$SAMPLE_COMM_PATCH" >/dev/null 2>&1; then + patch --forward --silent "$sample_comm" "$SAMPLE_COMM_PATCH" || { + echo -e "\e[36m[build] \e[31mFailed to patch sensor header: $sample_comm\e[0m" >&2 + return 1 + } + chmod "$sample_comm_mode" "$sample_comm" || return 1 + return 0 + fi + + if ! grep -Eq "^[[:space:]]*(${SENSOR_ABI_REMOVED_PATTERN})[[:space:]]*," "$sample_comm" \ + && grep -Eq "^[[:space:]]*(${SENSOR_ABI_ANCHOR_PATTERN})[[:space:]]*[,=]?" "$sample_comm"; then + chmod "$sample_comm_mode" "$sample_comm" || return 1 + return 0 + fi + + echo -e "\e[36m[build] \e[31mSensor header patch does not match: $sample_comm\e[0m" >&2 + return 1 +} + +install_nanokvm_libs(){ + cp -rf "$NanoKVM_PATH/support/sg2002/additional/kvm" "$MAIXCDK_PATH/components" + cp -rf "$NanoKVM_PATH/support/sg2002/additional/kvm_mmf" "$MAIXCDK_PATH/components" + cp -rf "$NanoKVM_PATH/support/sg2002/additional/vision" "$MAIXCDK_PATH/components" + cp -f "$NanoKVM_PATH/support/sg2002/additional/peripheral/port/maixcam/maix_i2c.cpp" "$MAIXCDK_PATH/components/peripheral/port/maixcam/maix_i2c.cpp" + cp -f "$NanoKVM_PATH/support/sg2002/additional/sophgo-middleware/v2/sample/common/sample_common_sensor.c" "$SOPHGO_SAMPLE_COMMON_PATH/" + sync_sensor_abi +} + case "$1" in update_lib) - cp -rf $NanoKVM_PATH/support/sg2002/additional/kvm $MAIXCDK_PATH/components - cp -rf $NanoKVM_PATH/support/sg2002/additional/kvm_mmf $MAIXCDK_PATH/components - cp -rf $NanoKVM_PATH/support/sg2002/additional/vision $MAIXCDK_PATH/components - cp -f $NanoKVM_PATH/support/sg2002/additional/peripheral/port/maixcam/maix_i2c.cpp $MAIXCDK_PATH/components/peripheral/port/maixcam/maix_i2c.cpp - cp -f $NanoKVM_PATH/support/sg2002/additional/sophgo-middleware/v2/sample/common/sample_common_sensor.c $MAIXCDK_PATH/components/3rd_party/sophgo-middleware/sophgo-middleware/v2/sample/common/ + install_nanokvm_libs || exit 1 echo -e "\e[36m[build] \e[32mupdate_lib ok!\e[0m" - exit 1 + exit 0 ;; kvm_system) Project_Name="kvm_system" @@ -103,17 +154,14 @@ then then echo -e "\e[36m[build] \e[32mDetected that the library has not been modified; first, move the library\e[0m" - mkdir $NanoKVM_PATH/support/sg2002/additional/original - mv -f $MAIXCDK_PATH/components/vision $NanoKVM_PATH/support/sg2002/additional/original + mkdir -p "$NanoKVM_PATH/support/sg2002/additional/original" + mv -f "$MAIXCDK_PATH/components/vision" "$NanoKVM_PATH/support/sg2002/additional/original" # mv $MAIXCDK_PATH/components/maixcam_lib $NanoKVM_PATH/support/sg2002/additional/original - mv -f $MAIXCDK_PATH/components/peripheral/port/maixcam/maix_i2c.cpp $NanoKVM_PATH/support/sg2002/additional/original - mv -f $MAIXCDK_PATH/components/3rd_party/sophgo-middleware/sophgo-middleware/v2/sample/common/sample_common_sensor.c $NanoKVM_PATH/support/sg2002/additional/original + mv -f "$MAIXCDK_PATH/components/peripheral/port/maixcam/maix_i2c.cpp" "$NanoKVM_PATH/support/sg2002/additional/original" + mv -f "$SOPHGO_SAMPLE_COMMON_PATH/sample_common_sensor.c" "$NanoKVM_PATH/support/sg2002/additional/original" + cp -f "$SOPHGO_SAMPLE_COMMON_PATH/sample_comm.h" "$NanoKVM_PATH/support/sg2002/additional/original" - cp -rf $NanoKVM_PATH/support/sg2002/additional/kvm $MAIXCDK_PATH/components - cp -rf $NanoKVM_PATH/support/sg2002/additional/kvm_mmf $MAIXCDK_PATH/components - cp -rf $NanoKVM_PATH/support/sg2002/additional/vision $MAIXCDK_PATH/components - cp -f $NanoKVM_PATH/support/sg2002/additional/peripheral/port/maixcam/maix_i2c.cpp $MAIXCDK_PATH/components/peripheral/port/maixcam/maix_i2c.cpp - cp -f $NanoKVM_PATH/support/sg2002/additional/sophgo-middleware/v2/sample/common/sample_common_sensor.c $MAIXCDK_PATH/components/3rd_party/sophgo-middleware/sophgo-middleware/v2/sample/common/ + install_nanokvm_libs || exit 1 echo -e "\e[36m[build] \e[32mMove the library completed!\e[0m" fi