diff --git a/fbsize/Makefile b/fbsize/Makefile new file mode 100755 index 000000000..ecf64ec7e --- /dev/null +++ b/fbsize/Makefile @@ -0,0 +1,9 @@ +CFLAGS = -Wall -pedantic + +all: fbsize + +fbsize: main.o + cc -o $@ $^ + +clean: + rm -f fbsize *.o diff --git a/fbsize/fbsize b/fbsize/fbsize new file mode 100755 index 000000000..1a6c1e72f Binary files /dev/null and b/fbsize/fbsize differ diff --git a/fbsize/main.c b/fbsize/main.c new file mode 100644 index 000000000..2d19597f7 --- /dev/null +++ b/fbsize/main.c @@ -0,0 +1,99 @@ +/* + * Copyright (C) 2022 Ing + * + * This is free software, licensed under the MIT License. + * See /LICENSE for more information. + * + */ + +#include +#include +#include +#include +#include +#include +#include + +#define VERSION "1.0" + +int main(int argc, char *argv[]) +{ + int c; + + while (1) + { + int option_index = 0; + static struct option long_options[] = { + {"resolution", required_argument, 0, 'r'}, + {"buffer", required_argument, 0, 'b'}, + {"offset", required_argument, 0, 'o'}, + {"screen", required_argument, 0, 's'}, + {"help", no_argument, 0, 'h'}, + {0, 0, 0, 0}}; + + c = getopt_long(argc, argv, "r:b:o:s:h", long_options, &option_index); + if (c == -1) + break; + + switch (c) + { + case 'r': + case 'b': + case 'o': + case 's': + int fbfd = 0; + struct fb_var_screeninfo var_info; + + // 打开设备文件 + fbfd = open(optarg, O_RDWR); + if (fbfd == -1) + { + perror("Error: cannot open framebuffer device"); + return 1; + } + + // 获取屏幕参数 + if (ioctl(fbfd, FBIOGET_VSCREENINFO, &var_info) == -1) + { + perror("Error reading variable information"); + return 1; + } + + if (c == 'r') + { + printf("%dx%d\n", var_info.xres, var_info.yres); + } + else if (c == 'b') + { + printf("%dx%d\n", var_info.xres_virtual, var_info.yres_virtual); + } + else if (c == 'o') + { + printf("%dx%d\n", var_info.xoffset, var_info.yoffset); + } + else if (c == 's') + { + printf("%dx%d\n", var_info.height, var_info.width); + } + + // 关闭设备文件 + close(fbfd); + break; + case 'h': + case '?': + printf("Usage: %s [options] \n", argv[0]); + printf("Version: %s\n", VERSION); + printf("Options:\n"); + printf(" -r, --resolution Display the resolution of the screen\n"); + printf(" -b, --buffer Display the resolution of the framebuffer\n"); + printf(" -o, --offset Display the offset of the screen\n"); + printf(" -s, --screen Display the size of the screen\n"); + printf(" -h, --help Display this help message\n"); + return 0; + default: + return 1; + } + } + + return 0; +} \ No newline at end of file diff --git a/files/initrd/opt/arc/arc.sh b/files/initrd/opt/arc/arc.sh index c973ca4ac..841652b5c 100755 --- a/files/initrd/opt/arc/arc.sh +++ b/files/initrd/opt/arc/arc.sh @@ -616,6 +616,7 @@ function make() { --infobox "Reading Models..." 3 20 # Read Model Config MODEL="$(readConfigKey "model" "${USER_CONFIG_FILE}")" + MODELID="$(readConfigKey "modelid" "${USER_CONFIG_FILE}")" PLATFORM="$(readConfigKey "platform" "${USER_CONFIG_FILE}")" PRODUCTVER="$(readConfigKey "productver" "${USER_CONFIG_FILE}")" DT="$(readConfigKey "platforms.${PLATFORM}.dt" "${P_FILE}")" @@ -639,8 +640,8 @@ function make() { --infobox "Get PAT Data from Syno..." 3 30 idx=0 while [ ${idx} -le 5 ]; do # Loop 5 times, if successful, break - PAT_URL="$(curl -m 5 -skL "https://www.synology.com/api/support/findDownloadInfo?lang=en-us&product=${MODEL/+/%2B}&major=${PRODUCTVER%%.*}&minor=${PRODUCTVER##*.}" | jq -r '.info.system.detail[0].items[0].files[0].url')" - PAT_HASH="$(curl -m 5 -skL "https://www.synology.com/api/support/findDownloadInfo?lang=en-us&product=${MODEL/+/%2B}&major=${PRODUCTVER%%.*}&minor=${PRODUCTVER##*.}" | jq -r '.info.system.detail[0].items[0].files[0].checksum')" + PAT_URL="$(curl -m 5 -skL "https://www.synology.com/api/support/findDownloadInfo?lang=en-us&product=${MODELID/+/%2B}&major=${PRODUCTVER%%.*}&minor=${PRODUCTVER##*.}" | jq -r '.info.system.detail[0].items[0].files[0].url')" + PAT_HASH="$(curl -m 5 -skL "https://www.synology.com/api/support/findDownloadInfo?lang=en-us&product=${MODELID/+/%2B}&major=${PRODUCTVER%%.*}&minor=${PRODUCTVER##*.}" | jq -r '.info.system.detail[0].items[0].files[0].checksum')" PAT_URL=${PAT_URL%%\?*} if [[ -n "${PAT_URL}" && -n "${PAT_HASH}" ]]; then break @@ -653,8 +654,8 @@ function make() { --infobox "Syno Connection failed,\ntry to get from Github..." 4 30 idx=0 while [ ${idx} -le 3 ]; do # Loop 3 times, if successful, break - PAT_URL="$(curl -m 5 -skL "https://raw.githubusercontent.com/AuxXxilium/arc-dsm/main/dsm/${MODEL/+/%2B}/${PRODUCTVER%%.*}.${PRODUCTVER##*.}/pat_url")" - PAT_HASH="$(curl -m 5 -skL "https://raw.githubusercontent.com/AuxXxilium/arc-dsm/main/dsm/${MODEL/+/%2B}/${PRODUCTVER%%.*}.${PRODUCTVER##*.}/pat_hash")" + PAT_URL="$(curl -m 5 -skL "https://raw.githubusercontent.com/AuxXxilium/arc-dsm/main/dsm/${MODELID/+/%2B}/${PRODUCTVER%%.*}.${PRODUCTVER##*.}/pat_url")" + PAT_HASH="$(curl -m 5 -skL "https://raw.githubusercontent.com/AuxXxilium/arc-dsm/main/dsm/${MODELID/+/%2B}/${PRODUCTVER%%.*}.${PRODUCTVER##*.}/pat_hash")" PAT_URL=${PAT_URL%%\?*} if [[ -n "${PAT_URL}" && -n "${PAT_HASH}" ]]; then break @@ -701,7 +702,7 @@ function make() { # Check for existing Files DSM_FILE="${UNTAR_PAT_PATH}/${PAT_HASH}.tar" # Get new Files - DSM_URL="https://raw.githubusercontent.com/AuxXxilium/arc-dsm/main/files/${MODEL/+/%2B}/${PRODUCTVER}/${PAT_HASH}.tar" + DSM_URL="https://raw.githubusercontent.com/AuxXxilium/arc-dsm/main/files/${MODELID/+/%2B}/${PRODUCTVER}/${PAT_HASH}.tar" STATUS=$(curl --insecure -s -w "%{http_code}" -L "${DSM_URL}" -o "${DSM_FILE}") if [[ $? -ne 0 || ${STATUS} -ne 200 ]]; then dialog --backtitle "$(backtitle)" --title "DSM Download" --aspect 18 \