luci-app-advanced-reboot: bugfix for Linksys E4200v2 5414/head
authorStan Grishin <stangri@melmac.net>
Wed, 6 Oct 2021 21:43:55 +0000 (21:43 +0000)
committerStan Grishin <stangri@melmac.net>
Wed, 6 Oct 2021 21:51:59 +0000 (21:51 +0000)
* bugfix for Linksys E4200v2
* backport updates from master

Signed-off-by: Stan Grishin <stangri@melmac.net>
applications/luci-app-advanced-reboot/Makefile
applications/luci-app-advanced-reboot/htdocs/luci-static/resources/view/system/advanced_reboot.js
applications/luci-app-advanced-reboot/root/usr/libexec/rpcd/luci.advanced_reboot
applications/luci-app-advanced-reboot/root/usr/share/advanced-reboot/devices/linksys-e4200v2.json
applications/luci-app-advanced-reboot/root/usr/share/advanced-reboot/devices/linksys-ea7500v1.json [new file with mode: 0644]

index 9f717d5cbc58434be9d81c21ba0bb2c5b19e304e..114d1cd85973b6fb58e10db8960ae14840fcb1ec 100644 (file)
@@ -5,7 +5,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_LICENSE:=GPL-3.0-or-later
 PKG_MAINTAINER:=Stan Grishin <stangri@melmac.net>
-PKG_VERSION:=1.0.0-1
+PKG_VERSION:=1.0.1-3
 
 LUCI_TITLE:=Advanced Linksys Reboot Web UI
 LUCI_URL:=https://docs.openwrt.melmac.net/luci-app-advanced-reboot/
index c9cc20bec069535dc52b4e4e371a1d4b3ce82c8d..482b8e2e91c65e744946fcc7d1db6219b829f62c 100644 (file)
@@ -8,7 +8,8 @@
 return view.extend({
        translateTable: {
                NO_BOARD_NAME : function(args) { return _('Unable to find Device Board Name.')},
-               NO_DUAL_FLAG : function(args) {return _('Unable to find Dual Boot Flag Partition.')},
+               NO_DUAL_FLAG: function (args) { return _('Unable to find Dual Boot Flag Partition.') },
+               NO_DUAL_FLAG_BLOCK: function (args) { return _('The Dual Boot Flag Partition: %s is not a block device.').format(args[0])},
                ERR_SET_DUAL_FLAG : function(args) { return _('Unable to set Dual Boot Flag Partition entry for partition: %s.').format(args[0])},
                NO_FIRM_ENV : function(args) { return _('Unable to obtain firmware environment variable: %s.').format(args[0])},
                ERR_SET_ENV : function(args) { return _('Unable to set firmware environment variable: %s to %s.').format(args[0],args[1])}
@@ -196,7 +197,7 @@ return view.extend({
                if (device_info.error)
                        body.appendChild(E('p', { 'class' : 'alert-message warning'}, _("ERROR: ") + this.translateTable[device_info.error]()));
 
-               body.appendChild(E('h3', device_info.device_name + _(' Partitions')));
+               body.appendChild(E('h3', (device_info.device_name || '') + _(' Partitions')));
                if (device_info.device_name) {
                        var partitions_table = E('table', { 'class': 'table' }, [
                                E('tr', { 'class': 'tr table-titles' }, [
index c5dfd74a18c3e9ef12e93bc856c16f454df07a2b..7ec52a30978bfa99e23a61565f87baaa91cc5beb 100755 (executable)
@@ -1,6 +1,6 @@
 #!/bin/sh
 # Copyright 2017-2020 Stan Grishin (stangri@melmac.net)
-# shellcheck disable=SC2039,SC1091
+# shellcheck disable=SC2039,SC1091,SC3043,SC3057,SC3060
 
 readonly devices_dir="/usr/share/advanced-reboot/devices/"
 
@@ -100,7 +100,7 @@ find_device_data(){
 print_json() { json_init; json_add_string "$1" "$2"; json_dump; json_cleanup; }
 
 obtain_device_info(){
-       local romBoardName p zyxelFlagPartition
+       local romBoardName p zyxelFlagPartition i
        local vendorName deviceName partition1MTD partition2MTD labelOffset
        local bootEnv1 bootEnv1Partition1Value bootEnv1Partition2Value
        local bootEnv2 bootEnv2Partition1Value bootEnv2Partition2Value
@@ -167,15 +167,20 @@ obtain_device_info(){
                        current_partition="$(/usr/sbin/fw_printenv -n "${bootEnv1}")"
                fi
        else
+               for i in '0:dual_flag' '0:DUAL_FLAG'; do
+                       zyxelFlagPartition="$(find_mtd_part "$i" 2>/dev/null)"
+                       [ -n "$zyxelFlagPartition" ] && break
+               done
                if [ -z "$zyxelFlagPartition" ]; then
-                       zyxelFlagPartition="$(find_mtd_part 0:DUAL_FLAG 2>/dev/null)"
-               fi
-               if [ -n "$zyxelFlagPartition" ]; then
-                       current_partition="$(dd if="${zyxelFlagPartition}" bs=1 count=1 2>/dev/null | hexdump -n 1 -e '1/1 "%d"')"
-               else
                        print_json 'error' 'NO_DUAL_FLAG'
                        logger "Unable to find Dual Boot Environment or Dual Boot Flag Partition."
                        return
+               elif [ ! -b "$zyxelFlagPartition" ]; then
+                       print_json 'error' 'NO_DUAL_FLAG_BLOCK'
+                       logger "The Dual Boot Flag Partition: $zyxelFlagPartition is not block device."
+                       return
+               else
+                       current_partition="$(dd if="${zyxelFlagPartition}" bs=1 count=1 2>/dev/null | hexdump -n 1 -e '1/1 "%d"')"
                fi
        fi
 
@@ -202,7 +207,6 @@ obtain_device_info(){
                p2_os="$p2_os (Linux ${p2_version})"
        fi
 
-
        json_init
        json_add_int 'current_partition' "$current_partition"
        json_add_string 'device_name' "$vendorName $deviceName"
@@ -231,7 +235,7 @@ obtain_device_info(){
 }
 
 toggle_boot_partition(){
-       local zyxelFlagPartition zyxelBootFlag zyxelNewBootFlag curEnvSetting newEnvSetting
+       local zyxelFlagPartition zyxelBootFlag zyxelNewBootFlag curEnvSetting newEnvSetting
        local romBoardName p
        local bev1 bev2 bev1p1 bev1p2 bev2p1 bev2p2
        local vendorName deviceName partition1MTD partition2MTD labelOffset
@@ -333,12 +337,17 @@ toggle_boot_partition(){
                json_init
                json_dump; json_cleanup;
        else # NetGear device
+               for i in '0:dual_flag' '0:DUAL_FLAG'; do
+                       zyxelFlagPartition="$(find_mtd_part "$i" 2>/dev/null)"
+                       [ -n "$zyxelFlagPartition" ] && break
+               done
                if [ -z "$zyxelFlagPartition" ]; then
-                       zyxelFlagPartition="$(find_mtd_part 0:DUAL_FLAG 2>/dev/null)"
-               fi
-               if [ -z "$zyxelFlagPartition" ]; then
-                       logger "Unable to find Dual Boot Flag Partition."
                        print_json 'error' 'NO_DUAL_FLAG'
+                       logger "Unable to find Dual Boot Environment or Dual Boot Flag Partition."
+                       return
+               elif [ ! -b "$zyxelFlagPartition" ]; then
+                       print_json 'error' 'NO_DUAL_FLAG_BLOCK'
+                       logger "The Dual Boot Flag Partition: $zyxelFlagPartition is not block device."
                        return
                else
                        zyxelBootFlag="$(dd if="${zyxelFlagPartition}" bs=1 count=1 2>/dev/null | hexdump -n 1 -e '1/1 "%d"')"
index c32aaf8a3c01f910a0e18c61351e5def6896e891..d42319e2ce818647b934419157e1a6779447ca8d 100644 (file)
@@ -1,7 +1,10 @@
 {
        "vendorName": "Linksys",
        "deviceName": "E4200v2",
-       "boardNames": [ "linksys-e4200v2", "linksys,e4200v2" ],
+       "boardNames": [
+               "linksys-e4200v2",
+               "linksys,e4200-v2"
+       ],
        "partition1MTD": "mtd3",
        "partition2MTD": "mtd5",
        "labelOffset": 32,
diff --git a/applications/luci-app-advanced-reboot/root/usr/share/advanced-reboot/devices/linksys-ea7500v1.json b/applications/luci-app-advanced-reboot/root/usr/share/advanced-reboot/devices/linksys-ea7500v1.json
new file mode 100644 (file)
index 0000000..4c68639
--- /dev/null
@@ -0,0 +1,14 @@
+{
+       "vendorName": "Linksys",
+       "deviceName": "EA7500v1",
+       "boardNames": [ "linksys,ea7500-v1" ],
+       "partition1MTD": "mtd13",
+       "partition2MTD": "mtd15",
+       "labelOffset": 32,
+       "bootEnv1": "boot_part",
+       "bootEnv1Partition1Value": 1,
+       "bootEnv1Partition2Value": 2,
+       "bootEnv2": null,
+       "bootEnv2Partition1Value": null,
+       "bootEnv2Partition2Value": null
+}