中
A
status of nv_flashReadNew() of zcl_onOffAttr_restore() is NV_ITEM_NOT_FOUND after rebooting by zb_factoryReset().
In this case, if I commissioning it and reboot, status is NV_SUCC.
How to fix it ?
hi,
please process the reboot after call the zb_factoryReset().
1. Code for debug message
nv_sts_t nv_sector_read(bool fw, u16 id, u8 sectTotalNum, nv_sect_info_t *sectInfo){ nv_sts_t ret = NV_SUCC; nv_sect_info_t s[MODULE_SECTOR_NUM]; u32 moduleStartAddr = MODULES_START_ADDR(id); s32 i = 0; u8 sectCur = 0; u8 sectValidCrc = 0; u8 sectPrev = 0; u8 sectVN = 0xff; if(sectTotalNum > MODULE_SECTOR_NUM){ return NV_ITEM_NOT_FOUND; } for(i = 0; i < sectTotalNum; i++){ flash_read(moduleStartAddr, sizeof(nv_sect_info_t), (u8 *)&s[i]); moduleStartAddr += NV_SECTOR_SIZE(id); } for(i = 0; i < sectTotalNum; i++){ sectCur = (s[i].opSect & NV_SECT_INFO_SECTNO_BITMASK); if(s[i].usedFlag == NV_SECTOR_VALID_READY_CHECKCRC){ /* for being compatible with v2.3.0.0 */ if(nv_sectInfoCrcCheck(s[i])){ sectVN = sectCur; printf("======1======sectVN===0x%x===sectCur==0x%x=========\r\n", sectVN, sectCur); break; } }else{ if((SECT_VALID_CHECK(s[i])) && s[i].idName == id){ if(s[i].usedFlag == NV_SECTOR_VALID_CHECKCRC){ if(nv_sectInfoCrcCheck(s[i])){ sectValidCrc++; sectVN = sectCur; if(sectValidCrc == 2){ if(absSub(sectCur, sectPrev) == 1){ sectVN = max2(sectCur, sectPrev); }else{ sectVN = min2(sectCur, sectPrev); } break; } sectPrev = sectCur; } }else{ sectVN = sectCur; sectValidCrc++; } } } } printf("======2======sectVN===0x%x===sectCur==0x%x===s[0]=0x%x==s[1]=0x%x====id=0x%x=======\r\n", sectVN, sectCur, s[0], s[1], id); if(sectVN == 0xff){ ret = NV_ITEM_NOT_FOUND; }else{ u8 sectDel = (sectVN + 1) & (MODULE_SECTOR_NUM - 1); u8 sectOp = sectVN & (MODULE_SECTOR_NUM - 1); u16 usedFlag = NV_SECTOR_VALID_CHECKCRC; /* change the sector info during writing operation */ if(fw){ if(s[sectOp].usedFlag == NV_SECTOR_VALID_READY_CHECKCRC){ if(flash_writeWithCheck(MODULE_SECT_START(id, sectOp), sizeof(u16), (u8 *)&usedFlag) != TRUE){ ret = NV_DATA_CHECK_ERROR; } } if(ret == NV_SUCC){ usedFlag = NV_SECTOR_INVALID; if(SECT_VALID_CHECK(s[sectDel])){ flash_writeWithCheck(MODULE_SECT_START(id, sectDel), sizeof(u16), (u8 *)&usedFlag); } } } memcpy(sectInfo, &s[sectOp], sizeof(nv_sect_info_t)); } return NV_SUCC; }
2. Debug Messages2023-06-08 16:26:25.260 [COM3] - csCommissioning Cmd Handler : Dir -> 0x0, Cmd -> 0x0, mfgCode -> 0x103A csCommissioning Cmd Handler =====client=====0======== ======2======sectVN===0x0===sectCur==0x3===s[0]=0xC037A7A==s[1]=0xFFFFFFFF====id=0x3======= ============nv_flashReadNew======ret==0x0========= ======2======sectVN===0x0===sectCur==0x3===s[0]=0xC037A7A==s[1]=0xFFFFFFFF====id=0x3======= =============Save startup control============2=2==1==0==== ======2======sectVN===0x0===sectCur==0x3===s[0]=0xC037A7A==s[1]=0xFFFFFFFF====id=0x3======= ============nv_flashReadNew======ret==0x0========= =============Restore startup control============2=2==0====== =================Active OS Flag 3 : 1 ============= ===================start factory reset========= ===================start factory reset1========= 2023-06-08 16:26:26.924 [COM3] - ======2======sectVN===0x2===sectCur==0x3===s[0]=0xA2047A7A==s[1]=0xFFFFFFFF====id=0x4======= 2023-06-08 16:26:28.892 [COM3] - ======2======sectVN===0xFF===sectCur==0x3===s[0]=0xFFFFFFFF==s[1]=0xFFFFFFFF====id=0x1======= ============nv_flashReadNew======ret==0x0========= ======2======sectVN===0xFF===sectCur==0x3===s[0]=0xFFFFFFFF==s[1]=0xFFFFFFFF====id=0x1======= ============nv_flashReadNew======ret==0x0========= ======2======sectVN===0xFF===sectCur==0x3===s[0]=0xFFFFFFFF==s[1]=0xFFFFFFFF====id=0x2======= ============nv_flashReadNew======ret==0x0========= ======2======sectVN===0xFF===sectCur==0x3===s[0]=0xFFFFFFFF==s[1]=0xFFFFFFFF====id=0x2======= ============nv_flashReadNew======ret==0x0========= ======2======sectVN===0xFF===sectCur==0x3===s[0]=0xFFFFFFFF==s[1]=0xFFFFFFFF====id=0x2======= sampleLight leave cnf handler. : 0
@TL_Soyo
When I call the zb_factoryReset(), the sampleLight is rebooted.
Should I call reboot before reboot by zb_factoryReset() ?
hi,
please process the reboot after call the zb_factoryReset().
1. Code for debug message
nv_sts_t nv_sector_read(bool fw, u16 id, u8 sectTotalNum, nv_sect_info_t *sectInfo){ nv_sts_t ret = NV_SUCC; nv_sect_info_t s[MODULE_SECTOR_NUM]; u32 moduleStartAddr = MODULES_START_ADDR(id); s32 i = 0; u8 sectCur = 0; u8 sectValidCrc = 0; u8 sectPrev = 0; u8 sectVN = 0xff; if(sectTotalNum > MODULE_SECTOR_NUM){ return NV_ITEM_NOT_FOUND; } for(i = 0; i < sectTotalNum; i++){ flash_read(moduleStartAddr, sizeof(nv_sect_info_t), (u8 *)&s[i]); moduleStartAddr += NV_SECTOR_SIZE(id); } for(i = 0; i < sectTotalNum; i++){ sectCur = (s[i].opSect & NV_SECT_INFO_SECTNO_BITMASK); if(s[i].usedFlag == NV_SECTOR_VALID_READY_CHECKCRC){ /* for being compatible with v2.3.0.0 */ if(nv_sectInfoCrcCheck(s[i])){ sectVN = sectCur; printf("======1======sectVN===0x%x===sectCur==0x%x=========\r\n", sectVN, sectCur); break; } }else{ if((SECT_VALID_CHECK(s[i])) && s[i].idName == id){ if(s[i].usedFlag == NV_SECTOR_VALID_CHECKCRC){ if(nv_sectInfoCrcCheck(s[i])){ sectValidCrc++; sectVN = sectCur; if(sectValidCrc == 2){ if(absSub(sectCur, sectPrev) == 1){ sectVN = max2(sectCur, sectPrev); }else{ sectVN = min2(sectCur, sectPrev); } break; } sectPrev = sectCur; } }else{ sectVN = sectCur; sectValidCrc++; } } } } printf("======2======sectVN===0x%x===sectCur==0x%x===s[0]=0x%x==s[1]=0x%x====id=0x%x=======\r\n", sectVN, sectCur, s[0], s[1], id); if(sectVN == 0xff){ ret = NV_ITEM_NOT_FOUND; }else{ u8 sectDel = (sectVN + 1) & (MODULE_SECTOR_NUM - 1); u8 sectOp = sectVN & (MODULE_SECTOR_NUM - 1); u16 usedFlag = NV_SECTOR_VALID_CHECKCRC; /* change the sector info during writing operation */ if(fw){ if(s[sectOp].usedFlag == NV_SECTOR_VALID_READY_CHECKCRC){ if(flash_writeWithCheck(MODULE_SECT_START(id, sectOp), sizeof(u16), (u8 *)&usedFlag) != TRUE){ ret = NV_DATA_CHECK_ERROR; } } if(ret == NV_SUCC){ usedFlag = NV_SECTOR_INVALID; if(SECT_VALID_CHECK(s[sectDel])){ flash_writeWithCheck(MODULE_SECT_START(id, sectDel), sizeof(u16), (u8 *)&usedFlag); } } } memcpy(sectInfo, &s[sectOp], sizeof(nv_sect_info_t)); } return NV_SUCC; }
2. Debug Messages
csCommissioning Cmd Handler =====client=====0========
======2======sectVN===0x0===sectCur==0x3===s[0]=0xC037A7A==s[1]=0xFFFFFFFF====id=0x3=======
============nv_flashReadNew======ret==0x0=========
======2======sectVN===0x0===sectCur==0x3===s[0]=0xC037A7A==s[1]=0xFFFFFFFF====id=0x3=======
=============Save startup control============2=2==1==0====
======2======sectVN===0x0===sectCur==0x3===s[0]=0xC037A7A==s[1]=0xFFFFFFFF====id=0x3=======
============nv_flashReadNew======ret==0x0=========
=============Restore startup control============2=2==0======
=================Active OS Flag 3 : 1 =============
===================start factory reset=========
===================start factory reset1=========
2023-06-08 16:26:26.924 [COM3] - ======2======sectVN===0x2===sectCur==0x3===s[0]=0xA2047A7A==s[1]=0xFFFFFFFF====id=0x4=======
2023-06-08 16:26:28.892 [COM3] - ======2======sectVN===0xFF===sectCur==0x3===s[0]=0xFFFFFFFF==s[1]=0xFFFFFFFF====id=0x1=======
============nv_flashReadNew======ret==0x0=========
======2======sectVN===0xFF===sectCur==0x3===s[0]=0xFFFFFFFF==s[1]=0xFFFFFFFF====id=0x1=======
============nv_flashReadNew======ret==0x0=========
======2======sectVN===0xFF===sectCur==0x3===s[0]=0xFFFFFFFF==s[1]=0xFFFFFFFF====id=0x2=======
============nv_flashReadNew======ret==0x0=========
======2======sectVN===0xFF===sectCur==0x3===s[0]=0xFFFFFFFF==s[1]=0xFFFFFFFF====id=0x2=======
============nv_flashReadNew======ret==0x0=========
======2======sectVN===0xFF===sectCur==0x3===s[0]=0xFFFFFFFF==s[1]=0xFFFFFFFF====id=0x2=======
sampleLight leave cnf handler. : 0
2023-06-08 16:26:25.260 [COM3] - csCommissioning Cmd Handler : Dir -> 0x0, Cmd -> 0x0, mfgCode -> 0x103A
@TL_Soyo
When I call the zb_factoryReset(), the sampleLight is rebooted.
Should I call reboot before reboot by zb_factoryReset() ?
@TL_Soyo
hi,
please process the reboot after call the zb_factoryReset().
1. Code for debug message
nv_sts_t nv_sector_read(bool fw, u16 id, u8 sectTotalNum, nv_sect_info_t *sectInfo){ nv_sts_t ret = NV_SUCC; nv_sect_info_t s[MODULE_SECTOR_NUM]; u32 moduleStartAddr = MODULES_START_ADDR(id); s32 i = 0; u8 sectCur = 0; u8 sectValidCrc = 0; u8 sectPrev = 0; u8 sectVN = 0xff; if(sectTotalNum > MODULE_SECTOR_NUM){ return NV_ITEM_NOT_FOUND; } for(i = 0; i < sectTotalNum; i++){ flash_read(moduleStartAddr, sizeof(nv_sect_info_t), (u8 *)&s[i]); moduleStartAddr += NV_SECTOR_SIZE(id); } for(i = 0; i < sectTotalNum; i++){ sectCur = (s[i].opSect & NV_SECT_INFO_SECTNO_BITMASK); if(s[i].usedFlag == NV_SECTOR_VALID_READY_CHECKCRC){ /* for being compatible with v2.3.0.0 */ if(nv_sectInfoCrcCheck(s[i])){ sectVN = sectCur; printf("======1======sectVN===0x%x===sectCur==0x%x=========\r\n", sectVN, sectCur); break; } }else{ if((SECT_VALID_CHECK(s[i])) && s[i].idName == id){ if(s[i].usedFlag == NV_SECTOR_VALID_CHECKCRC){ if(nv_sectInfoCrcCheck(s[i])){ sectValidCrc++; sectVN = sectCur; if(sectValidCrc == 2){ if(absSub(sectCur, sectPrev) == 1){ sectVN = max2(sectCur, sectPrev); }else{ sectVN = min2(sectCur, sectPrev); } break; } sectPrev = sectCur; } }else{ sectVN = sectCur; sectValidCrc++; } } } } printf("======2======sectVN===0x%x===sectCur==0x%x===s[0]=0x%x==s[1]=0x%x====id=0x%x=======\r\n", sectVN, sectCur, s[0], s[1], id); if(sectVN == 0xff){ ret = NV_ITEM_NOT_FOUND; }else{ u8 sectDel = (sectVN + 1) & (MODULE_SECTOR_NUM - 1); u8 sectOp = sectVN & (MODULE_SECTOR_NUM - 1); u16 usedFlag = NV_SECTOR_VALID_CHECKCRC; /* change the sector info during writing operation */ if(fw){ if(s[sectOp].usedFlag == NV_SECTOR_VALID_READY_CHECKCRC){ if(flash_writeWithCheck(MODULE_SECT_START(id, sectOp), sizeof(u16), (u8 *)&usedFlag) != TRUE){ ret = NV_DATA_CHECK_ERROR; } } if(ret == NV_SUCC){ usedFlag = NV_SECTOR_INVALID; if(SECT_VALID_CHECK(s[sectDel])){ flash_writeWithCheck(MODULE_SECT_START(id, sectDel), sizeof(u16), (u8 *)&usedFlag); } } } memcpy(sectInfo, &s[sectOp], sizeof(nv_sect_info_t)); } return NV_SUCC; }
2. Debug Messages
csCommissioning Cmd Handler =====client=====0========
======2======sectVN===0x0===sectCur==0x3===s[0]=0xC037A7A==s[1]=0xFFFFFFFF====id=0x3=======
============nv_flashReadNew======ret==0x0=========
======2======sectVN===0x0===sectCur==0x3===s[0]=0xC037A7A==s[1]=0xFFFFFFFF====id=0x3=======
=============Save startup control============2=2==1==0====
======2======sectVN===0x0===sectCur==0x3===s[0]=0xC037A7A==s[1]=0xFFFFFFFF====id=0x3=======
============nv_flashReadNew======ret==0x0=========
=============Restore startup control============2=2==0======
=================Active OS Flag 3 : 1 =============
===================start factory reset=========
===================start factory reset1=========
2023-06-08 16:26:26.924 [COM3] - ======2======sectVN===0x2===sectCur==0x3===s[0]=0xA2047A7A==s[1]=0xFFFFFFFF====id=0x4=======
2023-06-08 16:26:28.892 [COM3] - ======2======sectVN===0xFF===sectCur==0x3===s[0]=0xFFFFFFFF==s[1]=0xFFFFFFFF====id=0x1=======
============nv_flashReadNew======ret==0x0=========
======2======sectVN===0xFF===sectCur==0x3===s[0]=0xFFFFFFFF==s[1]=0xFFFFFFFF====id=0x1=======
============nv_flashReadNew======ret==0x0=========
======2======sectVN===0xFF===sectCur==0x3===s[0]=0xFFFFFFFF==s[1]=0xFFFFFFFF====id=0x2=======
============nv_flashReadNew======ret==0x0=========
======2======sectVN===0xFF===sectCur==0x3===s[0]=0xFFFFFFFF==s[1]=0xFFFFFFFF====id=0x2=======
============nv_flashReadNew======ret==0x0=========
======2======sectVN===0xFF===sectCur==0x3===s[0]=0xFFFFFFFF==s[1]=0xFFFFFFFF====id=0x2=======
sampleLight leave cnf handler. : 0
2023-06-08 16:26:25.260 [COM3] - csCommissioning Cmd Handler : Dir -> 0x0, Cmd -> 0x0, mfgCode -> 0x103A
@TL_Soyo
When I call the zb_factoryReset(), the sampleLight is rebooted.
Should I call reboot before reboot by zb_factoryReset() ?
@TL_Soyo