📄 wsn_router.c
字号:
* u16AttributeId R KVP attribute ID
* pu8AfduLength R Pointer to length of data
* pu8Afdu R Data array
*
* RETURNS:
* AF_ERROR_CODE
*
****************************************************************************/
PUBLIC bool_t JZA_bAfKvpObject(APS_Addrmode_e eAddrMode,
uint16 u16AddrSrc,
uint8 u8SrcEP,
uint8 u8LQI,
uint8 u8DstEP,
uint8 u8ClusterId,
uint8 *pu8ClusterIDRsp,
AF_Transaction_s *puTransactionInd,
AF_Transaction_s *puTransactionRsp)
{
return KVP_SUCCESS;
}
/****************************************************************************
*
* NAME: JZA_vAppDefineTasks
*
* DESCRIPTION:
* Called by Zigbee stack during initialisation to allow the application to
* initialise any tasks that it requires. This application requires none.
*
* RETURNS:
* void
*
****************************************************************************/
PUBLIC void JZA_vAppDefineTasks(void)
{
}
/****************************************************************************
*
* NAME: JZA_vPeripheralEvent
*
* DESCRIPTION:
* Called when a hardware event causes an interrupt. This function is called
* from within the interrupt context so should be brief. In this case, the
* information is placed on a simple FIFO queue to be processed later.
*
* PARAMETERS: Name RW Usage
* u32Device R Peripheral generating interrupt
* u32ItemBitmap R Bitmap of interrupt sources within peripheral
*
****************************************************************************/
PUBLIC void JZA_vPeripheralEvent(uint32 u32Device, uint32 u32ItemBitmap)
{
}
/****************************************************************************
*
* NAME: JZA_vAppEventHandler
*
* DESCRIPTION:
* Called regularly by the task scheduler. This function reads the hardware
* event queue and processes the events therein. It is important that this
* function exits after a relatively short time so that the other tasks are
* not adversely affected.
*
****************************************************************************/
PUBLIC void JZA_vAppEventHandler(void)
{
uint8 u8Msg;
uint8 u8TimerId;
if (!bAppTimerStarted)
{
if (bNwkJoined)
{
bAppTimerStarted = TRUE;
(void)bBosCreateTimer(vAppTick, &u8Msg, 0, (APP_TICK_PERIOD_ms / 10), &u8TimerId);
}
}
}
/****************************************************************************
*
* NAME: JZA_boAppStart
*
* DESCRIPTION:
* Called by Zigbee stack during initialisation.
*
* RETURNS:
* TRUE
*
****************************************************************************/
PUBLIC bool_t JZA_boAppStart(void)
{
JZS_vStartStack();
return TRUE;
}
/****************************************************************************
*
* NAME: JZA_vStackEvent
*
* DESCRIPTION:
* Called by Zigbee stack to pass an event up to the application.
*
* RETURNS:
* TRUE
*
****************************************************************************/
PUBLIC void JZA_vStackEvent(teJZS_EventIdentifier eEventId,
tuJZS_StackEvent *puStackEvent)
{
if (eEventId == JZS_EVENT_NWK_JOINED_AS_ROUTER)
{
// load the simple descriptor now that the network has started
uint8 u8InputClusterCnt = 1;
uint8 au8InputClusterList[] = {WSN_CID_SENSOR_READINGS};
uint8 u8OutputClusterCnt = 1;
uint8 au8OutputClusterList[] = {WSN_CID_SENSOR_READINGS};
(void)afmeAddSimpleDesc(WSN_DATA_SOURCE_ENDPOINT,
WSN_PROFILE_ID,
0x0001,
0x00,
0x00,
u8InputClusterCnt,
au8InputClusterList,
u8OutputClusterCnt,
au8OutputClusterList);
bNwkJoined = TRUE;
}
}
/*********************************************************************
* 实时时钟模块 时钟芯片型号:DS1302
*********************************************************************/
/********************************************************************
* 名称: v_RTInputByte
* 说明:
* 功能: 往DS1302写入1Byte数据
* 调用:
* 输入: ucDa写入的数据
* 返回值: 无
***********************************************************************/
void v_RTInputByte(uint8 ucDa)
{
uint8 i=0x01;
uint8 j;
for(j=0; j<8; j++)
{
if(i&ucDa)
DATAON();
else
DATAOFF();
i= i*2;
SCLKOFF();
_nop_();
_nop_();
_nop_();
SCLKON();
_nop_();
_nop_();
_nop_();
}
}
/********************************************************************
* 名称: uint8 uc_RTOutputByte
* 说明:
* 功能: 从DS1302读取1Byte数据
* 调用:
* 输入:
* 返回值: Result
***********************************************************************/
uint8 uc_RTOutputByte(void)
{
uint8 i=0x01;
uint8 Result=0;
uint8 j;
for(j=0; j<8;j++)
{
SCLKON();
_nop_();
_nop_();
_nop_();
SCLKOFF();
_nop_();
_nop_();
_nop_();
if(DATA&0x2000)
Result=(Result|i);
i=i*2;
}
return(Result);
}
/********************************************************************
* 名称: v_W1302
* 说明: 先写地址,后写命令/数据
* 功能: 往DS1302写入数据
* 调用: v_RTInputByte()
* 输入: ucAddr: DS1302地址, ucDa: 要写的数据
* 返回值: 无
***********************************************************************/
void v_W1302(uint8 ucAddr, uint8 ucDa)
{
RSTOFF();//复位引脚为低电平,所有数据传送终止
_nop_();
_nop_();
_nop_();
SCLKOFF();//清时钟总线
_nop_();
_nop_();
_nop_();
RSTON();//复位引脚为高电平,逻辑控制有效
_nop_();
_nop_();
_nop_();
v_RTInputByte(ucAddr); /* 地址,命令 */
v_RTInputByte(ucDa); /* 写1Byte数据*/
SCLKOFF();
_nop_();
_nop_();
_nop_();
RSTOFF();
}
/********************************************************************
* 名称: uc_R1302
* 说明: 先写地址,后读命令/数据
* 功能: 读取DS1302某地址的数据
* 调用: v_RTInputByte() , uc_RTOutputByte()
* 输入: ucAddr: DS1302地址
* 返回值: ucDa :读取的数据
***********************************************************************/
uint8 uc_R1302(uint8 ucAddr)
{
uint8 ucDa;
RSTOFF();//复位引脚为低电平,所有数据传送终止
_nop_();
_nop_();
_nop_();
SCLKOFF();//清时钟总线
_nop_();
_nop_();
_nop_();
RSTON();//复位引脚为高电平,逻辑控制有效
_nop_();
_nop_();
_nop_();
v_RTInputByte(ucAddr); /* 地址,命令 */
ucDa = uc_RTOutputByte(); /* 读1Byte数据 */
SCLKON();
_nop_();
_nop_();
_nop_();
RSTOFF();
return(ucDa);
}
/********************************************************************
* 名称: v_Set1302
* 说明:
* 功能: 设置初始时间
* 调用: v_W1302()
* 输入: pSecDa: 初始时间地址。初始时间格式为: 秒 分 时 日 月 星期 年
* 7Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B
* 返回值: 无
***********************************************************************/
void v_Set1302(uint8 *pSecDa)
{
uint8 i;
uint8 ucAddr = 0x80;
v_W1302(0x8e,0x00); /* 控制命令,WP=0,写操作允许*/
for(i =7;i>0;i--)
{
v_W1302(ucAddr,*pSecDa); /* 秒 分 时 日 月 星期 年 */
pSecDa++;
ucAddr +=2;
}
v_W1302(0x8e,0x80); /* 控制命令,WP=1,写保护工作*/
}
/********************************************************************
* 名称: v_Get1302
* 说明:
* 功能: 读取DS1302当前时间
* 调用: uc_R1302()
* 输入: ucCurtime: 保存当前时间地址。当前时间格式为: 秒 分 时 日 月 星期 年
* 7Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B
* 返回值: 无
***********************************************************************/
void v_Get1302(uint8 ucCurtime[])
{
uint8 i;
uint8 ucAddr = 0x81;
for (i=0;i<7;i++)
{
ucCurtime[i] = uc_R1302(ucAddr);/*格式为: 秒 分 时 日 月 星期 年 */
ucAddr += 2;
}
}
uint8 Getchecksum(uint8 *pbuf,uint8 len)
{
uint8 sum=0;
uint8 i;
for(i=0;i<len;i++)
{
sum=sum+*(pbuf+i);
}
return sum;
}
/*void test(void)
{
sec=7;
}*/
/****************************************************************************/
/*** END OF FILE ***/
/****************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -