diff options
author | Roger Pueyo Centelles <roger.pueyo@guifi.net> | 2020-01-29 11:27:03 +0100 |
---|---|---|
committer | Koen Vandeputte <koen.vandeputte@ncentric.com> | 2020-02-26 14:46:46 +0100 |
commit | c81b2e94c7d89fbf9f03aa4680ebb3d26cede872 (patch) | |
tree | 333cf70db2d8ff340296f0614be934972c51d0a1 /package/utils | |
parent | 3660a89cb9bfbdd077cf3322b7355a43faac8832 (diff) | |
download | upstream-c81b2e94c7d89fbf9f03aa4680ebb3d26cede872.tar.gz upstream-c81b2e94c7d89fbf9f03aa4680ebb3d26cede872.tar.bz2 upstream-c81b2e94c7d89fbf9f03aa4680ebb3d26cede872.zip |
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 <roger.pueyo@guifi.net>
Diffstat (limited to 'package/utils')
-rw-r--r-- | package/utils/rbextract/Makefile | 2 | ||||
-rw-r--r-- | package/utils/rbextract/src/rbextract.c | 14 |
2 files changed, 14 insertions, 2 deletions
diff --git a/package/utils/rbextract/Makefile b/package/utils/rbextract/Makefile index 4bc6898b11..f50bbea120 100644 --- a/package/utils/rbextract/Makefile +++ b/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 diff --git a/package/utils/rbextract/src/rbextract.c b/package/utils/rbextract/src/rbextract.c index ceed2494a1..e75d74957a 100644 --- a/package/utils/rbextract/src/rbextract.c +++ b/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: |