⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wsn_router.c

📁 WSN-ROUTER,JENNIC实例程序
💻 C
📖 第 1 页 / 共 3 页
字号:
 *                  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 + -