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

📄 wsn_router.c

📁 WSN-ROUTER,JENNIC实例程序
💻 C
📖 第 1 页 / 共 3 页
字号:
/****************************************************************************
 *
 * MODULE:			   WSN - Router
 *
 * COMPONENT:          $RCSfile: WSN_Router.c,v $
 *
 * VERSION:            $Name:  $
 *
 * REVISION:           $Revision: 1.7 $
 *
 * DATED:              $Date: 2007/07/12 11:03:03 $
 *
 * STATUS:             $State: Exp $
 *
 * AUTHOR:             IDM
 *
 * DESCRIPTION:
 *
 * Implements a Wireless Sensor Network Router using the Jennic Zigbee stack.
 * Reads temperature, humidity and battery voltage and transmits these to
 * network coordinator. Assumes code is running on a evaluation kit sensor
 * board.
 *
 *
 * Update history
 * $Log: WSN_Router.c,v $
 * Revision 1.7  2007/07/12 11:03:03  ndani
 * Add simple descriptor after network has started
 *
 * Revision 1.6  2007/07/12 10:03:34  ndani
 *
 *
 * LAST MODIFIED BY:   $Author: ndani $
 *                     $Modtime: $
 *
 ****************************************************************************
 *
 * This software is owned by Jennic and/or its supplier and is protected
 * under applicable copyright laws. All rights are reserved. We grant You,
 * and any third parties, a license to use this software solely and
 * exclusively on Jennic products. You, and any third parties must reproduce
 * the copyright and warranty notice and any other legend of ownership on each
 * copy or partial copy of the software.
 *
 * THIS SOFTWARE IS PROVIDED "AS IS". JENNIC MAKES NO WARRANTIES, WHETHER
 * EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE,
 * ACCURACY OR LACK OF NEGLIGENCE. JENNIC SHALL NOT, IN ANY CIRCUMSTANCES,
 * BE LIABLE FOR ANY DAMAGES, INCLUDING, BUT NOT LIMITED TO, SPECIAL,
 * INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON WHATSOEVER.
 *
 * Copyright Jennic Ltd 2005, 2006, 2007. All rights reserved
 *
 ****************************************************************************/

/****************************************************************************/
/***        Include files                                                 ***/
/****************************************************************************/
#include <jendefs.h>
#include <JZ_Api.h>
#include <gdb.h>
#include <AppApi.h>
#include <AppHardwareApi.h>
#include <Utilities.h>
#include <mac_sap.h>
#include <mac_pib.h>
#include <string.h>
#include <PeripheralRegs.h>
#include <AppQueueApi.h>
#include <OAD.h>
#include <Printf.h>
#include "WSN_Profile.h"
/****************************************************************************/
/***        Macro Definitions                                             ***/
/****************************************************************************/
/* Timing values */
#define APP_TICK_PERIOD_ms		  1000
#define APP_TICK_PERIOD     	  (APP_TICK_PERIOD_ms * 32)

#define APP_DATA_SEND_PERIOD_ms	  5000
#define APP_DATA_SEND_PERIOD	  (APP_DATA_SEND_PERIOD_ms / APP_TICK_PERIOD_ms)

#define _nop_()  u8nop=u8nop
#define DATA   u32AHI_DioReadInput()
#define DATAON() vAHI_DioSetOutput(E_AHI_DIO12_INT,0x00)
#define DATAOFF() vAHI_DioSetOutput(0x00,E_AHI_DIO12_INT)
#define RSTON() vAHI_DioSetOutput(E_AHI_DIO17_INT,0x00)
#define RSTOFF() vAHI_DioSetOutput(0x00,E_AHI_DIO17_INT)
#define SCLKON() vAHI_DioSetOutput(E_AHI_DIO14_INT,0x00)
#define SCLKOFF() vAHI_DioSetOutput(0x00,E_AHI_DIO14_INT)
/****************************************************************************/
/***        Type Definitions                                              ***/
/****************************************************************************/

/* Battery reading state definitions */
typedef enum
{
	E_STATE_READ_BATT_VOLT_IDLE,
	E_STATE_READ_BATT_VOLTS_ADC_CONVERTING,
	E_STATE_READ_BATT_VOLTS_COMPLETE,
    E_STATE_READ_BATT_VOLTS_READY
}teStateReadADCs ;

typedef struct
{
	uint16 					u16Reading[3];
	uint8                   u8Channel[3];
	uint8                   u8currentCh;
	teStateReadADCs 	      eState;
}tsSensors;
/****************************************************************************/
/***        Local Function Prototypes                                     ***/
/****************************************************************************/
PRIVATE void vInit(void);
PRIVATE void vSendData(void);
PRIVATE void vInitSensors(void);
PRIVATE void vReadADCs(void);
PRIVATE void vAppTick(void *pvMsg, uint8 u8Param);

PRIVATE void v_RTInputByte(uint8 ucDa);
PRIVATE uint8 uc_RTOutputByte(void);
PRIVATE void v_W1302(uint8 ucAddr, uint8 ucDa);
PRIVATE uint8 uc_R1302(uint8 ucAddr);
//PRIVATE void test(void);
//PRIVATE void v_BurstW1302T(uint8 *pSecDa);
//PRIVATE void v_BurstR1302T(uint8 *pSecDa);
PRIVATE void v_Set1302(uint8 *pSecDa);
PRIVATE void v_Get1302(uint8 ucCurtime[]);
PRIVATE uint8 Getchecksum(uint8 *pbuf,uint8 len);
/****************************************************************************/
/***        Local Variables                                               ***/
/****************************************************************************/
PRIVATE uint8 u8AppTicks = 0;
//PRIVATE tsSensors sADSensor;
PRIVATE bool_t bAppTimerStarted = FALSE;
PRIVATE bool_t bNwkJoined = FALSE;
PRIVATE uint8 u8nop=0;
//PRIVATE uint8 m=0;
//PRIVATE uint8 sec=0;
//PRIVATE uint8 time[7]={59,59,13,27,04,03,9};
PRIVATE uint8 ucCurtime[7]={0};
PRIVATE uint8 u16test[7]={0};
PRIVATE bool_t receive = FALSE;
PRIVATE bool_t Toggle;
/****************************************************************************
 *
 * NAME: AppColdStart
 *
 * DESCRIPTION:
 * Entry point for application. Initialises system, starts scan then
 * processes interrupts.
 *
 * RETURNS:
 * void, never returns
 *
 ****************************************************************************/
PUBLIC void AppColdStart(void)
{
	/* Debug hooks: include these regardless of whether debugging or not */
	HAL_GDB_INIT();
    HAL_BREAKPOINT();

    /* General initialisation: reset hardware */
    JZS_sConfig.u32Channel 	= WSN_CHANNEL;
    JZS_sConfig.u16PanId 	= WSN_PAN_ID;

   // sADSensor.u8currentCh=0;
   // sADSensor.u8Channel[0]=E_AHI_ADC_SRC_ADC_1;
    //sADSensor.u8Channel[1]=E_AHI_ADC_SRC_ADC_2;
    //sADSensor.u8Channel[2]=E_AHI_ADC_SRC_ADC_3;

    /* General initialisation: reset hardware */
    vInit();

    /* No return from the above function call */
}

/****************************************************************************
 *
 * NAME: AppWarmStart
 *
 * DESCRIPTION:
 * Entry point for application from boot loader. Simply jumps to AppColdStart
 * as, in this instance, application will never warm start.
 *
 * RETURNS:
 * Never returns.
 *
 ****************************************************************************/
PUBLIC void AppWarmStart(void)
{
    AppColdStart();
}

/****************************************************************************/
/***        Local Functions                                               ***/
/****************************************************************************/
/****************************************************************************
 *
 * NAME: vInit
 *
 * DESCRIPTION:
 * Initialises Zigbee stack and hardware. Final action is to start BOS, from
 * which there is no return. Subsequent application actions occur in the
 * functions defined above.
 *
 * RETURNS:
 * No return from this function
 *
 ****************************************************************************/
PRIVATE void vInit(void)
{

    /* Initialise Zigbee stack */
    JZS_u32InitSystem(TRUE);

    /* Set DIO for LEDs */
    vAHI_UartDisable(E_AHI_UART_1);
    vAHI_DioSetDirection(0,E_AHI_DIO14_INT);//DIO14(SCLK)定义为输出
    vAHI_DioSetDirection(0,E_AHI_DIO17_INT);//DIO17(RST)定义为输出
    vAHI_DioSetDirection(0,E_AHI_DIO12_INT);//DIO12(I/O)定义为输出
    vAHI_DioSetDirection(0,E_AHI_DIO9_INT);//DIO9(I/O)定义为输出
    vAHI_DioSetDirection(0,E_AHI_DIO10_INT);//DIO10(I/O)定义为输出

    vAHI_DioSetDirection(E_AHI_DIO13_INT,0);//DIO13(I/O)定义为输入



    vAHI_DioSetOutput(0x00,E_AHI_DIO10_INT);//DIO10输出为0
    /* Set sensors */
    vInitSensors();


    /* Start BOS */
    (void)bBosRun(TRUE);

    /* No return from the above function call */

}

/****************************************************************************
 *
 * NAME: vInitSensors
 *
 * DESCRIPTION:
 * Initialise the temperature/humidity sensor and set the ADC to measure the
 * supply voltage.
 *
 ****************************************************************************/
PRIVATE void vInitSensors(void)
{
    /* Initialise ADC for internal battery voltage measurement */
   // sADSensor.eState = E_STATE_READ_BATT_VOLTS_READY;
//    v_Set1302(time);



	vAHI_ApConfigure(E_AHI_AP_REGULATOR_ENABLE,
	                 E_AHI_AP_INT_DISABLE,
	                 E_AHI_AP_SAMPLE_2,
	                 E_AHI_AP_CLOCKDIV_2MHZ,
	                 E_AHI_AP_INTREF);

    /* Wait until the analogue peripheral regulator has come up before setting
       the ADC. */
    while(!bAHI_APRegulatorEnabled());

    vAHI_AdcEnable(E_AHI_ADC_CONVERT_DISABLE,
                   E_AHI_AP_INPUT_RANGE_2,
                   E_AHI_ADC_SRC_ADC_1);

    vAHI_AdcEnable(E_AHI_ADC_CONVERT_DISABLE,
                   E_AHI_AP_INPUT_RANGE_2,
                   E_AHI_ADC_SRC_ADC_2);

    vAHI_AdcEnable(E_AHI_ADC_CONVERT_DISABLE,
                   E_AHI_AP_INPUT_RANGE_2,
                   E_AHI_ADC_SRC_ADC_3);
}

/****************************************************************************
 *
 * NAME: vAppTick
 *
 * DESCRIPTION:
 *
 * Called by a BOS timer expiry. Reads sensor data and if complete transmits
 * to coordinator.
 *
 ****************************************************************************/
PRIVATE void vAppTick(void *pvMsg, uint8 u8Param)
{
    uint8 u8Msg;
    uint8 u8TimerId;

    static bool_t bToggle;
      if (!bToggle)
        {
            vAHI_DioSetOutput(0x00,E_AHI_DIO10_INT);
        }
        else
        {
            vAHI_DioSetOutput(E_AHI_DIO10_INT,0x00);
        }
        bToggle = !bToggle;


	   /* Read sensor data */

       vReadADCs();

	if (u8AppTicks++ > APP_DATA_SEND_PERIOD)
	{
	    /* If sensor reads are compete */
	    if (1/*(sADSensor.eState == E_STATE_READ_BATT_VOLTS_READY)&&(sADSensor.u8currentCh==4)*/)
        {
            if(receive)
           {
            v_Get1302(ucCurtime);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -