1. 添加1.8寸屏显示脚本,并添加到app.ini服务列表中
要提交的变更:
新文件: local/app/display
修改: local/default/app.ini
已添加1个文件
已修改1个文件
253 ■■■■■ 文件已修改
local/app/display 250 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
local/default/app.ini 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
local/app/display
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,250 @@
#!/bin/sh
# -------------------------- æ ¸å¿ƒé…ç½®å‚æ•° --------------------------
CONFIG_FILE="/work/config.json"          # ç½‘口配置文件路径
SYS_CONFIG_FILE="/work/sysConfig.json"   # ç³»ç»Ÿé…ç½®æ–‡ä»¶è·¯å¾„
SEND_CMD="/home/test/SendToM4"           # å‘送命令路径
IMAGE_SWITCH_INTERVAL=0.15  # å›¾ç‰‡åˆ‡æ¢é—´éš”(秒)
TEXT_SCENE_INTERVAL=10      # æ–‡æœ¬åœºæ™¯åˆ‡æ¢é—´éš”(秒)
TOTAL_IMAGE_IDS=3           # å›¾ç‰‡ID:0、1、2循环
TOTAL_TEXT_SCENES=3         # æ–‡æœ¬åœºæ™¯ï¼š0、1、2循环
REMOTEPROC_STATE_PATH="/sys/class/remoteproc/remoteproc0/state"  # æ˜¾ç¤ºç¨‹åºçŠ¶æ€è·¯å¾„
# ------------------------------------------------------------------
# åº”用指定的中文十六进制编码
HEX_SYSTEM_RUN_TIME="CFB5CDB3D4CBD0D0CAB1BCE4"  # â€œç³»ç»Ÿè¿è¡Œæ—¶é—´â€
HEX_DAY="CCEC"                                   # â€œå¤©â€
HEX_HOUR="D0A1CAB1"                              # â€œå°æ—¶â€
HEX_SPACE="20"                                   # ç©ºæ ¼çš„十六进制
# ------------------------------------------------------------------
# 1. æ£€æŸ¥å¹¶å¯åŠ¨æ˜¾ç¤ºç¨‹åº
check_and_start_display() {
    # æ£€æŸ¥çŠ¶æ€æ–‡ä»¶æ˜¯å¦å­˜åœ¨
    if [ ! -f "$REMOTEPROC_STATE_PATH" ]; then
        echo "【错误】显示程序状态文件 $REMOTEPROC_STATE_PATH ä¸å­˜åœ¨"
        exit 1
    fi
    # è¯»å–当前状态
    local state=$(cat "$REMOTEPROC_STATE_PATH" | tr -d '[:space:]')  # åŽ»é™¤ç©ºæ ¼å’Œæ¢è¡Œ
    echo "【显示程序状态】当前状态: $state"
    # æ ¹æ®çŠ¶æ€æ‰§è¡Œæ“ä½œ
    if [ "$state" = "offline" ]; then
        echo "【显示程序】未启用,尝试启动..."
        # æ‰§è¡Œå¯åЍ命令
        if ! echo "start" > "$REMOTEPROC_STATE_PATH"; then
            echo "【错误】启动显示程序失败,请检查权限或设备状态"
            exit 1
        fi
        # ç­‰å¾…启动完成(最多等待5秒)
        local wait_count=0
        while [ $wait_count -lt 5 ]; do
            sleep 1
            state=$(cat "$REMOTEPROC_STATE_PATH" | tr -d '[:space:]')
            if [ "$state" = "running" ]; then
                echo "【显示程序】启动成功"
                return 0
            fi
            wait_count=$((wait_count + 1))
        done
        # è¶…时检查
        if [ "$state" != "running" ]; then
            echo "【错误】显示程序启动超时,当前状态: $state"
            exit 1
        fi
    elif [ "$state" = "running" ]; then
        echo "【显示程序】已启动,无需操作"
        return 0
    else
        echo "【错误】显示程序处于未知状态: $state"
        exit 1
    fi
}
# 2. ä¾èµ–检查
check_dependencies() {
    if ! command -v jsoner >/dev/null 2>&1; then
        echo "【错误】未找到 jsoner å‘½ä»¤ï¼Œè¯·å®‰è£…并配置到PATH"
        exit 1
    fi
    if [ ! -f "$CONFIG_FILE" ]; then
        echo "【错误】网口配置文件 $CONFIG_FILE ä¸å­˜åœ¨"
        exit 1
    fi
    if [ ! -f "$SYS_CONFIG_FILE" ]; then
        echo "【错误】系统配置文件 $SYS_CONFIG_FILE ä¸å­˜åœ¨"
        exit 1
    fi
    if [ ! -x "$SEND_CMD" ]; then
        echo "【错误】$SEND_CMD ä¸å¯æ‰§è¡Œï¼Œè¯·æ£€æŸ¥è·¯å¾„或执行 chmod +x $SEND_CMD"
        exit 1
    fi
}
# 3. èŽ·å–å¹¶éªŒè¯ç³»ç»Ÿå¼€å§‹æ—¶é—´ï¼ˆYYYYMMDD)
get_start_time() {
    start_time=$(jsoner -g "$SYS_CONFIG_FILE" usedTime)
    if [ -z "$start_time" ]; then
        echo "【错误】usedTime为空"
        exit 1
    elif [ ${#start_time} -ne 8 ]; then
        echo "【错误】usedTime需8位数字,当前值:$start_time"
        exit 1
    elif ! echo "$start_time" | grep -q '^[0-9][0-9]*$'; then
        echo "【错误】usedTime含非数字字符,当前值:$start_time"
        exit 1
    fi
    echo "$start_time"
}
# 4. è®¡ç®—运行时间(返回十六进制拼接结果,添加空格分隔)
calculate_run_time_hex() {
    start_time="$1"
    start_date="${start_time:0:4}-${start_time:4:2}-${start_time:6:2}"
    # è½¬æ¢å¼€å§‹æ—¶é—´ä¸ºæ—¶é—´æˆ³
    start_timestamp=$(date -d "$start_date" +%s 2>/dev/null)
    if [ $? -ne 0 ]; then
        echo "CAE4BCFEB8F6CAAEDC8B1"  # æ—¶é—´æ ¼å¼é”™è¯¯çš„十六进制
        return 1
    fi
    # è®¡ç®—运行秒数
    current_timestamp=$(date +%s)
    run_seconds=$((current_timestamp - start_timestamp))
    run_seconds=$((run_seconds < 0 ? 0 : run_seconds))
    # è½¬æ¢ä¸ºå¤©å’Œå°æ—¶
    days=$((run_seconds / 86400))
    remaining_seconds=$((run_seconds % 86400))
    hours=$((remaining_seconds / 3600))
    # è½¬æ¢æ•°å­—为十六进制
    days_hex=$(echo -n "$days" | xxd -p | tr -d '\n')
    hours_hex=$(echo -n "$hours" | xxd -p | tr -d '\n')
    # æ‹¼æŽ¥æ ¼å¼ï¼šå¤©æ•° + ç©ºæ ¼ + å¤© + å°æ—¶æ•° + ç©ºæ ¼ + å°æ—¶
    echo "${days_hex}${HEX_SPACE}${HEX_DAY}${HEX_SPACE}${hours_hex}${HEX_SPACE}${HEX_HOUR}"
}
# 5. åˆ‡æ¢åˆ†åŒº3的图片
switch_image() {
    image_id="$1"
    image_id_hex=$(echo -n "$image_id" | xxd -p | tr -d '\n')
    cmd="5345545F42544E5F494D4728332C302C${image_id_hex}293B0D0A"
    $SEND_CMD -x "$cmd" >/dev/null 2>&1
}
# 6. å‘送文本到指定分区(支持直接使用十六进制或动态转换)
send_text() {
    local zone="$1"
    local is_hex="$2"  # 1=直接使用十六进制内容, 0=动态转换文本
    local content="$3"
    # è½¬æ¢åˆ†åŒºå·ä¸ºåå…­è¿›åˆ¶
    local zone_hex=$(echo -n "$zone" | xxd -p | tr -d '\n')
    # å¤„理内容
    local content_hex
    if [ "$is_hex" -eq 1 ]; then
        content_hex="$content"  # ä½¿ç”¨æŒ‡å®šåå…­è¿›åˆ¶
    else
        content_hex=$(echo -n "$content" | xxd -p | tr -d '\n')  # åŠ¨æ€è½¬æ¢
    fi
    # å‘送命令
    local cmd="5345545F54585428${zone_hex}2C27${content_hex}27293B0D0A"
    $SEND_CMD -x "$cmd" >/dev/null 2>&1
}
# 7. åŠ è½½ç½‘ç»œé…ç½®
load_network_config() {
    IP1=$(jsoner -g "$CONFIG_FILE" eth0.ip)
    MAC1=$(jsoner -g "$CONFIG_FILE" eth0.mac)
    IP2=$(jsoner -g "$CONFIG_FILE" eth1.ip)
    MAC2=$(jsoner -g "$CONFIG_FILE" eth1.mac)
}
# 8. åº”用文本场景
apply_text_scene() {
    local scene="$1"
    local run_time_hex="$2"
    case $scene in
        0)  # åœºæ™¯ä¸€ï¼šLan1信息
            send_text 0 0 "Lan1"
            send_text 1 0 "$IP1"
            send_text 2 0 "$MAC1"
            echo "【文本场景】Lan1 | IP: $IP1 | MAC: $MAC1"
            ;;
        1)  # åœºæ™¯äºŒï¼šLan2信息
            send_text 0 0 "Lan2"
            send_text 1 0 "$IP2"
            send_text 2 0 "$MAC2"
            echo "【文本场景】Lan2 | IP: $IP2 | MAC: $MAC2"
            ;;
        2)  # åœºæ™¯ä¸‰ï¼šç³»ç»Ÿæ—¶é—´ä¿¡æ¯ï¼ˆåˆ†åŒº0显示^_^)
            send_text 0 0 "^_^"                            # åˆ†åŒº0显示^_^
            send_text 1 1 "$HEX_SYSTEM_RUN_TIME"           # ç³»ç»Ÿè¿è¡Œæ—¶é—´ï¼ˆæŒ‡å®šåå…­è¿›åˆ¶ï¼‰
            send_text 2 1 "$run_time_hex"                  # è¿è¡Œæ—¶é—´ï¼ˆå«ç©ºæ ¼åˆ†éš”)
            echo "【文本场景】分区0: ^_^ | è¿è¡Œæ—¶é—´(十六进制): $run_time_hex"
            ;;
    esac
}
# 9. ä¸»å‡½æ•°
main() {
    # å…ˆæ£€æŸ¥å¹¶å¯åŠ¨æ˜¾ç¤ºç¨‹åºï¼ˆåœ¨æ‰€æœ‰åˆå§‹åŒ–æ“ä½œä¹‹å‰ï¼‰
    check_and_start_display
    # å…¶ä»–初始化操作
    check_dependencies
    local start_time=$(get_start_time)
    load_network_config
    local image_id=0
    local text_scene=0
    local loop_count=0
    local text_scene_interval_count=$(echo "scale=0; $TEXT_SCENE_INTERVAL / $IMAGE_SWITCH_INTERVAL" | bc)
    echo "【启动成功】图片间隔: $IMAGE_SWITCH_INTERVAL秒 | æ–‡æœ¬é—´éš”: $TEXT_SCENE_INTERVAL秒"
    echo "【系统开始时间】$start_time(来自 $SYS_CONFIG_FILE)"
    echo "【场景三配置】分区0将显示: ^_^"
    # åˆå§‹åŠ è½½åœºæ™¯
    local run_time_hex=$(calculate_run_time_hex "$start_time")
    apply_text_scene $text_scene "$run_time_hex"
    # ä¸»å¾ªçޝ
    while true; do
        # åˆ‡æ¢å›¾ç‰‡
        switch_image $image_id
        image_id=$(( (image_id + 1) % TOTAL_IMAGE_IDS ))
        # åˆ‡æ¢æ–‡æœ¬åœºæ™¯
        if [ $loop_count -ge $text_scene_interval_count ]; then
            loop_count=0
            run_time_hex=$(calculate_run_time_hex "$start_time")
            text_scene=$(( (text_scene + 1) % TOTAL_TEXT_SCENES ))
            apply_text_scene $text_scene "$run_time_hex"
        else
            loop_count=$((loop_count + 1))
        fi
        sleep $IMAGE_SWITCH_INTERVAL
    done
}
# å¯åŠ¨ç¨‹åº
main
local/default/app.ini
@@ -9,5 +9,6 @@
mul=MulticastIP
lk=linkage
rtsp=rtsp
export applist=" $main $dc $net $gate $svr $lk $mul start_snmpd"
dp=display
export applist=" $main $dc $net $gate $svr  $mul $dp"