当节点加入一个网络时会自动分配一个短地址,但是当节点重启后,这个节点短地址就会改变,如果不想改变这个短地址,直接恢复上一次的连接状态
这就需要设置NV_RESTORE宏来进行处理。NV_RESTORE保存的内容主要有网络层数据库NIB、设备关联表、绑定表、路由表等。
当增加此宏定义的时候,就可以通过串口动态的修改zigbee的PANID、CHANNEL。(在网上找到多种方法,如下方法验证可行)
uint16 panid;
_NIB.nwkPanId = panid;
NLME_UpdateNV(0x01);//更新到nv
uint8 channel;
_NIB.nwkLogicalChannel= channel;
NLME_UpdateNV(0x01);//更新到nv
void Get_PanId(void)
{
uint8 char_buf[20]=0;//2017.08.23
uint8 Cmd_Buf[3]={0};
zb_GetDeviceInfo(ZB_INFO_PAN_ID,&Cmd_Buf);
char_buf[0]=((Cmd_Buf[1]>>4)+'0');
char_buf[1]=((Cmd_Buf[1]&0xf)+'0');
char_buf[2]=((Cmd_Buf[0]>>4)+'0');
char_buf[3]=((Cmd_Buf[0]&0x0f)+'0');
HalUARTWrite(SERIAL_APP_PORT,"#PANID:",7);
HalUARTWrite(SERIAL_APP_PORT,(uint8*)char_buf,strlen(char_buf));
}
void Get_Channel(void)
{
uint8 char_buf[20]=0;//2017.08.23
uint8 Cmd_Buf[3]={0};
zb_GetDeviceInfo(ZB_INFO_CHANNEL,&Cmd_Buf);
char_buf[0]=(Cmd_Buf[0]>>4);
char_buf[1]=(Cmd_Buf[0]&0xf);
if(char_buf[0]<10){
char_buf[0]=char_buf[0]+'0';
}else{
char_buf[0]=char_buf[0]+'a';
}
if(char_buf[1]<10){
char_buf[1]=char_buf[1]+'0';
}else{
char_buf[1]=char_buf[1]+'a';
}
HalUARTWrite(SERIAL_APP_PORT,"#CHANNEL:",9);
HalUARTWrite(SERIAL_APP_PORT,(uint8*)char_buf,strlen(char_buf));
void zb_GetDeviceInfo ( uint8 param, void *pValue )函数在Sapi.h
void NV_PanId(void)
{
uint8 char_buf[20]=0;//2017.08.23
uint16 tem_panid=0;//
tem_panid=BUILD_UINT16(BUILD_UINT8(SerialApp_TxBuf[11],SerialApp_TxBuf[12]),
BUILD_UINT8(SerialApp_TxBuf[9],SerialApp_TxBuf[10]));
_NIB.nwkPanId = tem_panid;
NLME_UpdateNV(0x01);
sprintf(char_buf, "#P IS SET:%x\r\n",tem_panid);
HalUARTWrite(SERIAL_APP_PORT,(uint8*)char_buf,strlen(char_buf));
}
void NV_Channel(void)
{
uint8 char_buf[20]=0;//2017.08.23
uint8 tem_channel=0;//
tem_channel=BUILD_UINT8(SerialApp_TxBuf[11],SerialApp_TxBuf[12]);
_NIB.nwkLogicalChannel=tem_channel;
NLME_UpdateNV(0x01);
sprintf(char_buf, "#C IS SET:%x\r\n",tem_channel);
HalUARTWrite(SERIAL_APP_PORT,(uint8*)char_buf,strlen(char_buf));
}
以上基本就是从串口接收到数据写入nv和从nv获取数据