From ca0002c229ca3e0dca379ff06c4d80a4a5211f68 Mon Sep 17 00:00:00 2001 From: Hieromon Ikasamo Date: Wed, 11 Sep 2019 17:10:35 +0900 Subject: [PATCH] Added CreditMigrate.ino description --- examples/CreditMigrate/CreditMigrate.ino | 26 +++++++++++------------ examples/CreditMigrate/CreditMigrate.md | 24 +++++++++++++++++++++ mkdocs/images/creditmigrate.png | Bin 0 -> 24675 bytes 3 files changed, 37 insertions(+), 13 deletions(-) create mode 100644 examples/CreditMigrate/CreditMigrate.md create mode 100644 mkdocs/images/creditmigrate.png diff --git a/examples/CreditMigrate/CreditMigrate.ino b/examples/CreditMigrate/CreditMigrate.ino index c700bf6..214c87f 100644 --- a/examples/CreditMigrate/CreditMigrate.ino +++ b/examples/CreditMigrate/CreditMigrate.ino @@ -23,20 +23,20 @@ * @param size Returns a size of the eeprom partition * @return Retrieved data buffered pointer */ -uint8_t* retrievePartition(size_t *size) { - const esp_partition_t* eeprom = esp_partition_find_first(ESP_PARTITION_TYPE_DATA, ESP_PARTITION_SUBTYPE_ANY, "eeprom"); +uint8_t* retrievePartition(const char* name, size_t *size) { + const esp_partition_t* eeprom = esp_partition_find_first(ESP_PARTITION_TYPE_DATA, ESP_PARTITION_SUBTYPE_ANY, name); if (!eeprom) { - Serial.println("EEPROM partition not found"); + Serial.printf("%s partition not found\n", name); return nullptr; } uint8_t* pBuf = (uint8_t*)malloc(eeprom->size); if (!pBuf) { - Serial.println("Insufficient memory to retrieve EEPROM partition"); + Serial.printf("Insufficient memory to retrieve %s partition\n", name); return nullptr; } if (esp_partition_read(eeprom, 0, (void*)pBuf, eeprom->size) != ESP_OK) { - Serial.println("Unable to read EEPROM partition"); + Serial.printf("Unable to read %s partition\n", name); free(pBuf); return nullptr; } @@ -49,18 +49,18 @@ uint8_t* retrievePartition(size_t *size) { * @param eeprom Retrieved data buffered pointer * @param size Retrieved data size */ -void convert(uint8_t* eeprom, size_t size) { +void convert(const uint8_t* eeprom, const size_t size) { uint8_t* ac_credt = (uint8_t*)strstr((const char*)eeprom, "AC_CREDT"); if (!ac_credt) - Serial.println("AC_CREDT identifier not found in EEPROM partition."); + Serial.println("AC_CREDT identifier not found in the partition."); else { AutoConnectCredential credential; - uint8_t* bp = ac_credt + sizeof("AC_CREDT") - 1; + uint8_t* bp = ac_credt + sizeof("AC_CREDT") - sizeof('\0'); uint8_t* dp = bp; uint8_t entries = *dp++; size_t dpSize = *dp++; dpSize += *dp++ << 8; - Serial.printf("%d stored credential(s), size:%d\n", (int)entries, dpSize); + Serial.printf("%d stored credential(s),size:%d\n", (int)entries, dpSize); // Start EEPROM to Preferences migration uint8_t* ep = dp + dpSize - 1; @@ -92,7 +92,7 @@ void convert(uint8_t* eeprom, size_t size) { Serial.printf(":%02x", config.bssid[ei]); } bool rc = credential.save(&config); - Serial.println(rc ? " saved" : " failed to save"); + Serial.println(rc ? " transferred" : " failed to save Preferences"); } } } @@ -103,11 +103,11 @@ void setup() { Serial.println(); size_t eepromSize; - uint8_t* eepromData = retrievePartition(&eepromSize); + uint8_t* eepromData = retrievePartition("eeprom", &eepromSize); if (eepromData) { - Serial.println("Start EEPROM migration to Preferences"); + Serial.println("Start migration to Preferences"); convert(eepromData, eepromSize); - Serial.println("Conversion ended"); + Serial.println("Transfer ended"); free(eepromData); } } diff --git a/examples/CreditMigrate/CreditMigrate.md b/examples/CreditMigrate/CreditMigrate.md new file mode 100644 index 0000000..c1108cf --- /dev/null +++ b/examples/CreditMigrate/CreditMigrate.md @@ -0,0 +1,24 @@ +## CreditMigrate.ino - A migration tool for the saved credentials + +### Description + +Since AutoConnect v1.0.0 for ESP32, the storage location in the flash of established credentials has moved from EEPROM to Preferences. After You update AutoConnect to v1.0.0, past credentials saved by v0.9.12 earlier will *not be accessible* from the AutoConnect menu - **Open SSIDs**. You need to transfer once the stored credentials from the EEPROM area to the Preferences area. + +**CreditMigrate.ino** transports the credentials stored in EEPROM to the Preferences area to inherit them for AutoConnect v1.0.0 or later. + +### Restrictions + +- CreditMigrate.ino is only applicable to ESP32 boards. It cannot be executed with a compile error on the ESP8266 boards. (ESP8266 does not require credential migration.) +- CreditMigrate.ino will work properly with the installed ESP32 core version is 1.0.2 or earlier. (In ESP32 core 1.0.3, EEPROM area has moved from partition to the nvs. CreditMigrate.ino will not work properly with ESP32 core 1.0.3. ESP32 core 1.0.2 is recommended) + +### Saved credentials migration procedure on your ESP32 board + +1. Connect your host PC and ESP32 module with serial and start Arduino IDE. +2. Confirm that the version of the ESP32 core currently installed via the board manager of ArduinoIDE is 1.0.2 or earlier. +3. Open **CreditMigrate.ino** as a sketch in the examples of the AutoConnect library folder. +4. From the Arduino IDE menu: **Tools > Board:** to select the one that matches your ESP32 board and set it up. +5. Open the serial monitor of Arduino IDE. +6. From the Arduino IDE menu: **Sketch > Upload** to compile and upload the sketch. +7. It will transport the past credentials that had been stored in EEPROM to Preferences. You can confirm the result on the serial monitor. + + diff --git a/mkdocs/images/creditmigrate.png b/mkdocs/images/creditmigrate.png new file mode 100644 index 0000000000000000000000000000000000000000..39fd0293de60132caa27d245588eed5c2cc94e05 GIT binary patch literal 24675 zcmXV21yo!;(?*LIm*VcyLb2lRQYdc4-CY+buEm`NiWU}khvKe_ySw`WKfK?6_Uzen zZ*r5#FAx-r1{`H871@VT%7N z{NmX8@B9EW#z4x?-^-uab>*Z@`V3P$ze)EHg@*lIgHO{8HKPS)F?ISQ!f^S zLixIJks`#uQibIu$yg>7cFOBeTPAQ>X73)?`2mjW!1~rgSW_^IK>~R1htcTBtgMvdDf^lGsV&O_Ts(+yvl-K;3U4pFGrkw)V(bn=Yv*~SlVOb$4WEGcsv)Sfbc-`F zDAX%ND_h|+>?&89z8GTmii2B&WKSw^bHaez()>728+owV>(ZWEebC#1Tc(9?n{9XQ zEwX1RFeo^^DwOAhw9+@7+k_IStL=VqV4E|o50Ln0P-h=((MA#n6#FqUU7Xd;8}u5B zSQr@(VqV4l-jqSP_S0=}=;NquWNMEiR%gV{@Of#+BNybL=rpbV%IJ>l^^2YF(o$i; zNvvH9Zb!5AU0ECLD#W?spOny(r_ay5(DMy+0D)4Lmr7~51jhG<39MpEHH05!f1LZz zb@)Cw{A053=>j}zKwk97>}7aNSlktXh|m=AfC7x&v*Z5E_}iwkj1H26K!kSiqAwI$ zfy?Jnzr-nJZ85R58>>0}IEl|pQh~r)JCCgyZ85|+e4S?9pA4X1M8N}=vEuNIOZ6(d z+|X!fhKrRb^dQ)Rg1U#5B?DVH$3+c8z`UQrF7|}1nAqNK)#k(*phd-Wj}uu>OpNK| zme*3KMnAuwUUQ6;FaKzSRI2mHJ&qTAek0L8`1!^LTg%BiU&@}lG^rT_9Af^N67NTMZuAE>Ofw^=vJ7+)s{!xNXAY} zm=TPQUo!G?ZFG%v$restFi%kI(Ah8nI(~kQ*rwR4%c!L(IL{7$sfH1K)MrCuFgfQ> zWY_Hj)SCfw5wq*qeG7+N0B}$g@cF+tYP9pm^%?%HK?&n|9?1Whx-s+$g4iP4k(hO? zy?`^$$6vW3#LxwUs-*lry9NNY=4!I5V2ooSP*S8Xf}}629;(sdv}YFMt(V9%;|84@ zfP3#uzjHq*Vd^P`Fx_cF&Lyc`SbAx1Vs`79G$t8XWlF8ZXWN(PQ9LFN1z}-pa&V{V zxF750BOIy6zPF}NFXuf3zdfwuc_`&#=@)FVaX6lTvB)gNm_Pst>@Sb8!y|{YbA!5D z)PV?rv+l4Ue++hB&tU(=Rd;(YkIiH)03nJXl(OuOc%;ggT1=1IJ05im6*0zW&3}ma z8$I&36uOW86&OC@1H*_21;6l>snnJOu7Z`Va%7VyWsA6RSor1AE_>p$ihtf@VO#EU z7pP5%|5X{e%r15gWW+UCL}Y5Qxokm(Q)isPstS!lob$&H7lqXhI^o9gb|bPefC-qd z38mT_Ygj3%J7Kk$)I2^IQT=<#f1Y9=nqw`Yr)z>+Xz60}B2!RQ?eK^(DUk(QYGLTb zVzMF6Dr$s|qau>$##HO_te1*6n z6=<}BPgtUH1yePWmeN!&wM~Oex%|0Ar2MvaF{0A$%s8#ahadlZ?y#h@f$XVGx-A(0 zaPi4#+Y4i)SZ~vuH&?=RB&O?##Ii0Hkqw}axGat2%)wCxN-x%QD?)uq#P&n>Pdu2! zfMTU5;s4qkH4u{&;>k>bbub*bLcD{jeXxe?55`(V6oyj1A-EC8HG)*Vb{2JL1!z7XbLTF|B zr|h#E3NjfPIn|=lJf(VEJAE(^30uUzxFk5n+N5WZ@@k_eYASyp)KJZMV2E+O@xw z5bFg*QIY{Qs$+4+mmujy^=$e2ZY5;HpaRUOT~gNQd#4PB1c33MzxfMvOfOKjaQ=0W zf__F!qLSS1hD9VpG`MhbjG+MyhK(|4%4^{TAeQ|PBLWPS591hy^;$IcGL>58>Y*Uf=4)` z0_6^eF0H%7@9o`TorwNeCFC&@MwrX)ujuDwM$k|{1&vzoodP`LdbqQTx1x%np~`3W zDtDUAdE<)WRl%C~P#_6L7&S&jTsY+lu~LV%ju*Dq81D9$x<<$^vYx@|Jy!(-o@n=% zhSwOteP2WR;dR1xbbe3AXsDXCetK_K4*>X~}?ynEasM zQ%wP-KGbL-xt?GFs_WX22xIyJ@Z)xiOOo>}t-DgurGRxhAf6HAe44x+ElG2#PZ!8fVWC^`LZofgq?&s^ zo&7ZHjG}XA5hthlbgDZZZM|2=&TP>F&uv#=%C>J!a@*lstDthMmIcc}c@N3(IQ`CC z=$nyX2Tv?&_SbTLYD#&SxunA~EcC%Imv8+{xu9r` z@!f9W$H;=9%B~=_MBJ>R7$O=A9Cbc+jwp34)Tg z_z(XhaUQy4i6`ReF{fR!c`xFvPc34Lq)^hFgBbdI9KwPDKU`=zgsthaov1Lbg;*SJk?rLp~7RT6u3j%Y=5x#*yCFZ?^=4Lvr<89eR*Bqk;s$~V31p;=r*PU&+QW&=?MAY2eY8b-k*idc z8AaR5$^Y~W;rCekuu6UQNP{nx+f+<9LZAdwp!?c7~utDv5puU|HQn((x4hU z19)k}khb|;;lW4%Ek13eVg{-H0EE`(Q%4xc6UvbIz0)(d?5?r9}p*RcMh5wYOqXTh5)rH$r&=9wmXTyH3& zuuf2Ekn5Qjo-ov3Kj^=LaZ5%0FIxn5e*Zo!zX_Zd`*Zv`fBQs;gN%sQ7lv9N~6c3$as@|Trj$jM&?wd*p;}4eZEAGdt z`jJ}s%Thvsx9Mo0kz<-j^)PU*Ah1IE7`}r^kCED?P|qMpv!=PGu&IH215Wc^uw2aD z&LKfo;jlz{X4fy#5#%L;yWr?i@`Mi$7UI)`f0~FO(y(YK$aVlvli#Y`B@Mu#FMJU; z-MWEnm9`;drOI@1t0oKCmtpQdv`Lrid$%jtW*P*HRvKjohHz}PxTLAEJ+T+4&i%n9 zYx4B5PQo`cETU^LKhe4p_wYovO~=>g3XQs-F1eRWXT$&$XpyQIrZ#)2mPUTwM4-ei z@2)X2>jgSLne|;TST5oY5zv(}sq>&?xUjz{5^`64l|5yW*IY|{#JK~4QaM%&$^ zd4`pej~bIuX*{gPjv<45aOw_Y#-F!f#~q^bX{lI#T(dx>;WVwr{Gtb&4tB2G0)vI+ zZ(^>c$3y(ElwB z8~-+VAtLK4OiB^?^MS%hN&Fs0K|}_rg!AwP?PoQ(4F=zkvC`GcxGIm14)33%(G=t@~sF0CA*!cnxNSB>iEO#OJeiG#1~I7H+nANSNW;O(|sZZ;5Y( z?y@xEAiur6l?)Pu4r99*DL{rA_X+ zbG8E z?l}0lOWNwAoWUzfK64d-6FDVFu$_VNAZ+H-ocod0pAWtibOrv^#;BtXB!=QyY+os+ zZe-)4q!Pgrh{B8n-;1ZNM2ohNPdJzeN>fHXF)i zkFwkF0q5m1(xA&ZI}0(j0&=ppRTA3%E2Vg=(ZL4>9}AdOb3H5IZdV3xM3LiiDS&ne z)tv3gIhN@G^TIREj3%)rW3e~oI~lQ~xhQ~6$ClaOK?J4}R2iPWha*(t!d-h&kojSU%eLQa*=)RUVAzL@7~9&b#;93NqvhWO*+8eGcbe=r3KYYWBK@3~idEe!7^4R`jbGWPb+^;cSpq3*5zYFK9$==hmq(-L zth<7B9BihzDbF7MxR(4*EAz;>3hzYW_im{Y>6vj;)z!a`Yq^D8( z+R+g6y}*%vdtCV(CWgoy)$BN&VQ=N};w<$y_M5>Jp&2QX`%ky%N?XlT|MC^P2 zlpC%L%T&=$xHk@zY7-2=js^CFV=EO#_boc}!b){KwXN^$58-O8AET3YJz�Z0>KE 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 BjwS#A literal 0 HcmV?d00001