Просмотр исходного кода

Merge branch 'master' into DetectAndAutoLoadEthernetDrivers

Scott Kilau 3 лет назад
Родитель
Сommit
0bd0c36401

+ 15 - 1
README.md

@@ -33,7 +33,10 @@ Using this project can potentially expose your device to the open internet depen
 * USB Mass storage enabled, mount USB SSD/HDD/flash drives
 * USB Mass storage enabled, mount USB SSD/HDD/flash drives
 * CIFS Supported
 * CIFS Supported
 * iptables included
 * iptables included
-* Play .wav audio files using "cmd aplay <file> <vol>" command
+* Play .wav audio files using "cmd aplay \<path-to-file\> \<vol\>" command.  Supported .wav files may be generated using ffmpeg as well::
+ ```
+ ffmpeg -i in.wav -acodec pcm_s16le -ac 1 -ar 16000 out.wav
+ ```
 * WebCam Mode - Use your camera as a spare UVC USB Web Camera on your PC or AndroidTV!
 * WebCam Mode - Use your camera as a spare UVC USB Web Camera on your PC or AndroidTV!
 * RTMP Streaming - Stream live video from the camera to your favorite service, youtube, twitch, or facebook live.
 * RTMP Streaming - Stream live video from the camera to your favorite service, youtube, twitch, or facebook live.
 
 
@@ -377,10 +380,21 @@ This script will upgrade wz_mini over the air.  It will backup `wz_mini.conf`, a
 If there are any line differences between the old `wz_mini.conf` and the new release, the script will preserve the current config in place.  Note that this means any missing or additional lines.  It is recommended to download the latest wz_mini.conf from github, if there are any major changes to the file, copy the new one to your system first, set your parameteres, save the file, then perform the upgrade.
 If there are any line differences between the old `wz_mini.conf` and the new release, the script will preserve the current config in place.  Note that this means any missing or additional lines.  It is recommended to download the latest wz_mini.conf from github, if there are any major changes to the file, copy the new one to your system first, set your parameteres, save the file, then perform the upgrade.
 
 
 NOTE: if you are upgrading a V2 camera from a release older than 06-16-22, you must manually download the upgrade-run.sh script from this repo and place it in `wz_mini/bin/upgrade-run.sh`, then run it from there !
 NOTE: if you are upgrading a V2 camera from a release older than 06-16-22, you must manually download the upgrade-run.sh script from this repo and place it in `wz_mini/bin/upgrade-run.sh`, then run it from there !
+
+---
+
+```
+NIGHT_DROP_DISABLE="false"
+```
+
+Stop the camera from dropping the frame rate during nightvision.
+
 ---
 ---
 
 
 ## Latest Updates
 ## Latest Updates
 
 
+* 06-19-22:  Fixed no rtsp video when wz_mini is used with the old stock rtsp firmware.
+* 06-18-22:  Added night drop feature preventing fps drop during nightvision.  Upgrade script can now work unattended.  Add -F0 flag to rtsp server.
 * 06-17-22:  Fix custom hostname not being set.  Note: The hostname variable has CHANGED!  You will need to update your `wz_mini.conf` file.
 * 06-17-22:  Fix custom hostname not being set.  Note: The hostname variable has CHANGED!  You will need to update your `wz_mini.conf` file.
 * 06-16-22:  Simplified the camera model detection method throughout wz_mini.
 * 06-16-22:  Simplified the camera model detection method throughout wz_mini.
 * 06-16-22:  fix scp client bug, allow user modifications to app_init, updated initramfs script, moved upgrade-run to PATH, revised kernel module paths, added ENABLE_RTL8189FS_DRIVER option for v2/v3, updated kernels for v2/v3. ( NOTE: this is a major upgrade, file names for the init scripts have changed, if you are upgrading the V2, do not use the upgrade-run.sh script, please manually update )
 * 06-16-22:  fix scp client bug, allow user modifications to app_init, updated initramfs script, moved upgrade-run to PATH, revised kernel module paths, added ENABLE_RTL8189FS_DRIVER option for v2/v3, updated kernels for v2/v3. ( NOTE: this is a major upgrade, file names for the init scripts have changed, if you are upgrading the V2, do not use the upgrade-run.sh script, please manually update )

+ 40 - 33
SD_ROOT/wz_mini/bin/upgrade-run.sh

@@ -50,6 +50,7 @@ echo "Launching latest upgrade-script"
 /opt/wz_mini/bin/upgrade-run.sh backup_begin &
 /opt/wz_mini/bin/upgrade-run.sh backup_begin &
 
 
 echo "Exit old script"
 echo "Exit old script"
+rm -f /dev/fd
 exit 0
 exit 0
 }
 }
 
 
@@ -130,39 +131,45 @@ reboot
 
 
 }
 }
 
 
-if [[ -e /tmp/dbgflag ]]; then
-	upgrade_mode_start
-else
-
-if [ "$1" == "backup_begin" ]; then
-	backup_begin
+if [[ "$1" == "unattended" ]]; then
+	echo "Unattended upgrade!"
+	rm -rf /opt/Upgrade
+	sync
+	setup
 else
 else
 
 
-read -r -p "${1:-wz_mini, this will download the latest version from github and upgrade your system.  Are you sure? [y/N]} " response
-    case "$response" in
-        [yY][eE][sS]|[yY])
-        if [[ -d /opt/Upgrade ]]; then
-                echo "WARNING: Old Upgrade directory exists"
-                read -r -p "${1:-Unable to proceed, must DELETE old Upgrade directory, are you sure? [y/N]} " response
-                case "$response" in
-                [yY][eE][sS]|[yY])
-                rm -rf /opt/Upgrade
-                sync
-                setup
-                ;;
-                *)
-                echo "User denied directory removal, exit"
-                ;;
-                esac
-        else
-                setup
-        fi
-
-            ;;
-        *)
-                echo "User declined system update, exit"
-            ;;
-    esac
-fi
-
+	if [[ -e /tmp/dbgflag ]]; then
+		upgrade_mode_start
+	else
+
+		if [ "$1" == "backup_begin" ]; then
+			backup_begin
+		else
+
+		read -r -p "${1:-wz_mini, this will download the latest version from github and upgrade your system.  Are you sure? [y/N]} " response
+			case "$response" in
+			[yY][eE][sS]|[yY])
+			if [[ -d /opt/Upgrade ]]; then
+				echo "WARNING: Old Upgrade directory exists"
+				read -r -p "${1:-Unable to proceed, must DELETE old Upgrade directory, are you sure? [y/N]} " response
+				case "$response" in
+				[yY][eE][sS]|[yY])
+				rm -rf /opt/Upgrade
+				sync
+				setup
+				;;
+				*)
+				echo "User denied directory removal, exit"
+				;;
+	       			esac
+		        else
+				setup
+	        	fi
+			;;
+		        *)
+			echo "User declined system update, exit"
+	        	;;
+		    esac
+		fi
+	fi
 fi
 fi

+ 7 - 0
SD_ROOT/wz_mini/etc/init.d/wz_post.sh

@@ -52,6 +52,13 @@ if [[ "$ENABLE_RTL8189FS_DRIVER" == "true" ]]; then
 	fi
 	fi
 fi
 fi
 
 
+if [[ "$ENABLE_ATBM603X_DRIVER" == "true" ]]; then
+	echo "Enable atbm603x_wifi_sdio_24M"
+	if [ -f /opt/wz_mini/tmp/.T31 ]; then
+		sed -i 's/\/system\/driver\/atbm603x_wifi_sdio.ko/\/opt\/wz_mini\/lib\/modules\/3.10.14\_\_isvp_swan_1.0\_\_\/extra\/atbm603x_wifi_sdio_24M.ko/g' /opt/wz_mini/tmp/.storage/app_init.sh
+	fi
+fi
+
 ##RTSP SERVER INIT
 ##RTSP SERVER INIT
 
 
 if [[ "$RTSP_HI_RES_ENABLED" == "true" ]] ||  [[ "$RTSP_LOW_RES_ENABLED" == "true" ]] && ! [[ -e /tmp/dbgflag ]]; then
 if [[ "$RTSP_HI_RES_ENABLED" == "true" ]] ||  [[ "$RTSP_LOW_RES_ENABLED" == "true" ]] && ! [[ -e /tmp/dbgflag ]]; then

+ 86 - 2
SD_ROOT/wz_mini/etc/init.d/wz_user.sh

@@ -71,16 +71,71 @@ rename_interface() {
 	eth_wlan_up
 	eth_wlan_up
 }
 }
 
 
+rename_interface_and_setup_bonding() {
+##Fool iCamera by renaming the hardline interface to wlan0
+## $1 Bonding Interface, $2 Primary Interface, $3 Secondary Interface
+	bonding_interface=$1
+	primary_interface=$2
+	secondary_interface=$3
+
+	echo "renaming interfaces"
+
+	# Bring all interfaces down
+	ifconfig $bonding_interface down
+	ifconfig $primary_interface down
+	ifconfig $secondary_interface down
+
+	# Have to bring bonding interface up to be able to bond our slaves.
+	/opt/wz_mini/bin/busybox ip link set $bonding_interface up
+
+	# Rename the real wlan0 interface if needed/used
+	if [[ "$primary_interface" == "wlan0" ]]; then
+		/opt/wz_mini/bin/busybox ip link set $primary_interface name wlanold
+		/opt/wz_mini/bin/busybox ip addr flush dev wlanold
+		primary_interface="wlanold"
+		# Because we just changed the name of the primary interface, we need to
+		# tell the bonding driver about the name change as well.
+		echo "$primary_interface" > /sys/devices/virtual/net/$bonding_interface/bonding/primary
+	fi
+	if [[ "$secondary_interface" == "wlan0" ]]; then
+		/opt/wz_mini/bin/busybox ip link set $secondary_interface name wlanold
+		/opt/wz_mini/bin/busybox ip addr flush dev wlanold
+		secondary_interface="wlanold"
+	fi
+
+	# Enslave the Ethernet and Original Wifi interfaces
+	# under the bonding interface.
+	/opt/wz_mini/tmp/.bin/ifenslave $bonding_interface $primary_interface $secondary_interface
+
+	# Have to bring bonding interface down to be rename the interface
+	/opt/wz_mini/bin/busybox ip link set $bonding_interface down
+
+	# Name the bonding interface to be the "new" wlan0 interface
+	/opt/wz_mini/bin/busybox ip link set $bonding_interface name wlan0
+
+	# Bring the newly renamed wlan0 (actually the bond interface) back up
+	eth_wlan_up
+}
+
 eth_wlan_up() {
 eth_wlan_up() {
 ##Run DHCP client, and bind mount our fake wpa_cli.sh to fool iCamera
 ##Run DHCP client, and bind mount our fake wpa_cli.sh to fool iCamera
         ifconfig wlan0 up
         ifconfig wlan0 up
 	pkill udhcpc
 	pkill udhcpc
         udhcpc -i wlan0 -x hostname:$CUSTOM_HOSTNAME -p /var/run/udhcpc.pid -b
         udhcpc -i wlan0 -x hostname:$CUSTOM_HOSTNAME -p /var/run/udhcpc.pid -b
+
+    # If running with Interface Bonding enabled, kill any existing
+    # wpa_supplicant that might be running and spawn our own instead
+    if [[ "$BONDING_ENABLED" == "true" ]] && [[ "$ENABLE_USB_ETH" == "true" ]]; then
+        /opt/wz_mini/bin/busybox killall wpa_supplicant
+        wpa_supplicant -D nl80211 -i wlanold -c /tmp/wpa_supplicant.conf -B -s
+    fi
+
 	if [ -f /opt/wz_mini/tmp/.T20 ]; then
 	if [ -f /opt/wz_mini/tmp/.T20 ]; then
         mount -o bind /opt/wz_mini/bin/wpa_cli.sh /system/bin/wpa_cli
         mount -o bind /opt/wz_mini/bin/wpa_cli.sh /system/bin/wpa_cli
 	else
 	else
         mount -o bind /opt/wz_mini/bin/wpa_cli.sh /bin/wpa_cli
         mount -o bind /opt/wz_mini/bin/wpa_cli.sh /bin/wpa_cli
 	fi
 	fi
+
 	break
 	break
 }
 }
 
 
@@ -108,7 +163,11 @@ wlanold_check() {
 		eth_wlan_up
 		eth_wlan_up
 	else
 	else
 		echo "wlanold doesn't exist"
 		echo "wlanold doesn't exist"
-		rename_interface $1
+		if [[ "$BONDING_ENABLED" == "true" ]] && [[ "$ENABLE_USB_ETH" == "true" ]]; then
+			rename_interface_and_setup_bonding bond0 "$BONDING_PRIMARY_INTERFACE" "$BONDING_SECONDARY_INTERFACE"
+		else
+			rename_interface $1
+		fi
 	fi
 	fi
 }
 }
 
 
@@ -246,6 +305,27 @@ if [[ "$ENABLE_USB_ETH" == "true" ]]; then
 		esac
 		esac
 	done
 	done
 
 
+    if [[ "$BONDING_ENABLED" == "true" ]]; then
+        if [[ "$BONDING_LINK_MONITORING_FREQ_MS" == "" ]]; then
+            "$BONDING_LINK_MONITORING_FREQ_MS" = "100"
+        fi
+        if [[ "$BONDING_DOWN_DELAY_MS" == "" ]]; then
+            "$BONDING_DOWN_DELAY_MS" = "5000"
+        fi
+        if [[ "$BONDING_UP_DELAY_MS" == "" ]]; then
+            "$BONDING_UP_DELAY_MS" = "5000"
+        fi
+        if [[ "$BONDING_PRIMARY_INTERFACE" == "" ]]; then
+            "$BONDING_PRIMARY_INTERFACE" = "eth0"
+        fi
+        if [[ "$BONDING_SECONDARY_INTERFACE" == "" ]]; then
+            "$BONDING_SECONDARY_INTERFACE" = "wlan0"
+        fi
+
+        # Insert the bonding driver into the kernel
+        insmod $KMOD_PATH/kernel/drivers/net/bonding/bonding.ko mode=active-backup miimon="$BONDING_LINK_MONITORING_FREQ_MS" downdelay="$BONDING_DOWN_DELAY_MS" updelay="$BONDING_UP_DELAY_MS" primary="$BONDING_PRIMARY_INTERFACE"
+    fi
+
 	swap_enable
 	swap_enable
 
 
 	netloop eth0
 	netloop eth0
@@ -559,7 +639,7 @@ if [[ "$RTSP_LOW_RES_ENABLED" == "true" ]] || [[ "$RTSP_HI_RES_ENABLED" == "true
 	echo "delay RTSP for iCamera"
 	echo "delay RTSP for iCamera"
 	#This delay is required. Sometimes, if you start the rtsp server too soon, live view will break on the app.
 	#This delay is required. Sometimes, if you start the rtsp server too soon, live view will break on the app.
 	sleep 5
 	sleep 5
-	LD_LIBRARY_PATH=/opt/wz_mini/lib /opt/wz_mini/bin/v4l2rtspserver $AUDIO_CH $AUDIO_FMT -U "$RTSP_LOGIN":"$RTSP_PASSWORD" -P "$RTSP_PORT" $DEVICE1 $DEVICE2 &
+	LD_LIBRARY_PATH=/opt/wz_mini/lib /opt/wz_mini/bin/v4l2rtspserver $AUDIO_CH $AUDIO_FMT -F0 -U "$RTSP_LOGIN":"$RTSP_PASSWORD" -P "$RTSP_PORT" $DEVICE1 $DEVICE2 &
 fi
 fi
 
 
 if ([[ "$RTSP_LOW_RES_ENABLED" == "true" ]] || [[ "$RTSP_HI_RES_ENABLED" == "true" ]]) && [[ "$RTMP_STREAM_ENABLED" == "true" ]] && ([[ "$RTSP_LOW_RES_ENABLE_AUDIO" == "true" ]] || [[ "$RTSP_HI_RES_ENABLE_AUDIO" == "true" ]]); then
 if ([[ "$RTSP_LOW_RES_ENABLED" == "true" ]] || [[ "$RTSP_HI_RES_ENABLED" == "true" ]]) && [[ "$RTMP_STREAM_ENABLED" == "true" ]] && ([[ "$RTSP_LOW_RES_ENABLE_AUDIO" == "true" ]] || [[ "$RTSP_HI_RES_ENABLE_AUDIO" == "true" ]]); then
@@ -572,6 +652,10 @@ if ([[ "$RTSP_LOW_RES_ENABLED" == "true" ]] || [[ "$RTSP_HI_RES_ENABLED" == "tru
 	/opt/wz_mini/bin/rtmp-stream.sh "$RMTP_STREAM_SERVICE" "$RTMP_AUDIO"
 	/opt/wz_mini/bin/rtmp-stream.sh "$RMTP_STREAM_SERVICE" "$RTMP_AUDIO"
 fi
 fi
 
 
+if [[ "$NIGHT_DROP_DISABLE" == "true" ]]; then
+	touch /opt/wz_mini/tmp/.nd
+fi
+
 hostname_set
 hostname_set
 touch /opt/wz_mini/tmp/.wz_user_firstrun
 touch /opt/wz_mini/tmp/.wz_user_firstrun
 pkill -f dumpload #Kill dumpload so it won't waste cpu or ram gathering cores and uploading them when something crashes
 pkill -f dumpload #Kill dumpload so it won't waste cpu or ram gathering cores and uploading them when something crashes

BIN
SD_ROOT/wz_mini/lib/libcallback.so


+ 9 - 0
SD_ROOT/wz_mini/wz_mini.conf

@@ -33,6 +33,14 @@ ENABLE_NFSv4="false"
 
 
 ENABLE_RTL8189FS_DRIVER="false"
 ENABLE_RTL8189FS_DRIVER="false"
 
 
+##### NETWORK INTERFACE BONDING #####
+BONDING_ENABLED="false"
+BONDING_PRIMARY_INTERFACE="eth0"
+BONDING_SECONDARY_INTERFACE="wlan0"
+BONDING_LINK_MONITORING_FREQ_MS="100"
+BONDING_DOWN_DELAY_MS="5000"
+BONDING_UP_DELAY_MS="5000"
+
 #####ACCESSORIES#####
 #####ACCESSORIES#####
 REMOTE_SPOTLIGHT="false"
 REMOTE_SPOTLIGHT="false"
 REMOTE_SPOTLIGHT_HOST="0.0.0.0"
 REMOTE_SPOTLIGHT_HOST="0.0.0.0"
@@ -75,6 +83,7 @@ ENABLE_CIFS="false"
 DISABLE_FW_UPGRADE="false"
 DISABLE_FW_UPGRADE="false"
 AUDIO_PROMPT_VOLUME="50"
 AUDIO_PROMPT_VOLUME="50"
 ENABLE_MP4_WRITE="false"
 ENABLE_MP4_WRITE="false"
+NIGHT_DROP_DISABLE="false"
 
 
 #####DEBUG#####
 #####DEBUG#####
 #drops you to a shell via serial, doesn't load app_init.sh
 #drops you to a shell via serial, doesn't load app_init.sh

+ 5 - 5
file.chk

@@ -3,8 +3,8 @@ d41d8cd98f00b204e9800998ecf8427e  SD_ROOT/wz_mini/mnt/.gitignore
 34c6a4c3a941ff2becd9f487826d7692  SD_ROOT/wz_mini/etc/uvc.config
 34c6a4c3a941ff2becd9f487826d7692  SD_ROOT/wz_mini/etc/uvc.config
 ad7d1a2f9db3079617731b5854ce3b6a  SD_ROOT/wz_mini/etc/init.d/wz_cam.sh
 ad7d1a2f9db3079617731b5854ce3b6a  SD_ROOT/wz_mini/etc/init.d/wz_cam.sh
 0774518c06d6ef8e7181d35f194777cc  SD_ROOT/wz_mini/etc/init.d/wz_init.sh
 0774518c06d6ef8e7181d35f194777cc  SD_ROOT/wz_mini/etc/init.d/wz_init.sh
-c94845a6a1bd6c20f643daf4595b03f9  SD_ROOT/wz_mini/etc/init.d/wz_user.sh
-48c4fd27a194459efda6e92b446f51a0  SD_ROOT/wz_mini/etc/init.d/wz_post.sh
+04473a0de3ebbf562d253c5df3ddfdde  SD_ROOT/wz_mini/etc/init.d/wz_user.sh
+babb83cd8cdbd5af8639cfaecbca2d70  SD_ROOT/wz_mini/etc/init.d/wz_post.sh
 e3034eac02d8eda9902ca9cf89f0a586  SD_ROOT/wz_mini/etc/inittab
 e3034eac02d8eda9902ca9cf89f0a586  SD_ROOT/wz_mini/etc/inittab
 840aa9c26726201f7cffbf001bee193a  SD_ROOT/wz_mini/etc/uvc_jxf22.config
 840aa9c26726201f7cffbf001bee193a  SD_ROOT/wz_mini/etc/uvc_jxf22.config
 2609cae8b3b084d83e84299528d8bc93  SD_ROOT/wz_mini/etc/wz_mini.conf.dist
 2609cae8b3b084d83e84299528d8bc93  SD_ROOT/wz_mini/etc/wz_mini.conf.dist
@@ -49,7 +49,7 @@ a8970288e72c871bff6a4484f1e733d6  SD_ROOT/wz_mini/bin/readelf
 41b56bb30f02bce5f5e2598073151e16  SD_ROOT/wz_mini/bin/ffmpeg
 41b56bb30f02bce5f5e2598073151e16  SD_ROOT/wz_mini/bin/ffmpeg
 e37474a12d76cae16336476cba61e8b8  SD_ROOT/wz_mini/bin/neofetch
 e37474a12d76cae16336476cba61e8b8  SD_ROOT/wz_mini/bin/neofetch
 7fcc716cda1e024dae1045050a135beb  SD_ROOT/wz_mini/bin/audioplay_t31
 7fcc716cda1e024dae1045050a135beb  SD_ROOT/wz_mini/bin/audioplay_t31
-1b34a65eae3c4aed0704cc90e59757ce  SD_ROOT/wz_mini/bin/upgrade-run.sh
+03a42f7f175f88903c0dc52013f11205  SD_ROOT/wz_mini/bin/upgrade-run.sh
 e6a6a9dd8ce138686083a3d4303cea40  SD_ROOT/wz_mini/bin/iperf3
 e6a6a9dd8ce138686083a3d4303cea40  SD_ROOT/wz_mini/bin/iperf3
 0468ffb319707687557353242a518923  SD_ROOT/wz_mini/bin/wg
 0468ffb319707687557353242a518923  SD_ROOT/wz_mini/bin/wg
 65510c6c4d0db4b4679fc92d1c617fdd  SD_ROOT/wz_mini/bin/rtmp-stream.sh
 65510c6c4d0db4b4679fc92d1c617fdd  SD_ROOT/wz_mini/bin/rtmp-stream.sh
@@ -81,7 +81,7 @@ b339aee882a5d1c943ad08e4282ec3fd  SD_ROOT/wz_mini/usr/bin/iCamera-dbg
 4c780f0455481d106d47d89f0ae04ed5  SD_ROOT/wz_mini/lib/uClibc.tar
 4c780f0455481d106d47d89f0ae04ed5  SD_ROOT/wz_mini/lib/uClibc.tar
 9afeb088e4cbabbe0b04033b560204d0  SD_ROOT/wz_mini/lib/libimp.so
 9afeb088e4cbabbe0b04033b560204d0  SD_ROOT/wz_mini/lib/libimp.so
 4100755cb6cc6e3b76da20c7e3690e16  SD_ROOT/wz_mini/lib/libalog.so
 4100755cb6cc6e3b76da20c7e3690e16  SD_ROOT/wz_mini/lib/libalog.so
-11efb592b989c853d0db65b5aa5e5413  SD_ROOT/wz_mini/lib/libcallback.so
+d63e45dd1a05a62ad91ef3d70eae44de  SD_ROOT/wz_mini/lib/libcallback.so
 baf8d0b7a28f2fbb49a19ae0980779da  SD_ROOT/wz_mini/lib/modules/3.10.14/modules.order
 baf8d0b7a28f2fbb49a19ae0980779da  SD_ROOT/wz_mini/lib/modules/3.10.14/modules.order
 70775da41db88e4450d910b4ee8621c0  SD_ROOT/wz_mini/lib/modules/3.10.14/kernel/crypto/md4.ko
 70775da41db88e4450d910b4ee8621c0  SD_ROOT/wz_mini/lib/modules/3.10.14/kernel/crypto/md4.ko
 abbaa461e044b5688814423a087fbc52  SD_ROOT/wz_mini/lib/modules/3.10.14/kernel/fs/ext4/ext4.ko
 abbaa461e044b5688814423a087fbc52  SD_ROOT/wz_mini/lib/modules/3.10.14/kernel/fs/ext4/ext4.ko
@@ -184,5 +184,5 @@ ccf8f3611141656ba5594771bec06202  SD_ROOT/wz_mini/lib/modules/3.10.14__isvp_swan
 14865a6e2e2df87a8362c6f20377a934  SD_ROOT/wz_mini/lib/libtinyalsa.so.2
 14865a6e2e2df87a8362c6f20377a934  SD_ROOT/wz_mini/lib/libtinyalsa.so.2
 bd383994491e4bdca81788c168feb2eb  SD_ROOT/wz_mini/lib/libasound.so.2
 bd383994491e4bdca81788c168feb2eb  SD_ROOT/wz_mini/lib/libasound.so.2
 f6f0d5a9ebd916de6bdb9695067809ae  SD_ROOT/wz_mini/lib/libaudioProcess.so
 f6f0d5a9ebd916de6bdb9695067809ae  SD_ROOT/wz_mini/lib/libaudioProcess.so
-2609cae8b3b084d83e84299528d8bc93  SD_ROOT/wz_mini/wz_mini.conf
+aa102e670336c6bf165f1a9925d9d4fc  SD_ROOT/wz_mini/wz_mini.conf
 d41d8cd98f00b204e9800998ecf8427e  SD_ROOT/wz_mini/tmp/.gitignore
 d41d8cd98f00b204e9800998ecf8427e  SD_ROOT/wz_mini/tmp/.gitignore

+ 1 - 1
src/libcallback_wz_mod/Makefile

@@ -2,7 +2,7 @@
 
 
 CC = /openmiko/build/mips-gcc472-glibc216-64bit/bin/mips-linux-uclibc-gnu-gcc
 CC = /openmiko/build/mips-gcc472-glibc216-64bit/bin/mips-linux-uclibc-gnu-gcc
 CFLAGS = -fPIC -std=gnu99 -shared -ldl -ltinyalsa -lm -pthread
 CFLAGS = -fPIC -std=gnu99 -shared -ldl -ltinyalsa -lm -pthread
-CC_SRCS = video_callback.c audio_callback.c jpeg.c setlinebuf.c mmc_format.c curl.c freopen.c opendir.c remove.c motor.c command.c gmtime_r.c wait_motion.c irled.c audio_play.c mp4write.c imp_control.c
+CC_SRCS = video_callback.c audio_callback.c jpeg.c setlinebuf.c mmc_format.c curl.c freopen.c opendir.c remove.c motor.c command.c gmtime_r.c wait_motion.c irled.c audio_play.c mp4write.c imp_control.c night_drop.c
 TARGET = libcallback.so
 TARGET = libcallback.so
 
 
 all: ${TARGET}
 all: ${TARGET}

+ 8 - 9
src/libcallback_wz_mod/imp_control.c

@@ -158,21 +158,20 @@ int fps_den = 1;
 		IMP_ISP_Tuning_SetHVFLIP(3);
 		IMP_ISP_Tuning_SetHVFLIP(3);
 	}
 	}
   } else if(!strcmp(p, "fps_set")) {
   } else if(!strcmp(p, "fps_set")) {
-	//encoder framerate failed
         p = strtok_r(NULL, " \t\r\n", &tokenPtr);
         p = strtok_r(NULL, " \t\r\n", &tokenPtr);
-//	fps_val = 20;
         if(p) fps_val = atoi(p);
         if(p) fps_val = atoi(p);
 
 
-//	IMP_ISP_EnableTuning();
-//	IMP_ISP_Tuning_SetSensorFPS(fps_val, fps_den);
+	IMP_ISP_EnableTuning();
+	IMP_ISP_Tuning_SetSensorFPS(fps_val, fps_den);
 
 
-	paracfg_set_user_config_item(5,fps_val);
+	//encoder framerate failed
+//	paracfg_set_user_config_item(5,fps_val);
 
 
-	set_fs_chn_config_fps(encChn, fps_val);
-	set_fs_chn_config_fps(encChn1, fps_val);
+//	set_fs_chn_config_fps(encChn, fps_val);
+//	set_fs_chn_config_fps(encChn1, fps_val);
 
 
-	set_video_max_fps(fps_val);
-	local_sdk_video_set_fps(fps_val);
+//	set_video_max_fps(fps_val);
+//	local_sdk_video_set_fps(fps_val);
 
 
 //	local_sdk_video_set_gop(encChn, fps_val);
 //	local_sdk_video_set_gop(encChn, fps_val);
 
 

BIN
src/libcallback_wz_mod/libcallback.so


+ 45 - 0
src/libcallback_wz_mod/night_drop.c

@@ -0,0 +1,45 @@
+#define _GNU_SOURCE
+#include <dlfcn.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <stdint.h>
+#include <fcntl.h>
+
+static uint32_t (*real_local_sdk_video_set_fps)(int encChn);
+
+int local_sdk_video_set_fps(int encChn) {
+
+        fprintf(stderr, "[command] [night_drop.c] local_sdk_video_set_fps called with fps value: %d\n", encChn);
+
+        const char *nd_enable="/opt/wz_mini/tmp/.nd";
+        const char *product_T31="/opt/wz_mini/tmp/.T31";
+        const char *product_T20="/opt/wz_mini/tmp/.T20";
+
+        if( access( nd_enable, F_OK ) != -1 ) {
+                printf("[command] [night_drop.c] Night Drop Enabled\n");
+        if( encChn == 15 && access( product_T31, F_OK ) != -1 ) {
+                printf("[command] [night_drop.c] T31 detected\n");
+                fprintf(stderr, "[command] [night_drop.c] Night Time Requested FPS Drop Value: %d\n", encChn);
+                printf("[command] [night_drop.c] Night FPS Drop Stopped\n");
+        } else if ( encChn >= 15 && access( product_T20, F_OK ) != -1 ) {
+                printf("[command] [night_drop.c] T20 detected\n");
+                fprintf(stderr, "[command] [night_drop.c] Night Time Requested FPS Drop Value: %d\n", encChn);
+                printf("[command] [night_drop.c] Night FPS Drop Stopped\n");
+        } else {
+                fprintf(stderr, "[command] [night_drop.c] Requested FPS Value: %d\n", encChn);
+                fprintf(stderr, "[command] [night_drop.c] Calling local_sdk_video_set_fps to: %d\n", encChn);
+                real_local_sdk_video_set_fps(encChn);
+        }
+	//If nd is disabled, pass all requests along
+	} else {
+	        printf("[command] [night_drop.c] Night Drop not enabled\n");
+                fprintf(stderr, "[command] [night_drop.c] Requested FPS Value: %d\n", encChn);
+                fprintf(stderr, "[command] [night_drop.c] Calling local_sdk_video_set_fps to: %d\n", encChn);
+                real_local_sdk_video_set_fps(encChn);
+	}
+}
+
+
+static void __attribute ((constructor)) night_drop_init(void) {
+  real_local_sdk_video_set_fps = dlsym(dlopen("/system/lib/liblocalsdk.so", RTLD_LAZY), "local_sdk_video_set_fps");
+}

+ 4 - 0
src/libcallback_wz_mod/video_callback.c

@@ -186,6 +186,10 @@ int local_sdk_video_set_encode_frame_callback(int ch, void *callback) {
     video_encode_cb = callback;
     video_encode_cb = callback;
     fprintf(stderr,"enc func injection save video_encode_cb=0x%x\n", video_encode_cb);
     fprintf(stderr,"enc func injection save video_encode_cb=0x%x\n", video_encode_cb);
     callback = video_encode_capture;
     callback = video_encode_capture;
+  } else if( (ch == 0) && ch_count == 3) {
+    video_encode_cb = callback;
+    fprintf(stderr,"RTSP FIRMWARE enc func injection save video_encode_cb=0x%x\n", video_encode_cb);
+    callback = video_encode_capture;
   }
   }
     fprintf(stderr,"ch count is %x\n", ch_count);
     fprintf(stderr,"ch count is %x\n", ch_count);
 
 

+ 26 - 14
v2_install/compile_image.sh

@@ -3,28 +3,40 @@
 UA_STRING="Mozilla/5.0 (Macintosh; Intel Mac OS X 12_4) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Safari/605.1.15"
 UA_STRING="Mozilla/5.0 (Macintosh; Intel Mac OS X 12_4) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Safari/605.1.15"
 DL_URL=$(wget --header="Accept: text/html" --user-agent="$UA_STRING" -qO- https://support.wyze.com/hc/en-us/articles/360024852172-Release-Notes-Firmware | grep -Eo "(http|https)://[a-zA-Z0-9./?=_-]*" | grep /v2/ |   sort -t . -k2r,5 | grep demo | head -1)
 DL_URL=$(wget --header="Accept: text/html" --user-agent="$UA_STRING" -qO- https://support.wyze.com/hc/en-us/articles/360024852172-Release-Notes-Firmware | grep -Eo "(http|https)://[a-zA-Z0-9./?=_-]*" | grep /v2/ |   sort -t . -k2r,5 | grep demo | head -1)
 
 
-echo "create work directory"
-mkdir v2_ro
+echo "checking for tools"
+command -v wget >/dev/null 2>&1 || { echo >&2 "wget is not installed.  Aborting."; exit 1; }
+command -v mkimage >/dev/null 2>&1 || { echo >&2 "mkimage is not installed.  Aborting."; exit 1; }
+command -v unzip >/dev/null 2>&1 || { echo >&2 "unzip is not installed.  Aborting."; exit 1; }
 
 
-echo "download latest firmware"
-wget $DL_URL -P ./v2_ro/
+echo "create temporary work directory"
+mkdir v2_ro
 
 
-echo "extracting firmware to workdir"
+echo "check for local zip"
+if [ -f demo_4.9.8.1002.zip ]; then
+	echo "local archive found"
+	mv demo_4.9.8.1002.zip ./v2_ro/
+else
+	echo "local archive not found"
+	echo "downloading latest firmware"
+	wget $DL_URL -P ./v2_ro/
+fi
+
+echo "extracting firmware to temporary work directory"
 unzip v2_ro/demo_4.9.8.1002.zip -d ./v2_ro/
 unzip v2_ro/demo_4.9.8.1002.zip -d ./v2_ro/
 
 
-echo "create firmware dir"
-mkdir v2_ro/tmp_dir
+echo "create firmware directory"
+mkdir v2_ro/fw_dir
 
 
-echo "unpack stock firmware"
-./fw_tool.sh unpack v2_ro/demo_4.9.8.1002.bin v2_ro/tmp_dir
+echo "unpack stock firmware image"
+./fw_tool.sh unpack v2_ro/demo_4.9.8.1002.bin v2_ro/fw_dir
 
 
-echo "replace kernel"
-cp v2_kernel.bin v2_ro/tmp_dir/kernel.bin
+echo "replace factory kernel"
+cp v2_kernel.bin v2_ro/fw_dir/kernel.bin
 
 
-echo "pack firmware with new kernel"
-./fw_tool.sh pack v2_ro/tmp_dir/ demo.bin
+echo "pack firmware image with new kernel"
+./fw_tool.sh pack v2_ro/fw_dir/ demo.bin
 
 
-echo "md5sum is:  " `md5sum demo.bin`
+echo "remove temporary work directory"
 rm -rf v2_ro
 rm -rf v2_ro
 
 
 echo "demo.bin ready.  Please copy demo.bin to your memory card"
 echo "demo.bin ready.  Please copy demo.bin to your memory card"