diff --git a/.github/workflows/master.yml b/.github/workflows/master.yml index b8b27e9..f5b9b46 100644 --- a/.github/workflows/master.yml +++ b/.github/workflows/master.yml @@ -88,6 +88,9 @@ jobs: - t31_ultimate_gcraftsman-gca50 - t31_lite_zte-k540 + # APFPV + - ssc338q_apfpv + # FPV - hi3516ev200_fpv - hi3516ev300_fpv @@ -100,7 +103,6 @@ jobs: - ssc378qe_fpv # Ruby - # - gk7205v200_rubyfpv_generic - ssc30kq_rubyfpv_generic - ssc338q_rubyfpv_generic - ssc338q_rubyfpv_thinker_internal_wifi diff --git a/devices/ssc338q_apfpv/br-ext-chip-sigmastar/configs/ssc338q_apfpv_defconfig b/devices/ssc338q_apfpv/br-ext-chip-sigmastar/configs/ssc338q_apfpv_defconfig new file mode 100644 index 0000000..6e1336a --- /dev/null +++ b/devices/ssc338q_apfpv/br-ext-chip-sigmastar/configs/ssc338q_apfpv_defconfig @@ -0,0 +1,71 @@ +# Architecture +BR2_arm=y +BR2_cortex_a7=y +BR2_ARM_FPU_NEON_VFPV4=y +BR2_ARM_INSTRUCTIONS_THUMB2=y + +# Toolchain +BR2_TOOLCHAIN_EXTERNAL=y +BR2_TOOLCHAIN_EXTERNAL_CUSTOM=y +BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD=y +BR2_TOOLCHAIN_EXTERNAL_URL="https://github.com/openipc/firmware/releases/download/$(OPENIPC_TOOLCHAIN).tgz" +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX="arm-openipc-linux-gnueabihf" +BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_9=y +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC=y +# BR2_TOOLCHAIN_EXTERNAL_INET_RPC is not set +BR2_TOOLCHAIN_EXTERNAL_CXX=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="https://github.com/openipc/linux/archive/$(OPENIPC_KERNEL).tar.gz" +BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(EXTERNAL_VENDOR)/board/$(OPENIPC_SOC_FAMILY)/infinity6e-ssc012b.config" +BR2_LINUX_KERNEL_UIMAGE=y +BR2_LINUX_KERNEL_XZ=y + +# Filesystem +BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL)/package/busybox/busybox.config" +BR2_PACKAGE_EXFATPROGS=y +BR2_PACKAGE_UBOOT_TOOLS=y +BR2_PACKAGE_ZLIB=y +# BR2_PACKAGE_IFUPDOWN_SCRIPTS is not set +BR2_PACKAGE_IW=y +BR2_PACKAGE_WPA_SUPPLICANT=y +BR2_PACKAGE_WPA_SUPPLICANT_AP_SUPPORT=y +BR2_PACKAGE_WPA_SUPPLICANT_CLI=y +BR2_PACKAGE_WPA_SUPPLICANT_PASSPHRASE=y +BR2_TARGET_ROOTFS_CPIO=y +BR2_TARGET_ROOTFS_SQUASHFS=y +BR2_TARGET_ROOTFS_SQUASHFS4_XZ=y + +# OpenIPC +BR2_OPENIPC_SOC_VENDOR="sigmastar" +BR2_OPENIPC_SOC_MODEL="ssc338q" +BR2_OPENIPC_SOC_FAMILY="infinity6e" +BR2_OPENIPC_VARIANT="apfpv" +BR2_OPENIPC_FLASH_SIZE="16" + +# Packages +BR2_PACKAGE_DROPBEAR_OPENIPC=y +BR2_PACKAGE_EXFAT_OPENIPC=y +BR2_PACKAGE_IPCTOOL=y +BR2_PACKAGE_JSONFILTER=y +BR2_PACKAGE_LIBCURL_OPENIPC=y +BR2_PACKAGE_LIBCURL_OPENIPC_CURL=y +# BR2_PACKAGE_LIBCURL_OPENIPC_PROXY_SUPPORT is not set +# BR2_PACKAGE_LIBCURL_OPENIPC_COOKIES_SUPPORT is not set +# BR2_PACKAGE_LIBCURL_OPENIPC_EXTRA_PROTOCOLS_FEATURES is not set +BR2_PACKAGE_LIBEVENT_OPENIPC=y +BR2_PACKAGE_LIBOGG_OPENIPC=y +BR2_PACKAGE_MAJESTIC_WEBUI=y +BR2_PACKAGE_MAJESTIC=y +BR2_PACKAGE_MBEDTLS_OPENIPC=y +BR2_PACKAGE_MSPOSD=y +BR2_PACKAGE_OPUS_OPENIPC=y +BR2_PACKAGE_OPUS_OPENIPC_FIXED_POINT=y +BR2_PACKAGE_RTL8812AU_OPENIPC=y +BR2_PACKAGE_RTL8733BU_OPENIPC=y +BR2_PACKAGE_SIGMASTAR_OSDRV_INFINITY6E=y +BR2_PACKAGE_VTUND_OPENIPC=y +BR2_PACKAGE_YAML_CLI=y diff --git a/devices/ssc338q_apfpv/general/overlay/etc/init.d/S40network b/devices/ssc338q_apfpv/general/overlay/etc/init.d/S40network new file mode 100755 index 0000000..19f7be1 --- /dev/null +++ b/devices/ssc338q_apfpv/general/overlay/etc/init.d/S40network @@ -0,0 +1,22 @@ +#!/bin/sh + +case "$1" in + start) + echo "Starting network..." + ifup lo + ifup eth0 + ifup wlan0 + ;; + + stop) + echo "Stopping network..." + ifdown lo + ifdown -f eth0 + ifdown -f wlan0 + ;; + + *) + echo "Usage: $0 {start|stop}" + exit 1 + ;; +esac diff --git a/devices/ssc338q_apfpv/general/overlay/etc/init.d/S99msposd b/devices/ssc338q_apfpv/general/overlay/etc/init.d/S99msposd new file mode 100755 index 0000000..b143b20 --- /dev/null +++ b/devices/ssc338q_apfpv/general/overlay/etc/init.d/S99msposd @@ -0,0 +1,21 @@ +#!/bin/sh + +case "$1" in + start) + echo "Starting msposd..." + devmem 0x1F207890 16 0x8 + sleep 1 + size=$(curl -s localhost/api/v1/config.json | jsonfilter -qe "@.video0.size") + msposd -b 115200 -c 8 -r 20 -m /dev/ttyS2 -z "$size" > /dev/null & + ;; + + stop) + echo "Stopping msposd..." + killall -q msposd + ;; + + *) + echo "Usage: $0 {start|stop}" + exit 1 + ;; +esac diff --git a/devices/ssc338q_apfpv/general/overlay/etc/network/interfaces.d/wlan0 b/devices/ssc338q_apfpv/general/overlay/etc/network/interfaces.d/wlan0 new file mode 100644 index 0000000..72c89c9 --- /dev/null +++ b/devices/ssc338q_apfpv/general/overlay/etc/network/interfaces.d/wlan0 @@ -0,0 +1,7 @@ +iface wlan0 inet static + address 192.168.0.1 + gateway 192.168.0.1 + netmask 255.255.255.0 + pre-up adapter setup + post-up adapter start + post-down adapter stop diff --git a/devices/ssc338q_apfpv/general/overlay/etc/udhcpd.conf b/devices/ssc338q_apfpv/general/overlay/etc/udhcpd.conf new file mode 100644 index 0000000..d6d8924 --- /dev/null +++ b/devices/ssc338q_apfpv/general/overlay/etc/udhcpd.conf @@ -0,0 +1,6 @@ +interface wlan0 +start 192.168.0.10 +end 192.168.0.15 +opt dns 192.168.0.1 +opt router 192.168.0.1 +opt subnet 255.255.255.0 diff --git a/devices/ssc338q_apfpv/general/overlay/usr/bin/adapter b/devices/ssc338q_apfpv/general/overlay/usr/bin/adapter new file mode 100755 index 0000000..8b408a1 --- /dev/null +++ b/devices/ssc338q_apfpv/general/overlay/usr/bin/adapter @@ -0,0 +1,60 @@ +#!/bin/sh + +case "$1" in + setup) + for card in $(lsusb | awk '{print $6}' | uniq); do + case "$card" in + "0bda:8812" | "0bda:881a" | "0b05:17d2" | "2357:0101" | "2604:0012") + driver=88XXau + ;; + + "0bda:a81a") + driver=8812eu + ;; + + "0bda:f72b" | "0bda:b733") + driver=8733bu + ;; + esac + done + + if [ -z "$driver" ]; then + echo "Wireless module not detected!" + exit 1 + fi + + echo "Detected driver: $driver" + [ -e /sys/class/net/wlan0 ] && return + + if [ "$driver" != "88XXau" ]; then + opt1="rtw_tx_pwr_by_rate=0" + opt2="rtw_tx_pwr_lmt_enable=0" + fi + + modprobe "$driver" "$opt1" "$opt2" + sleep 3 + + if ! ifconfig wlan0 up; then + echo "Wireless driver not found!" + exit 1 + fi + ;; + + start) + ssid=$(fw_printenv -n wlanssid || echo OpenIPC) + pass=$(fw_printenv -n wlanpass || echo 12345678) + wpa_passphrase "$ssid" "$pass" > /tmp/wpa_supplicant.conf + sed -i '2i \\tmode=2' /tmp/wpa_supplicant.conf + wpa_supplicant -B -i wlan0 -D nl80211 -c /tmp/wpa_supplicant.conf + udhcpd -S + ;; + + stop) + killall -q udhcpd wpa_supplicant + ;; + + *) + echo "Usage: $0 {setup|start|stop}" + exit 1 + ;; +esac diff --git a/devices/ssc338q_apfpv/general/overlay/usr/share/openipc/customizer.sh b/devices/ssc338q_apfpv/general/overlay/usr/share/openipc/customizer.sh new file mode 100644 index 0000000..00d4553 --- /dev/null +++ b/devices/ssc338q_apfpv/general/overlay/usr/share/openipc/customizer.sh @@ -0,0 +1,8 @@ +#!/bin/sh +cli -s .isp.exposure 10 +cli -s .video0.fps 90 +cli -s .video0.bitrate 8192 +cli -s .video0.codec h265 +cli -s .video0.rcMode cbr +cli -s .outgoing.enabled true +cli -s .outgoing.server udp://192.168.0.10:5600