ar71xx: Add TP-Link Pharos v2 board detection
Add support for detecting TP-Link Pharos v2 boards. They use different format in product-info partition than v1 boards. Code was written mostly by Alexander Couzens <lynxis@fe80.eu> Signed-off-by: Robert Marko <robimarko@gmail.com> Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
This commit is contained in:
		 Adrian Schmutzler
					Adrian Schmutzler
				
			
				
					committed by
					
						 Matthias Schiffer
						Matthias Schiffer
					
				
			
			
				
	
			
			
			 Matthias Schiffer
						Matthias Schiffer
					
				
			
						parent
						
							65c05301c2
						
					
				
				
					commit
					2524febf79
				
			| @@ -371,7 +371,7 @@ tplink_pharos_get_model_string() { | |||||||
| } | } | ||||||
|  |  | ||||||
| tplink_pharos_board_detect() { | tplink_pharos_board_detect() { | ||||||
| 	local model_string="$(tplink_pharos_get_model_string | tr -d '\r')" | 	local model_string="$1" | ||||||
| 	local oIFS="$IFS"; IFS=":"; set -- $model_string; IFS="$oIFS" | 	local oIFS="$IFS"; IFS=":"; set -- $model_string; IFS="$oIFS" | ||||||
|  |  | ||||||
| 	local model="${1%%\(*}" | 	local model="${1%%\(*}" | ||||||
| @@ -379,6 +379,14 @@ tplink_pharos_board_detect() { | |||||||
| 	AR71XX_MODEL="TP-Link $model v$2" | 	AR71XX_MODEL="TP-Link $model v$2" | ||||||
| } | } | ||||||
|  |  | ||||||
|  | tplink_pharos_v2_get_model_string() { | ||||||
|  | 	local part | ||||||
|  | 	part=$(find_mtd_part 'product-info') | ||||||
|  | 	[ -z "$part" ] && return 1 | ||||||
|  |  | ||||||
|  | 	dd if=$part bs=1 skip=4360 count=64 2>/dev/null | tr -d '\r\0' | head -n 1 | ||||||
|  | } | ||||||
|  |  | ||||||
| ar71xx_board_detect() { | ar71xx_board_detect() { | ||||||
| 	local machine | 	local machine | ||||||
| 	local name | 	local name | ||||||
| @@ -563,14 +571,18 @@ ar71xx_board_detect() { | |||||||
| 		;; | 		;; | ||||||
| 	*"CPE210/220") | 	*"CPE210/220") | ||||||
| 		name="cpe210" | 		name="cpe210" | ||||||
| 		tplink_pharos_board_detect | 		tplink_pharos_board_detect "$(tplink_pharos_get_model_string | tr -d '\r')" | ||||||
|  | 		;; | ||||||
|  | 	*"CPE210 v2") | ||||||
|  | 		name="cpe210-v2" | ||||||
|  | 		tplink_pharos_board_detect "$(tplink_pharos_v2_get_model_string)" | ||||||
| 		;; | 		;; | ||||||
| 	*"CPE505N") | 	*"CPE505N") | ||||||
| 		name="cpe505n" | 		name="cpe505n" | ||||||
| 		;; | 		;; | ||||||
| 	*"CPE510/520") | 	*"CPE510/520") | ||||||
| 		name="cpe510" | 		name="cpe510" | ||||||
| 		tplink_pharos_board_detect | 		tplink_pharos_board_detect "$(tplink_pharos_get_model_string | tr -d '\r')" | ||||||
| 		;; | 		;; | ||||||
| 	*"CPE830") | 	*"CPE830") | ||||||
| 		name="cpe830" | 		name="cpe830" | ||||||
| @@ -671,7 +683,7 @@ ar71xx_board_detect() { | |||||||
| 		;; | 		;; | ||||||
| 	*"EAP120") | 	*"EAP120") | ||||||
| 		name="eap120" | 		name="eap120" | ||||||
| 		tplink_pharos_board_detect | 		tplink_pharos_board_detect "$(tplink_pharos_get_model_string | tr -d '\r')" | ||||||
| 		;; | 		;; | ||||||
| 	*"EAP300 v2") | 	*"EAP300 v2") | ||||||
| 		name="eap300v2" | 		name="eap300v2" | ||||||
| @@ -1370,11 +1382,11 @@ ar71xx_board_detect() { | |||||||
| 		;; | 		;; | ||||||
| 	*"WBS210") | 	*"WBS210") | ||||||
| 		name="wbs210" | 		name="wbs210" | ||||||
| 		tplink_pharos_board_detect | 		tplink_pharos_board_detect "$(tplink_pharos_get_model_string | tr -d '\r')" | ||||||
| 		;; | 		;; | ||||||
| 	*"WBS510") | 	*"WBS510") | ||||||
| 		name="wbs510" | 		name="wbs510" | ||||||
| 		tplink_pharos_board_detect | 		tplink_pharos_board_detect "$(tplink_pharos_get_model_string | tr -d '\r')" | ||||||
| 		;; | 		;; | ||||||
| 	"WeIO"*) | 	"WeIO"*) | ||||||
| 		name="weio" | 		name="weio" | ||||||
|   | |||||||
| @@ -97,10 +97,11 @@ tplink_pharos_check_support_list() { | |||||||
| 	local image="$1" | 	local image="$1" | ||||||
| 	local offset="$2" | 	local offset="$2" | ||||||
| 	local model="$3" | 	local model="$3" | ||||||
|  | 	local trargs="$4" | ||||||
|  |  | ||||||
| 	# Here $image is given to dd directly instead of using get_image; | 	# Here $image is given to dd directly instead of using get_image; | ||||||
| 	# otherwise the skip will take almost a second (as dd can't seek) | 	# otherwise the skip will take almost a second (as dd can't seek) | ||||||
| 	dd if="$image" bs=1 skip=$offset count=1024 2>/dev/null | ( | 	dd if="$image" bs=1 skip=$offset count=1024 2>/dev/null | tr -d "$trargs" | ( | ||||||
| 		while IFS= read -r line; do | 		while IFS= read -r line; do | ||||||
| 			[ "$line" = "$model" ] && exit 0 | 			[ "$line" = "$model" ] && exit 0 | ||||||
| 		done | 		done | ||||||
| @@ -110,17 +111,19 @@ tplink_pharos_check_support_list() { | |||||||
| } | } | ||||||
|  |  | ||||||
| tplink_pharos_check_image() { | tplink_pharos_check_image() { | ||||||
| 	local magic_long="$(get_magic_long "$1")" | 	local image_magic="$(get_magic_long "$1")" | ||||||
| 	[ "$magic_long" != "7f454c46" ] && { | 	local board_magic="$2" | ||||||
| 		echo "Invalid image magic '$magic_long'" | 	[ "$image_magic" != "$board_magic" ] && { | ||||||
|  | 		echo "Invalid image magic '$image_magic'. Expected '$board_magic'." | ||||||
| 		return 1 | 		return 1 | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	local model_string="$(tplink_pharos_get_model_string)" | 	local model_string="$3" | ||||||
|  | 	local trargs="$4" | ||||||
|  |  | ||||||
| 	# New images have the support list at 7802888, old ones at 1511432 | 	# New images have the support list at 7802888, old ones at 1511432 | ||||||
| 	tplink_pharos_check_support_list "$1" 7802888 "$model_string" || \ | 	tplink_pharos_check_support_list "$1" 7802888 "$model_string" "$trargs" || \ | ||||||
| 	tplink_pharos_check_support_list "$1" 1511432 "$model_string" || { | 	tplink_pharos_check_support_list "$1" 1511432 "$model_string" "$trargs" || { | ||||||
| 		echo "Unsupported image (model not in support-list)" | 		echo "Unsupported image (model not in support-list)" | ||||||
| 		return 1 | 		return 1 | ||||||
| 	} | 	} | ||||||
| @@ -579,7 +582,11 @@ platform_check_image() { | |||||||
| 	eap120|\ | 	eap120|\ | ||||||
| 	wbs210|\ | 	wbs210|\ | ||||||
| 	wbs510) | 	wbs510) | ||||||
| 		tplink_pharos_check_image "$1" && return 0 | 		tplink_pharos_check_image "$1" "7f454c46" "$(tplink_pharos_get_model_string)" '' && return 0 | ||||||
|  | 		return 1 | ||||||
|  | 		;; | ||||||
|  | 	cpe210-v2) | ||||||
|  | 		tplink_pharos_check_image "$1" "01000000" "$(tplink_pharos_v2_get_model_string)" '\0\xff\r' && return 0 | ||||||
| 		return 1 | 		return 1 | ||||||
| 		;; | 		;; | ||||||
| 	a40|\ | 	a40|\ | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user