¶Ô±ÈÐÂÎļþ |
| | |
| | | #!/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 |