#!/bin/sh if ! read -r current_device < /etc/trimui_device.txt; then display=$(fbset | grep ^mode | cut -d "\"" -f 2) if [ "$display" = "1280x720-64" ]; then current_device="tsp" else current_device="brick" fi echo -n $current_device >/etc/trimui_device.txt fi read -r last_device </mnt/SDCARD/System/etc/last_device.txt if [ "$current_device" != "$last_device" ]; then echo -n $current_device >/mnt/SDCARD/System/etc/last_device.txt touch /tmp/device_changed fi ################ check min Firmware version required ################ CrossMixFWfile="/mnt/SDCARD/trimui/firmwares/MinFwVersion.txt" Current_FW_Revision=$(grep 'DISTRIB_DESCRIPTION' /etc/openwrt_release | cut -d '.' -f 3) Required_FW_Revision=$(sed -n '2p' "$CrossMixFWfile") echo "Current FW Revision: $Current_FW_Revision" echo "Required FW Revision: $Required_FW_Revision" if [ -z "$Current_FW_Revision" ] || [ -z "$Required_FW_Revision" ]; then echo "Firmware check not possible." else if [ "$Current_FW_Revision" -lt "$Required_FW_Revision" ]; then pgrep -f /usr/trimui/bin/trimui_inputd >/dev/null || /usr/trimui/bin/trimui_inputd & # we need input Current_FW_Version="$(cat /etc/version)" Required_FW_Version=$(sed -n '1p' "$CrossMixFWfile") Echo "Current firmware ($Current_FW_Version - $Current_FW_Revision) must be updated to $Required_FW_Version - $Required_FW_Revision to support CrossMix OS v$version." # Install new busybox from PortMaster, credits : https://github.com/kloptops/TRIMUI_EX Current_busybox_crc=$(crc32 "/bin/busybox" | awk '{print $1}') target_busybox_crc=$(crc32 "/mnt/SDCARD/System/usr/trimui/scripts/busybox" | awk '{print $1}') if [ "$Current_busybox_crc" != "$target_busybox_crc" ]; then # make some place rm -rf /usr/trimui/apps/zformatter_fat32/ rm -rf /usr/trimui/res/sound/bgm2.mp3 swapoff -a rm -rf /swapfile cp "/mnt/SDCARD/trimui/res/skin/bg.png" "/usr/trimui/res/skin/" cp -vf /bin/busybox /mnt/SDCARD/System/bin/busybox.bak /mnt/SDCARD/System/bin/rsync /mnt/SDCARD/System/usr/trimui/scripts/busybox /bin/busybox ln -vs "/bin/busybox" "/bin/bash" # Create missing busybox commands for cmd in $(busybox --list); do # Skip if command already exists or if it's not suitable for linking if [ -e "/bin/$cmd" ] || [ -e "/usr/bin/$cmd" ] || [ "$cmd" = "sh" ]; then continue fi # Create a symbolic link ln -vs "/bin/busybox" "/usr/bin/$cmd" done # Fix weird libSDL location for libname in /usr/trimui/lib/libSDL*; do linkname="/usr/lib/$(basename "$libname")" if [ -e "$linkname" ]; then continue fi ln -vs "$libname" "$linkname" done fi sync button=$(/mnt/SDCARD/System/usr/trimui/scripts/infoscreen.sh -i "/mnt/SDCARD/trimui/firmwares/FW_Informations.png" -m "Current FW version: $Current_FW_Version - $Current_FW_Revision Required FW version: $Required_FW_Version - $Required_FW_Revision" -fs 28 -k "A") button=$(/mnt/SDCARD/System/usr/trimui/scripts/infoscreen.sh -i "/mnt/SDCARD/trimui/firmwares/FW_Update_Instructions.png" -k "A B") if [ "$button" = "A" ]; then /mnt/SDCARD/System/usr/trimui/scripts/infoscreen.sh -i "/mnt/SDCARD/trimui/firmwares/FW_Copy.png" -m "Please wait, copying Firmware v$Required_FW_Version - $Required_FW_Revision..." FIRMWARE_PATH="/mnt/SDCARD/trimui/firmwares/trimui_tg5040_20240413_v1.0.4_hotfix6.7z" FIRMWARE_FILE="trimui_tg5040.awimg" /mnt/SDCARD/System/bin/7zz x "$FIRMWARE_PATH" -o"/mnt/SDCARD" -y # cp "/mnt/SDCARD/trimui/firmwares/1.0.4 hotfix - 20240413.awimg" "/mnt/SDCARD/trimui_tg5040.awimg" sync sync # Extract CRC from the 7z archive ARCHIVE_CRC=$(/mnt/SDCARD/System/bin/7zz l "$FIRMWARE_PATH" -slt "$FIRMWARE_FILE" | grep "CRC = " | awk '{print $3}' | tr 'a-f' 'A-F') # Calculate CRC of the extracted file EXTRACTED_CRC=$(crc32 "/mnt/SDCARD/trimui_tg5040.awimg" | awk '{print $1}' | tr 'a-f' 'A-F') # Compare the CRC values if [ "$ARCHIVE_CRC" == "$EXTRACTED_CRC" ]; then echo "FW CRC check passed: $EXTRACTED_CRC" else echo "CRC check failed: Archive CRC = $ARCHIVE_CRC, Extracted CRC = $EXTRACTED_CRC" /mnt/SDCARD/System/usr/trimui/scripts/infoscreen.sh -i bg-exit.png -m "Firmware CRC check has failed, canceling update." -k A fi sleep 1 sync poweroff sleep 30 exit else rm -f "/mnt/SDCARD/trimui_tg5040.awimg" fi else echo "Firmware version $Current_FW_Revision OK." rm -f "/mnt/SDCARD/trimui_tg5040.awimg" fi fi ################ check if a CrossMix-OS update is available ################ # Set PATH and library path PATH="/mnt/SDCARD/System/bin:/mnt/SDCARD/System/usr/trimui/scripts/:$PATH" export LD_LIBRARY_PATH="/mnt/SDCARD/System/lib:/usr/trimui/lib:$LD_LIBRARY_PATH" # Find the update file UPDATE_FILE=$(find /mnt/SDCARD -maxdepth 1 -name "CrossMix-OS_v*.zip" -print -quit) if [ -n "$UPDATE_FILE" ]; then /usr/trimui/bin/trimui_inputd & # we need input echo "CrossMix-OS install file found: $UPDATE_FILE" initial_version=$(cat /mnt/SDCARD/System/usr/trimui/crossmix-version.txt) update_version=$(echo "$UPDATE_FILE" | awk -F'_v|\.zip' '{print $2}') # Compare the versions if [ "$(echo "$update_version" | tr -d '.')" -gt "$(echo "$initial_version" | tr -d '.')" ]; then echo "The CrossMix update file (v$update_version) is greater than the current version installed ($initial_version)." minspace=$((20 * 1024)) rootfs_space=$(df / | awk 'NR==2 {print $4}') if [ "$rootfs_space" -lt "$minspace" ]; then echo "Error: Available space on internal storage is less than 20 MB" infoscreen.sh -m "CrossMix-OS update v$update_version found. Not enough space on internal storage to update." -k "A B START MENU" -fs 30 exit 1 else echo "Available space on / is sufficient: ${rootfs_space} KB" fi if [ ! -f "/mnt/SDCARD/trimui/res/crossmix-os/bg-info.png" ] || [ ! -f "/mnt/SDCARD/System/bin/sdl2imgshow" ] || [ ! -f "/mnt/SDCARD/System/usr/trimui/scripts/crossmix_update.sh" ] || [ ! -f "/mnt/SDCARD/System/usr/trimui/scripts/getkey.sh" ] || [ ! -f "/mnt/SDCARD/System/usr/trimui/scripts/common_launcher.sh" ] || [ ! -f "/mnt/SDCARD/System/usr/trimui/scripts/evtest" ]; then echo "One or more required files are missing." /mnt/SDCARD/System/bin/7zz -aoa x "$UPDATE_FILE" \ -o"/mnt/SDCARD" \ -i"!System/bin/*" \ -i"!System/lib/*" \ -i"!System/resources/*" \ -i"!System/usr/trimui/scripts/*" \ -i"!trimui/res/crossmix-os/*" sync fi button=$(infoscreen.sh -m "CrossMix-OS update v$update_version found. Press A to install, B to cancel." -k "A B") if [ "$button" = "A" ]; then /mnt/SDCARD/System/bin/7zz e "$UPDATE_FILE" "System/usr/trimui/scripts/crossmix_update.sh" -o/tmp -y chmod a+x "/tmp/crossmix_update.sh" cp /mnt/SDCARD/System/bin/text_viewer /tmp infoscreen.sh -m "Updating CrossMix to v$update_version" -t 1 pkill -9 preload.sh pkill -9 runtrimui.sh /tmp/text_viewer -s "/tmp/crossmix_update.sh" -f 25 -t " CrossMix-OS Update v$update_version " fi else echo "The CrossMix update version ($update_version) is not greater than the current version ($initial_version)." fi else echo "No CrossMix update file found." fi