📄 wsn_router.c
字号:
/****************************************************************************
*
* 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 + -