Procházet zdrojové kódy

rbextract: support devices with plain RLE caldata

Old MikroTik devices have the RLE-encoded radio calibration data
directly stored in the art (hard_config) partition, without LZO
compression nor any preceding ERD magic bytes. This commit adds
a fallback for these devices.

Tested on the ath79 target with a MikroTik SXT 5nD r2 (SXT Lite5),
only locally --not yet merged upstream--.

Signed-off-by: Roger Pueyo Centelles <[email protected]>
Roger Pueyo Centelles před 6 roky
rodič
revize
c81b2e94c7

+ 1 - 1
package/utils/rbextract/Makefile

@@ -11,7 +11,7 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=rbextract
-PKG_RELEASE:=2
+PKG_RELEASE:=3
 CMAKE_INSTALL:=1
 
 include $(INCLUDE_DIR)/package.mk

+ 13 - 1
package/utils/rbextract/src/rbextract.c

@@ -335,7 +335,7 @@ __rb_get_wlan_data(void)
 	}
 	/* Older ath79-based boards directly show the RB_MAGIC_ERD bytes followed by
 	the LZO-compressed calibration data with no RLE */
-	if (magic == RB_MAGIC_ERD) {
+	else if (magic == RB_MAGIC_ERD) {
 		if (tag_len > RB_ART_SIZE) {
 			printf("Calibration data too large\n");
 			goto err_free_lzo_in;
@@ -362,6 +362,18 @@ __rb_get_wlan_data(void)
 
 		buf_rle_out = buf_lzo_out;
 	}
+	/* Even older ath79-base boards directly have RLE-encoded calibration data,
+	without any LZO compresion nor showing RB_MAGIC_ERD bytes */
+	else {
+		printf("Decode calibration data with RLE\n");
+		err = rle_decode(tag, tag_len, buf_rle_out, RB_ART_SIZE,
+				 NULL, NULL);
+		if (err) {
+			printf("unable to decode ERD data\n");
+			goto err_free_rle_out;
+		}
+	}
+
 	return buf_rle_out;
 
 err_free_rle_out: