@@ -1364,8 +1364,14 @@ void WiFiDrv::prefEnd() {
1364
1364
1365
1365
SpiDrv::sendCmd (PREFERENCES_END, PARAM_NUMS_0);
1366
1366
SpiDrv::spiSlaveDeselect ();
1367
+ // Wait the reply elaboration
1368
+ SpiDrv::waitForSlaveReady ();
1369
+ SpiDrv::spiSlaveSelect ();
1367
1370
1368
- // we do not need to wait for any response
1371
+ uint8_t len = 1 ;
1372
+ bool result = false ;
1373
+ SpiDrv::waitResponseCmd (PREFERENCES_END, PARAM_NUMS_1, (uint8_t *)&result, &len);
1374
+ SpiDrv::spiSlaveDeselect ();
1369
1375
}
1370
1376
1371
1377
bool WiFiDrv::prefClear () {
@@ -1534,30 +1540,36 @@ size_t WiFiDrv::prefGet(const char * key, PreferenceType type, uint8_t value[],
1534
1540
SpiDrv::waitForSlaveReady ();
1535
1541
SpiDrv::spiSlaveSelect ();
1536
1542
1537
- SpiDrv::waitResponseData16 (PREFERENCES_GET, value, (uint16_t *)&len);
1543
+ // we need to account for \0 if it is a string
1544
+ size_t res_len = type == PT_STR? len-1 : len;
1545
+ SpiDrv::waitResponseData16 (PREFERENCES_GET, value, (uint16_t *)&res_len);
1538
1546
1539
1547
SpiDrv::spiSlaveDeselect ();
1540
1548
1541
- // if len == 0 it means that the command retuned and error
1542
- if (len == 0 ) {
1549
+ // if res_len == 0 it means that the command retuned and error
1550
+ if (res_len == 0 ) {
1543
1551
return 0 ;
1544
1552
}
1545
1553
1546
1554
// fix endianness
1547
1555
if (type != PT_STR && type != PT_BLOB) {
1548
- for (uint8_t i=0 ; i<len /2 ; i++) {
1556
+ for (uint8_t i=0 ; i<res_len /2 ; i++) {
1549
1557
1550
1558
// XOR swap algorithm:
1551
1559
// a=a^b; b=a^b; a=b^a; with a != b
1552
- if (value[i] != value[len -i-1 ]) {
1553
- value[i] = value[i]^value[len -i-1 ];
1554
- value[len -i-1 ] = value[i]^value[len -i-1 ];
1555
- value[i] = value[len -i-1 ]^value[i];
1560
+ if (value[i] != value[res_len -i-1 ]) {
1561
+ value[i] = value[i]^value[res_len -i-1 ];
1562
+ value[res_len -i-1 ] = value[i]^value[res_len -i-1 ];
1563
+ value[i] = value[res_len -i-1 ]^value[i];
1556
1564
}
1557
1565
}
1558
1566
}
1559
1567
1560
- return len;
1568
+ if (type == PT_STR) {
1569
+ value[res_len] = ' \0 ' ;
1570
+ }
1571
+
1572
+ return res_len;
1561
1573
}
1562
1574
1563
1575
PreferenceType WiFiDrv::prefGetType (const char * key) {
0 commit comments