Bläddra i källkod

add v2 support

Alfonso Gamboa 3 år sedan
förälder
incheckning
80378fbd5e

+ 28 - 4
README.md

@@ -1,7 +1,7 @@
 # wz_mini_hacks
-### v3/PANv2 devices ONLY
+### v2/v3/PANv2 devices ONLY
 
-Run whatever firmware you want on your v3/PANv2 and have root access to the device.  This is in early stages of testing, use CAUTION if you are unsure of what you are doing.  No support whatsoever is offered with this release.  
+Run whatever firmware you want on your v2/v3/PANv2 and have root access to the device.  This is in early stages of testing, use CAUTION if you are unsure of what you are doing.  No support whatsoever is offered with this release.  
 
 **Do not contact the manufacturer for information or support, they will not be able to assist or advise you!**
 
@@ -55,27 +55,50 @@ Using this project can potentially expose your device to the open internet depen
 * Person
 * Computer
 * 256MB or larger Micro-SD Card is required!
+* Higher class Micro-SD cards will ensure better performance
 
 ## What Works / What Doesn't Work
 * Everything works except:
 
   1. PAN v2:
      -  Tilt (Vertical) only works at motor speed 9
+  2. v2
+     -  webcam mode does not work on v2
+     -  usb direct does not work on v2 yet
+     -  rndis mode on v2 is untested
 
-## Setup
+## Setup v3/PANv2
 
 1. git clone the repo or download the repo zip
 2. format micro-sd card as fat-32 ( this is a hard requirement, the bootloader does not support ex-fat or ext, and thus will not load wz_mini ), volume name does not matter.
 2. copy all the files inside of SD_ROOT to your micro sd card
 3. __SSH is enabled, but is secured using public key authentication for security.  Edit the file ```wz_mini/etc/ssh/authorized_keys``` and enter your public key here.  If you need a simple guide, [how to use public key authentication](https://averagelinuxuser.com/how-to-use-public-key-authentication/)__
 
-## Installation
+## Installation v3/PANv2
+
 1. Turn off the camera
 2. Insert the micro sd memory card into the camera
 3. Turn on the camera
 4. The camera will proceed to boot, then you may connect via the IP address of your device using SSH, port 22.  The username is root.  It may take a few minutes for the device to finish booting and connect to Wi-Fi, then launch the SSH server.  Be patient.
 5. You may also login via the serial console, password is WYom2020
 
+## Setup v2
+
+1. git clone the repo or download the repo zip
+2. format micro-sd card as fat-32 ( this is a hard requirement, the bootloader does not support ex-fat or ext, and thus will not load wz_mini ), volume name does not matter.
+3. Run `compile_image.sh` using linux, wait for the script to finish.
+4. Copy all the files inside of SD_ROOT to your micro sd card
+5. Copy the generated `demo.bin` to root of your micro sd card
+6. __SSH is enabled, but is secured using public key authentication for security.  Edit the file ```wz_mini/etc/ssh/authorized_keys``` and enter your public key here.  If you need a simple guide, [how to use public key authentication](https://averagelinuxuser.com/how-to-use-public-key-authentication/)__
+
+## Installation v2
+
+1. Insert the micro sd memory card into the camera
+2. Hold down reset button while powering unit on.  This is the standard manual firmware restore procedure.
+3. Wait for camera to flash the latest modified firmware, and reboot, do not remove the micro sd card.
+4. The camera will proceed to boot, then you may connect via the IP address of your device using SSH, port 22.  The username is root.  It may take a few minutes for the device to finish booting and connect to Wi-Fi, then launch the SSH server.  Be patient.  You should hear audio prompts from the camera once it has booted successfully.
+5. You may also login via the serial console, password is WYom2020
+
 ## Removal
 1.  Delete the files you copied to the memory card, or remove the memory card all together.  The next time you boot the camera, you will return to stock firmware.
 
@@ -235,6 +258,7 @@ WEB_CAM_FPS_RATE="25"
 
 ## Latest Updates
 
+* 05-22-22:  Update wz_mini scripts and libraries to support v2 camera.  experimental.
 * 05-20-22:  updated to latest libcallback including mp4write, bug fixes: usb direct mac addr, usb webcam mode bad variable.
 * 05-18-22:  Added PC Web Camera functionality, changed RTSP server, when you use enable more than one stream, they share the port and use different paths.
 * 05-15-22:  fixed rtsp audio for low-res rtsp stream, patched libcallback sources for audio channel 1.

+ 45 - 19
SD_ROOT/wz_mini/etc/init.d/v3_init.sh

@@ -21,29 +21,47 @@ echo '
 
 set -x
 
-#lets test this out and see how it goes, patched udhcpc for iCamera
+#test for v2
+mount -t jffs2 /dev/mtdblock9 /params
+
+if cat /params/config/.product_config | grep WYZEC1-JZ; then
+        V2="true"
+fi
+umount /params
+
 mount --bind /opt/wz_mini/bin/busybox /bin/busybox
 
 #WCV3 GPIO
 GPIO=63
 
 #Check model, change GPIO is HL_PAN2
-mount -t jffs2 /dev/mtdblock6 /configs
-if [[ $(cat /configs/.product_config  | grep PRODUCT_MODEL) == "PRODUCT_MODEL=HL_PAN2" ]]; then
-umount /configs
-GPIO=7
+if [[ "$V2" == "false" ]]; then
+	mount -t jffs2 /dev/mtdblock6 /configs
+	if [[ $(cat /configs/.product_config  | grep PRODUCT_MODEL) == "PRODUCT_MODEL=HL_PAN2" ]]; then
+	umount /configs
+	GPIO=7
+	fi
+else
+	echo "v2, no need to check"
 fi
 
 if [[ -e /opt/wz_mini/etc/.first_boot ]]; then
         echo "first boot already completed"
 else
 	echo "first boot, initializing"
-        insmod /opt/wz_mini/lib/modules/3.10.14__isvp_swan_1.0__/kernel/audio.ko spk_gpio=$GPIO alc_mode=0 mic_gain=0
-        /opt/wz_mini/bin/audioplay_t31 /opt/wz_mini/usr/share/audio/init.wav 50
-        rmmod audio
-        touch /opt/wz_mini/etc/.first_boot
+        if [[ "$V2" == "true" ]]; then
+		insmod /opt/wz_mini/lib/modules/3.10.14_v2/kernel/audio.ko
+        	LD_LIBRARY_PATH='/opt/wz_mini/lib' /opt/wz_mini/bin/audioplay_t20 /opt/wz_mini/usr/share/audio/init_v2.wav 70
+		rmmod audio
+	else
+	        insmod /opt/wz_mini/lib/modules/3.10.14__isvp_swan_1.0__/kernel/audio.ko spk_gpio=$GPIO alc_mode=0 mic_gain=0
+        	/opt/wz_mini/bin/audioplay_t31 /opt/wz_mini/usr/share/audio/init.wav 50
+        	rmmod audio
+	fi
 fi
 
+touch /opt/wz_mini/etc/.first_boot
+
 mount --bind /opt/wz_mini/etc/inittab /etc/inittab
 
 echo "bind /etc/profile for local/ssh shells"
@@ -53,8 +71,13 @@ echo "mounting tmpfs"
 mount -t tmpfs /tmp
 
 echo "mount system to replace factorycheck with dummy, to prevent bind unmount"
-mount /dev/mtdblock3 /system
-mount --bind /opt/wz_mini/bin/factorycheck /system/bin/factorycheck
+if [[ ! "$V2" == "true" ]]; then
+	mount /dev/mtdblock3 /system
+	mount --bind /opt/wz_mini/bin/factorycheck /system/bin/factorycheck
+else
+	echo "v2 doesn't need factorycheck"
+fi
+
 touch /tmp/usrflag
 
 echo "replace stock fstab"
@@ -89,13 +112,16 @@ cp /opt/wz_mini/etc/shadow /opt/wz_mini/tmp/.storage/shadow
 mount --bind /opt/wz_mini/tmp/.storage/shadow /etc/shadow
 chmod 400 /etc/shadow
 
-echo "mount kernel modules"
-mount --bind /opt/wz_mini/lib/modules /lib/modules
-
 if [[ -e /opt/wz_mini/swap.gz ]]; then
-	insmod /opt/wz_mini/lib/modules/3.10.14__isvp_swan_1.0__/kernel/audio.ko spk_gpio=$GPIO alc_mode=0 mic_gain=0
-	/opt/wz_mini/bin/audioplay_t31 /opt/wz_mini/usr/share/audio/swap.wav 50
-	rmmod audio
+        if [[ "$V2" == "true" ]]; then
+		insmod /opt/wz_mini/lib/modules/3.10.14_v2/kernel/audio.ko
+        	LD_LIBRARY_PATH='/opt/wz_mini/lib' /opt/wz_mini/bin/audioplay_t20 /opt/wz_mini/usr/share/audio/swap_v2.wav 70
+		rmmod audio
+	else
+		insmod /opt/wz_mini/lib/modules/3.10.14__isvp_swan_1.0__/kernel/audio.ko spk_gpio=$GPIO alc_mode=0 mic_gain=0
+		/opt/wz_mini/bin/audioplay_t31 /opt/wz_mini/usr/share/audio/swap.wav 50
+		rmmod audio
+	fi
 	echo "swap archive present, extracting"
         gzip -d /opt/wz_mini/swap.gz
         mkswap /opt/wz_mini/swap
@@ -116,13 +142,13 @@ echo "Run dropbear ssh server"
 /opt/wz_mini/bin/dropbear -R -s -g
 
 if [[ $(cat /opt/wz_mini/run_mmc.sh | grep "DEBUG_ENABLED\=") == "DEBUG_ENABLED\=\"true\"" ]]; then
-        sed -i '/app_init.sh/,+3d' /opt/wz_mini/tmp/.storage/rcS
+        sed -i '/app_init.sh/,+4d' /opt/wz_mini/tmp/.storage/rcS
         sed -i '/^# Run init/i/bin/sh /etc/profile' /opt/wz_mini/tmp/.storage/rcS
 	touch /tmp/dbgflag
 else
 
 if [[ $(cat /opt/wz_mini/run_mmc.sh | grep "WEB_CAM_ENABLE\=") == "WEB_CAM_ENABLE\=\"true\"" ]]; then
-        sed -i '/app_init.sh/,+3d' /opt/wz_mini/tmp/.storage/rcS
+        sed -i '/app_init.sh/,+4d' /opt/wz_mini/tmp/.storage/rcS
         sed -i '/^# Run init/i/opt/wz_mini/etc/init.d/wz_cam.sh' /opt/wz_mini/tmp/.storage/rcS
 	touch /tmp/dbgflag
 fi

+ 25 - 10
SD_ROOT/wz_mini/etc/init.d/v3_post.sh

@@ -4,24 +4,39 @@
 
 exec 1> /opt/wz_mini/log/v3_post.log 2>&1
 
-echo "welcome to v3_post.sh"
-echo "PID $$"
-
 set -x
 
-echo "v3_post.sh exec"
+echo "welcome to v3_post.sh"
+echo "PID $$"
 
+echo "mount kernel modules"
+mount --bind /opt/wz_mini/lib/modules /lib/modules
 
 if [[ $(cat /opt/wz_mini/run_mmc.sh | grep "RTSP_HI_RES_ENABLED\=") == "RTSP_HI_RES_ENABLED\=\"true\"" ]] ||  [[ $(cat /opt/wz_mini/run_mmc.sh | grep "RTSP_LOW_RES_ENABLED\=") == "RTSP_LOW_RES_ENABLED\=\"true\"" ]] && ! [[ -e /tmp/dbgflag ]]; then
 	if [[ $(cat /opt/wz_mini/run_mmc.sh | grep "RTSP_LOW_RES_ENABLED\=") == "RTSP_LOW_RES_ENABLED\=\"true\"" ]] && [[ $(cat /opt/wz_mini/run_mmc.sh | grep "RTSP_HI_RES_ENABLED\=") == "RTSP_HI_RES_ENABLED\=\"true\"" ]]; then
-	        echo "load video loopback driver at video1 video2"
-	        insmod /opt/wz_mini/lib/modules/3.10.14__isvp_swan_1.0__/kernel/v4l2loopback.ko video_nr=1,2
+	        if [[ -d /etc/hotplug ]]; then
+		        echo "load video loopback driver at video6 video7"
+		        insmod /opt/wz_mini/lib/modules/3.10.14_v2/kernel/v4l2loopback_V2.ko video_nr=6,7
+		else
+		        echo "load video loopback driver at video1 video2"
+		        insmod /opt/wz_mini/lib/modules/3.10.14__isvp_swan_1.0__/kernel/v4l2loopback.ko video_nr=1,2
+		fi
 	elif [[ $(cat /opt/wz_mini/run_mmc.sh | grep "RTSP_LOW_RES_ENABLED\=") == "RTSP_LOW_RES_ENABLED\=\"true\"" ]]; then
-	        echo "load video loopback driver at video2"
-	        insmod /opt/wz_mini/lib/modules/3.10.14__isvp_swan_1.0__/kernel/v4l2loopback.ko video_nr=2
+	        if [[ -d /etc/hotplug ]]; then
+		        echo "load video loopback driver at video7"
+		        insmod /opt/wz_mini/lib/modules/3.10.14_v2/kernel/v4l2loopback_V2.ko video_nr=7
+		else
+		        echo "load video loopback driver at video2"
+	        	insmod /opt/wz_mini/lib/modules/3.10.14__isvp_swan_1.0__/kernel/v4l2loopback.ko video_nr=2
+		fi
 	elif [[ $(cat /opt/wz_mini/run_mmc.sh | grep "RTSP_HI_RES_ENABLED\=") == "RTSP_HI_RES_ENABLED\=\"true\"" ]]; then
-	        echo "load video loopback driver at video1"
-	        insmod /opt/wz_mini/lib/modules/3.10.14__isvp_swan_1.0__/kernel/v4l2loopback.ko video_nr=1
+	        if [[ -d /etc/hotplug ]]; then
+		        echo "load video loopback driver at video6"
+		        insmod /opt/wz_mini/lib/modules/3.10.14_v2/kernel/v4l2loopback_V2.ko video_nr=6
+		else
+		        echo "load video loopback driver at video1"
+		        insmod /opt/wz_mini/lib/modules/3.10.14__isvp_swan_1.0__/kernel/v4l2loopback.ko video_nr=1
+		fi
 	fi
 
         cp /system/bin/iCamera /opt/wz_mini/tmp/.storage/

BIN
SD_ROOT/wz_mini/lib/libalog.so


BIN
SD_ROOT/wz_mini/lib/libaudioProcess.so


BIN
SD_ROOT/wz_mini/lib/libcallback.so


BIN
SD_ROOT/wz_mini/lib/libimp.so


+ 105 - 47
SD_ROOT/wz_mini/run_mmc.sh

@@ -87,7 +87,7 @@ wait_sdroot() {
 ##Stall execution if the micro-sd card isn't mounted yet, iCamera controls this internally.
     while true
     do
-	if [[ -d /media/mmc/wz_mini ]]; then
+	if [[ -d /media/mmc/wz_mini ]] || [[ -d /media/mmcblk0p1/wz_mini ]]; then
 	echo "sd card ready"
 	break
 	fi
@@ -135,7 +135,11 @@ eth_wlan_up() {
         ifconfig wlan0 up
 	pkill udhcpc
         udhcpc -i wlan0 -x hostname:$HOSTNAME -p /var/run/udhcpc.pid -b
+	if [[ "$V2" == "true" ]]; then
+        mount -o bind /media/mmc/wz_mini/bin/wpa_cli.sh /system/bin/wpa_cli
+	else
         mount -o bind /media/mmc/wz_mini/bin/wpa_cli.sh /bin/wpa_cli
+	fi
 	break
 }
 
@@ -190,6 +194,13 @@ first_run_check
 wait_sdroot
 wait_wlan
 
+if [[ -d /etc/hotplug ]]; then
+V2="true"
+KMOD_PATH="/opt/wz_mini/lib/modules/3.10.14_v2"
+else
+V2="false"
+KMOD_PATH="/opt/wz_mini/lib/modules/3.10.14__isvp_swan_1.0__"
+fi
 
 if [[ "$ENABLE_SWAP" == "true" ]]; then
         if cat /proc/swaps | grep "mini" ; then
@@ -208,39 +219,42 @@ else
 fi
 
 if [[ "$ENABLE_NFSv4" == "true" ]]; then
-        insmod /lib/modules/3.10.14__isvp_swan_1.0__/kernel/lib/oid_registry.ko
-        insmod /lib/modules/3.10.14__isvp_swan_1.0__/kernel/net/dns_resolver/dns_resolver.ko
-        insmod /lib/modules/3.10.14__isvp_swan_1.0__/kernel/fs/nfs/nfsv4.ko
-        insmod /lib/modules/3.10.14__isvp_swan_1.0__/kernel/net/sunrpc/auth_gss/auth_rpcgss.ko
+        insmod $KMOD_PATH/kernel/lib/oid_registry.ko
+        insmod $KMOD_PATH/kernel/net/dns_resolver/dns_resolver.ko
+        insmod $KMOD_PATH/kernel/fs/nfs/nfsv4.ko
+        insmod $KMOD_PATH/kernel/net/sunrpc/auth_gss/auth_rpcgss.ko
         echo nfsv4 enabled
 else
         echo nfsv4 disabled
 fi
 
-if [[ "$ENABLE_IPTABLES" == "true" ]]; then
-
-	insmod /lib/modules/3.10.14__isvp_swan_1.0__/kernel/net/netfilter/x_tables.ko
-	insmod /lib/modules/3.10.14__isvp_swan_1.0__/kernel/net/ipv4/netfilter/ip_tables.ko
-	insmod /lib/modules/3.10.14__isvp_swan_1.0__/kernel/net/ipv4/netfilter/ipt_REJECT.ko
-	insmod /lib/modules/3.10.14__isvp_swan_1.0__/kernel/net/ipv4/netfilter/iptable_filter.ko
-	insmod /lib/modules/3.10.14__isvp_swan_1.0__/kernel/net/ipv4/netfilter/iptable_mangle.ko
-	echo "iptables ipv4 enabled"
+if [[ "$ENABLE_IPTABLES" == "true"  ]]; then
+	if [[ "$V2" == "true" ]]; then
+		echo "v2 has iptables built in"
+	else
+		insmod /lib/modules/3.10.14__isvp_swan_1.0__/kernel/net/netfilter/x_tables.ko
+		insmod /lib/modules/3.10.14__isvp_swan_1.0__/kernel/net/ipv4/netfilter/ip_tables.ko
+		insmod /lib/modules/3.10.14__isvp_swan_1.0__/kernel/net/ipv4/netfilter/ipt_REJECT.ko
+		insmod /lib/modules/3.10.14__isvp_swan_1.0__/kernel/net/ipv4/netfilter/iptable_filter.ko
+		insmod /lib/modules/3.10.14__isvp_swan_1.0__/kernel/net/ipv4/netfilter/iptable_mangle.ko
+		echo "iptables ipv4 enabled"
+	fi
 
 	if [[ "$ENABLE_IPV6" == "true" ]]; then
-		insmod /lib/modules/3.10.14__isvp_swan_1.0__/kernel/net/ipv6/netfilter/ip6_tables.ko
-		insmod /lib/modules/3.10.14__isvp_swan_1.0__/kernel/net/ipv6/netfilter/ip6t_REJECT.ko
-		insmod /lib/modules/3.10.14__isvp_swan_1.0__/kernel/net/ipv6/netfilter/ip6table_filter.ko
-		insmod /lib/modules/3.10.14__isvp_swan_1.0__/kernel/net/ipv6/netfilter/ip6table_mangle.ko
+		insmod $KMOD_PATH/kernel/net/ipv6/netfilter/ip6_tables.ko
+		insmod $KMOD_PATH/kernel/net/ipv6/netfilter/ip6t_REJECT.ko
+		insmod $KMOD_PATH/kernel/net/ipv6/netfilter/ip6table_filter.ko
+		insmod $KMOD_PATH/kernel/net/ipv6/netfilter/ip6table_mangle.ko
 		echo "iptables ipv6 enabled"
 	fi
-	else
-		echo "iptables disabled"
+else
+	echo "iptables disabled"
 fi
 
 if [[ "$ENABLE_USB_ETH" == "true" ]]; then
 
-	insmod /opt/wz_mini/lib/modules/3.10.14__isvp_swan_1.0__/kernel/drivers/net/usb/usbnet.ko
-        insmod /opt/wz_mini/lib/modules/3.10.14__isvp_swan_1.0__/kernel/drivers/net/usb/asix.ko
+	insmod $KMOD_PATH/kernel/drivers/net/usb/usbnet.ko
+        insmod $KMOD_PATH/kernel/drivers/net/usb/asix.ko
 
 	if [[ "$ENABLE_SWAP" == "true" ]]; then
 	echo "swap already enabled"
@@ -264,10 +278,13 @@ if [[ "$ENABLE_USB_DIRECT" == "true" ]]; then
 
         host_macaddr=$(echo $HOSTNAME|md5sum|sed 's/^\(..\)\(..\)\(..\)\(..\)\(..\).*$/02:\1:\2:\3:\4:\5/')
 
-	insmod /opt/wz_mini/lib/modules/3.10.14__isvp_swan_1.0__/kernel/drivers/usb/gadget/libcomposite.ko
+	if [[ "$V2" == "false" ]]; then
 	insmod /opt/wz_mini/lib/modules/3.10.14__isvp_swan_1.0__/kernel/drivers/usb/gadget/u_ether.ko
 	insmod /opt/wz_mini/lib/modules/3.10.14__isvp_swan_1.0__/kernel/drivers/usb/gadget/usb_f_ncm.ko
-	insmod /opt/wz_mini/lib/modules/3.10.14__isvp_swan_1.0__/kernel/drivers/usb/gadget/g_ncm.ko iManufacturer=wz_mini_ncm host_addr=$host_macaddr dev_addr=$USB_DIRECT_MAC_ADDR
+	fi
+
+	insmod $KMOD_PATH/kernel/drivers/usb/gadget/libcomposite.ko
+	insmod $KMOD_PATH/kernel/drivers/usb/gadget/g_ncm.ko iManufacturer=wz_mini_ncm host_addr=$host_macaddr dev_addr=$USB_DIRECT_MAC_ADDR
 
 	sleep 1
 
@@ -290,9 +307,9 @@ fi
 
 if [[ "$ENABLE_USB_RNDIS" == "true" ]]; then
 
-	insmod /opt/wz_mini/lib/modules/3.10.14__isvp_swan_1.0__/kernel/drivers/net/usb/usbnet.ko
-	insmod /opt/wz_mini/lib/modules/3.10.14__isvp_swan_1.0__/kernel/drivers/net/usb/cdc_ether.ko
-	insmod /opt/wz_mini/lib/modules/3.10.14__isvp_swan_1.0__/kernel/drivers/net/usb/rndis_host.ko
+	insmod $KMOD_PATH/kernel/drivers/net/usb/usbnet.ko
+	insmod $KMOD_PATH/kernel/drivers/net/usb/cdc_ether.ko
+	insmod $KMOD_PATH/kernel/drivers/net/usb/rndis_host.ko
 
 	sleep 1
 
@@ -314,31 +331,35 @@ if [[ "$ENABLE_USB_RNDIS" == "true" ]]; then
 fi
 
 if [[ "$ENABLE_WIREGUARD" == "true" ]]; then
-	insmod /opt/wz_mini/lib/modules/3.10.14__isvp_swan_1.0__/kernel/net/ipv4/tunnel4.ko
-	insmod /opt/wz_mini/lib/modules/3.10.14__isvp_swan_1.0__/kernel/net/ipv4/ip_tunnel.ko
-	insmod /opt/wz_mini/lib/modules/3.10.14__isvp_swan_1.0__/kernel/net/wireguard/wireguard.ko
+	insmod $KMOD_PATH/kernel/net/ipv4/tunnel4.ko
+	insmod $KMOD_PATH/kernel/net/ipv4/ip_tunnel.ko
+	insmod $KMOD_PATH/kernel/net/wireguard/wireguard.ko
 else
 	echo "wireguard disabled"
 fi
 
 if [[ "$ENABLE_CIFS" == "true" ]]; then
-	insmod /opt/wz_mini/lib/modules/3.10.14__isvp_swan_1.0__/kernel/fs/cifs/cifs.ko
+	insmod $KMOD_PATH/kernel/fs/cifs/cifs.ko
 else
 	echo "cifs disabled"
 fi
 
 if [[ "$ENABLE_USB_STORAGE" == "true" ]]; then
-	insmod /opt/wz_mini/lib/modules/3.10.14__isvp_swan_1.0__/kernel/drivers/scsi/scsi_mod.ko
-	insmod /opt/wz_mini/lib/modules/3.10.14__isvp_swan_1.0__/kernel/drivers/scsi/sd_mod.ko
-	insmod /opt/wz_mini/lib/modules/3.10.14__isvp_swan_1.0__/kernel/drivers/usb/storage/usb-storage.ko
+	insmod $KMOD_PATH/kernel/drivers/scsi/scsi_mod.ko
+	insmod $KMOD_PATH/kernel/drivers/scsi/sd_mod.ko
+	insmod $KMOD_PATH/kernel/drivers/usb/storage/usb-storage.ko
 else
 	echo "usb_storage disabled"
 fi
 
 if [[ "$ENABLE_EXT4" == "true" ]]; then
-	insmod /opt/wz_mini/lib/modules/3.10.14__isvp_swan_1.0__/kernel/fs/jbd2/jbd2.ko
-	insmod /opt/wz_mini/lib/modules/3.10.14__isvp_swan_1.0__/kernel/fs/mbcache.ko
-	insmod /opt/wz_mini/lib/modules/3.10.14__isvp_swan_1.0__/kernel/fs/ext4/ext4.ko
+	if [[ "$V2" == "true" ]]; then
+	insmod $KMOD_PATH/kernel/lib/crc16.ko
+	fi
+
+	insmod $KMOD_PATH/kernel/fs/jbd2/jbd2.ko
+	insmod $KMOD_PATH/kernel/fs/mbcache.ko
+	insmod $KMOD_PATH/kernel/fs/ext4/ext4.ko
 else
 	echo "ext4 disabled"
 fi
@@ -350,7 +371,7 @@ if [[ "$DISABLE_FW_UPGRADE" == "true" ]]; then
 	mount --bind /opt/wz_mini/tmp/.storage/hosts /etc/hosts
 else
         mkdir /tmp/Upgrade
-        /opt/wz_mini/bin/busybox inotifyd /opt/wz_mini/usr/bin/watch_up.sh /tmp/Upgrade:n &
+        /opt/wz_mini/bin/busybox inotifyd /opt/wz_mini/usr/bin/watch_up.sh /tmp:n &
 fi
 
 if [[ "$REMOTE_SPOTLIGHT" == "true" ]]; then
@@ -369,6 +390,12 @@ fi
 
 if [[ "$RTSP_HI_RES_ENABLED" == "true" ]]; then
 
+        if [[ -d /etc/hotplug ]]; then
+	HI_VIDEO_DEV="/dev/video6"
+	else
+	HI_VIDEO_DEV="/dev/video1"
+	fi
+
 	if [[ "$ENABLE_SWAP" == "true" ]]; then
 	echo "swap already enabled"
 	else
@@ -385,22 +412,34 @@ if [[ "$RTSP_HI_RES_ENABLED" == "true" ]]; then
 		/opt/wz_mini/bin/cmd audio on
 		AUDIO_CH="-C 1"
 		AUDIO_FMT="-a S16_LE"
-		DEVICE1="/dev/video1,hw:Loopback,0"
+		DEVICE1="$HI_VIDEO_DEV,hw:Loopback,0"
         else
-                DEVICE1="/dev/video1"
+                DEVICE1="$HI_VIDEO_DEV"
 		echo "rtsp audio disabled"
         fi
 
 	if [[ "$RTSP_HI_RES_ENC_PARAMETER" != "" ]]; then
-	watch -n10 -t "/system/bin/impdbg --enc_rc_s 0:44:4:$RTSP_HI_RES_ENC_PARAMETER" > /dev/null 2>&1 &
+		if [[ "$V2" == "true" ]]; then
+			watch -n10 -t "/system/bin/impdbg --enc_rc_s 0:0:4:$RTSP_LOW_RES_ENC_PARAMETER" > /dev/null 2>&1 &
+		else
+			watch -n10 -t "/system/bin/impdbg --enc_rc_s 0:44:4:$RTSP_HI_RES_ENC_PARAMETER" > /dev/null 2>&1 &
+		fi
 	fi
 
 	if [[ "$RTSP_HI_RES_MAX_BITRATE" != "" ]]; then
-	watch -n10 -t "/system/bin/impdbg --enc_rc_s 0:48:4:$RTSP_HI_RES_MAX_BITRATE" > /dev/null 2>&1 &
+		if [[ "$V2" == "true" ]]; then
+			watch -n10 -t "/system/bin/impdbg --enc_rc_s 0:28:4:$RTSP_LOW_RES_MAX_BITRATE" > /dev/null 2>&1 &
+		else
+			watch -n10 -t "/system/bin/impdbg --enc_rc_s 0:48:4:$RTSP_HI_RES_MAX_BITRATE" > /dev/null 2>&1 &
+		fi
 	fi
 
 	if [[ "$RTSP_HI_RES_TARGET_BITRATE" != "" ]]; then
-	watch -n10 -t "/system/bin/impdbg --enc_rc_s 0:52:4:$RTSP_HI_RES_TARGET_BITRATE" > /dev/null 2>&1 &
+		if [[ "$V2" == "true" ]]; then
+			echo "not supported on v2"
+		else
+			watch -n10 -t "/system/bin/impdbg --enc_rc_s 0:52:4:$RTSP_HI_RES_TARGET_BITRATE" > /dev/null 2>&1 &
+		fi
 	fi
 
         else
@@ -410,6 +449,13 @@ fi
 
 
 if [[ "$RTSP_LOW_RES_ENABLED" == "true" ]]; then
+	
+        if [[ -d /etc/hotplug ]]; then
+	LOW_VIDEO_DEV="/dev/video7"
+	else
+	LOW_VIDEO_DEV="/dev/video2"
+	fi
+
 
 	if [[ "$ENABLE_SWAP" == "true" ]]; then
 	echo "swap already enabled"
@@ -427,22 +473,34 @@ if [[ "$RTSP_LOW_RES_ENABLED" == "true" ]]; then
 		/opt/wz_mini/bin/cmd audio on1
 		AUDIO_CH="-C 1"
 		AUDIO_FMT="-a S16_LE"
-		DEVICE2="/dev/video2,hw:Loopback,1"
+		DEVICE2="$LOW_VIDEO_DEV,hw:Loopback,1"
         else
-                DEVICE2="/dev/video2"
+                DEVICE2="$LOW_VIDEO_DEV"
                 echo "rtsp audio disabled"
         fi
 
 	if [[ "$RTSP_LOW_RES_ENC_PARAMETER" != "" ]]; then
-	watch -n10 -t "/system/bin/impdbg --enc_rc_s 1:44:4:$RTSP_LOW_RES_ENC_PARAMETER" > /dev/null 2>&1 &
+		if [[ "$V2" == "true" ]]; then
+			watch -n10 -t "/system/bin/impdbg --enc_rc_s 1:0:4:$RTSP_LOW_RES_ENC_PARAMETER" > /dev/null 2>&1 &
+		else
+			watch -n10 -t "/system/bin/impdbg --enc_rc_s 1:44:4:$RTSP_LOW_RES_ENC_PARAMETER" > /dev/null 2>&1 &
+		fi
 	fi
 
 	if [[ "$RTSP_LOW_RES_MAX_BITRATE" != "" ]]; then
-	watch -n10 -t "/system/bin/impdbg --enc_rc_s 1:48:4:$RTSP_LOW_RES_MAX_BITRATE" > /dev/null 2>&1 &
+		if [[ "$V2" == "true" ]]; then
+			watch -n10 -t "/system/bin/impdbg --enc_rc_s 1:28:4:$RTSP_LOW_RES_MAX_BITRATE" > /dev/null 2>&1 &
+		else
+			watch -n10 -t "/system/bin/impdbg --enc_rc_s 1:48:4:$RTSP_LOW_RES_MAX_BITRATE" > /dev/null 2>&1 &
+		fi
 	fi
 
 	if [[ "$RTSP_LOW_RES_TARGET_BITRATE" != "" ]]; then
-	watch -n10 -t "/system/bin/impdbg --enc_rc_s 1:52:4:$RTSP_LOW_RES_TARGET_BITRATE" > /dev/null 2>&1 &
+		if [[ "$V2" == "true" ]]; then
+			echo "not supported on v2"
+		else
+			watch -n10 -t "/system/bin/impdbg --enc_rc_s 1:52:4:$RTSP_LOW_RES_TARGET_BITRATE" > /dev/null 2>&1 &
+		fi
 	fi
 
         else

+ 57 - 20
SD_ROOT/wz_mini/usr/bin/watch_up.sh

@@ -1,14 +1,37 @@
 #!/bin/sh
 
+exec 1>> /opt/wz_mini/log/watch_up.log 2>&1
+
+set -x
+
 event="$1"
 directory="$2"
 file="$3"
 
 case "$event" in
-  n) 	if [[ "$file" == "upgraderun.sh" ]]; then
+  n)  date; if [[ "$file" == "img" ]]; then
+
+set -x
+
+	#hook the v2
+	if cat /params/config/.product_config | grep WYZEC1-JZ; then
+	while [ ! -f /tmp/Upgrade/upgraderun.sh ]
+	do
+		sed -i '/pgrep/,+4d' /tmp/Upgrade/upgraderun.sh
+		find /tmp/Upgrade > /opt/upgrade_find.log &
+		sleep 0.1
+	done
+
+	else
+
+	#t31
+	while [ ! -f /tmp/Upgrade/upgraderun.sh ]
+	do
 		pkill -f "sh /tmp/Upgrade/upgraderun.sh"
 		mv /tmp/Upgrade/upgraderun.sh /tmp/Upgrade/upgraderun.old
 		echo "squashed upgraderun.sh"
+		sleep 0.1
+	done
 
 		echo "start countdown"
 		secs=30
@@ -24,35 +47,49 @@ case "$event" in
 					fi
 				fi
 		done
-
-	if [[ -e /tmp/Upgrade/app ]]; then
-		echo "found app image, flashing"
-		flashcp -v /tmp/Upgrade/app /dev/mtd3
-		/opt/wz_mini/bin/busybox sync
-	else
-		echo "no kernel image present"
 	fi
 
-	if [[ -e /tmp/Upgrade/kernel ]]; then
-		echo "found kernel image, flashing"
-		flashcp -v /tmp/Upgrade/kernel /dev/mtd1
-		/opt/wz_mini/bin/busybox sync
+	if cat /params/config/.product_config | grep WYZEC1-JZ; then
+		echo "v2 found"
+		upgrade_path=$(find /tmp/Upgrade | grep upgradecp.sh)
+		sed -i '/wc -c $KERNEL/,+14d' $upgrade_path
+		#mv /tmp/Upgrade/upgraderun.sh /tmp/Upgrade/run_upg.sh
+		#sh /tmp/Upgrade/run_upg.sh
+		/tmp/Upgrade/system_upgrade.sh
 	else
-		echo "no app image present"
-	fi
 
-	if [[ -e /tmp/Upgrade/rootfs ]]; then
-		echo "found rootfs image, flashing"
-		flashcp -v /tmp/Upgrade/rootfs /dev/mtd2
-		/opt/wz_mini/bin/busybox sync
-	else
-		echo "no root image present"
+		if [[ -e /tmp/Upgrade/app ]]; then
+			echo "found app image, flashing"
+			flashcp -v /tmp/Upgrade/app /dev/mtd3
+			/opt/wz_mini/bin/busybox sync
+		else
+			echo "no kernel image present"
+		fi
+
+		if [[ -e /tmp/Upgrade/kernel ]]; then
+			echo "found kernel image, flashing"
+			flashcp -v /tmp/Upgrade/kernel /dev/mtd1
+			/opt/wz_mini/bin/busybox sync
+		else
+			echo "no app image present"
+		fi
+
+		if [[ -e /tmp/Upgrade/rootfs ]]; then
+			echo "found rootfs image, flashing"
+			flashcp -v /tmp/Upgrade/rootfs /dev/mtd2
+			/opt/wz_mini/bin/busybox sync
+		else
+			echo "no root image present"
 	fi
+
 	/opt/wz_mini/bin/busybox sync
 	/opt/wz_mini/bin/busybox sync
 	sleep 5
+	echo reboot
 	/opt/wz_mini/bin/busybox reboot
 
+	fi
+
 	fi;;
   *) echo "This script must be run from inotifyd";;
 esac

+ 29 - 0
v2_install/compile_image.sh

@@ -0,0 +1,29 @@
+#!/bin/bash
+
+DL_URL=$(wget --user-agent="Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)" -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 "download latest firmware"
+wget $DL_URL -P ./v2_ro/
+
+echo "extracting firmware to workdir"
+unzip v2_ro/demo_4.9.8.1002.zip -d ./v2_ro/
+
+echo "create firmware dir"
+mkdir v2_ro/tmp_dir
+
+echo "unpack stock firmware"
+./fw_tool.sh unpack v2_ro/demo_4.9.8.1002.bin v2_ro/tmp_dir
+
+echo "replace kernel"
+cp v2_kernel.bin v2_ro/tmp_dir/kernel.bin
+
+echo "pack firmware with new kernel"
+./fw_tool.sh pack v2_ro/tmp_dir/ demo.bin
+
+echo "md5sum is:  " `md5sum demo.bin`
+rm -rf v2_ro
+
+echo "demo.bin ready.  Please copy demo.bin to your memory card"

+ 38 - 0
v2_install/fw_tool.sh

@@ -0,0 +1,38 @@
+#!/bin/sh
+
+#custom for V2
+
+ACTION=$1
+
+KERNEL_OFFSET=$((64))
+ROOTFS_OFFSET=$((2097216))
+DRIVER_OFFSET=$((5570624))
+APPFS_OFFSET=$((6225984))
+
+if [ "$ACTION" = "unpack" ]; then
+    DEMO_IN=$2
+    OUT_DIR=$3
+
+    dd if=${DEMO_IN} of=$OUT_DIR/kernel.bin skip=$KERNEL_OFFSET count=$(($ROOTFS_OFFSET-$KERNEL_OFFSET)) bs=1
+    md5sum $OUT_DIR/kernel.bin
+
+    dd if=${DEMO_IN} of=$OUT_DIR/rootfs.bin skip=$ROOTFS_OFFSET count=$(($DRIVER_OFFSET-$ROOTFS_OFFSET)) bs=1
+    md5sum $OUT_DIR/rootfs.bin
+    dd if=${DEMO_IN} of=$OUT_DIR/driver.bin skip=$DRIVER_OFFSET count=$(($APPFS_OFFSET-$DRIVER_OFFSET)) bs=1
+    md5sum $OUT_DIR/driver.bin
+
+    IMAGE_END=$(($(stat -c %s ${DEMO_IN})))
+    dd if=${DEMO_IN} of=$OUT_DIR/appfs.bin  skip=$APPFS_OFFSET count=$(($IMAGE_END-$APPFS_OFFSET)) bs=1
+    md5sum $OUT_DIR/appfs.bin
+
+elif [ "$ACTION" = "pack" ]; then
+    TMP_DIR=$2
+    DEMO_OUT=$3
+#   need to pad kernel is its smaller than the stock kernel size, 2097152 bytes
+    dd if=/dev/zero of=$TMP_DIR/kernel.bin bs=1 count=1 seek=2097151
+    cat $TMP_DIR/kernel.bin $TMP_DIR/rootfs.bin $TMP_DIR/driver.bin $TMP_DIR/appfs.bin > $TMP_DIR/flash.bin
+    mkimage -A MIPS -O linux -T firmware -C none -a 0 -e 0 -n jz_fw -d $TMP_DIR/flash.bin $DEMO_OUT
+
+else
+    echo "Unknown action '$ACTION'"
+fi

BIN
v2_install/v2_kernel.bin