1 /**************************************************************************×**
2 * LightGateway
3 * @file
4 * @brief
5 * @version 1.0
6 * @date 22. Sep. 2011
7 * @author 杨校权
8 *
9 * 尊重他人劳动成果!
10 *
11 ******************************************************************************/
12
13 #include "lpc12xx_libcfg.h"// 调试模式定义, 外设库配置定义与包含
14
15 #include "KEY.h"
//宏定义:按键引脚定义
//函数声明:HalKeyInit和ProcessKey.
16
17 #include "LED.h"
//宏定义:三个LED引脚定义LED1,23 ,灯的模式定义(开/关/眨眼/闪光/摇头?)
//函数声明: HlLedInit(),HlLedOnOff(),HalLdeBlink()
18
19 #include "Uart.h"
//宏定义:串口波特率,UART0/1最大串口缓存大小.串口等待时间间隔.
//结构体定义: 缓存数组,头部,尾部,数据长度.
//函数声明: 串口初始化uartSendByte(),串口发送字节uartSendByte(),串口发送字符uartSendStr(),串口发送uartSend(),uart0FIFOGets(),UARTFIFOGets().
//全局变量: 串口缓冲数据,串口缓冲数组大小
20
21 #include "EM310.h"
//全局变量: GPRS_STATE,MessageCmd,PING_MARK,Gprg_Buf
//宏定义: 最大GPRS缓冲大小.
//结构体定义: GPRS_BUFFER(Buffer数组,,数据长度,数据)
//函数声明:
uart1PutAT(),
GprsSendAT(),
uart1PutByteFormat(),
charToHex(),
ProcessGprsInfo(),
Process_MegInfo(),
InitTERN_ON_PIN(),
OpenEM310(),
CloseEM310(),
Pattern_Match(),
HalResetEM310(),
Start_GPRS(),
Close_GPRS(),
WaitEM310Ready(),
GprsRevData(),
GprsSendData(),
GprsRevLeftData(),
GprsRevLeftDta(),
Process_MegCmdnfo(),
InitEM310(),
RevMeg(),
SendMegToALL(),
SendBackMeg(),
SendMeg(),
ProMegOrCall()
22
23 #include "phoneNumber.h"
/*
宏定义: 最大保存电话号码数
结构体:PHONE_ID(号码长度,有效性,当前号码)
全局变量: MY_PHONE_NUMVER[]
函数声明: AddPhoneId
DeletePhoneId
InitPhoneNum()
RecordNewMegRevPhoneID()
returnValidPhone()
*/
24
25 #include "ZigBee.h"
/*
宏定义:
- ZIGBEE_RST_PORT 复位端口
- ZIGBEE_RST_PIN 复位引脚
- ZIGBEE_RST_PIN_NUM 复位引脚号
- ZIGBEE_NODE_NUM 最大节点数目
- MAX_DATA_FIELD_SIZE最大数据域大小
- CTL_FIELD_SIZE控制域长度
- NODE_ADDR_SIZE节点地址长度
- MAX_COM_PACK_SIZE最大数据包长度
typedef struct
{
uint8 bLogicalType; //节点类型
uint8 bNodeId; //节点号
}NODE_TYPE_ID;
typedef struct
{
union
{
NODE_TYPE_ID TypeId;
uint16 wSelfSAddr; //节点自身网络地址,即短地址
}choice;
uint8 bFunctionId; //功能码
uint8 bOperation; //操作类型
uint8 bLength; //dataBuffer中有效数据长度
}CONTROL_FIELD;
extern CONTROL_FIELD ctlField;
typedef struct
{
uint16 wSelfSAddr; //节点自身网络地址,即短地址
uint16 wFatherSAddr; //其父节点网络地址
}NODE_ADDR;
typedef struct
{
union
{
NODE_ADDR NodeAddr;
uint32 doubleWord;
uint16 word;
uint8 dataBuffer[MAX_DATA_FIELD_SIZE];
}dataType;
}DATA_FIELD;
extern DATA_FIELD dataField;
//-----------------------------------------------------------------------------
typedef struct
{
uint8 bLogicalType; //节点类型
NODE_ADDR NodeAddr; //节点自身地址和父节点地址
bool Active;
}NODE_INFORMATION;
extern NODE_INFORMATION NodeInfo[];
//-----------------终端节点号宏定义-------------------
#define END_NODE_0 0
#define END_NODE_1 1
#define END_NODE_2 2
#define END_NODE_3 3
#define END_NODE_4 4
#define END_NODE_5 5
#define END_NODE_6 6
#define END_NODE_7 7
#define END_NODE_8 8
#define END_NODE_9 9
#define END_NODE_10 10
#define END_NODE_11 11
#define END_NODE_12 12
#define END_NODE_13 13
#define END_NODE_14 14
#define END_NODE_15 15
//-----------节点上各种传感器、控制器的功能号--------
#define NODE_PHOTOSENSITIVE 0 //节点的光敏传感器
#define NODE_LED3 1 //节点的LED1口
#define NODE_LED4 2 //节点的LED2口
#define NODE_CON1 3 //节点的CON1口
#define NODE_CON2 4 //节点的CON2口
#define NODE_CON3 5 //节点的CON3口
#define NODE_CON4 6 //节点的CON4口
#define NODE_RTC 7 //节点的RTC时间
#define NODE_WORK_MODEL 8 //节点工作模式设置
#define NODE_LIGHT_LIFE 9 //节点所连路灯是否损坏
#define NODE_TIME_SEGMENT 10 //节点自动工作时间段
#define NODE_MUST_SHINE 11 //节点半夜必须点亮,只有对于路口处的路灯,半夜必须点亮
#define RST_GATEWAY 0xf4 //重启网关
#define GATEWAY_ID 0xf5 //上位机获取网关ID
#define GATEWAY_PHONE 0xf6 //上位机获取网关中保持的手机号信息
#define POLL_COOR 0xf7 //路由器和终端节点轮询协调器的存在,如果协调器不存在,路由器和终端节点重启自身
#define PING_COOR 0xf8 //Ping协调器模块,正常情况下协调器收到后信息原样返回给网关
#define START_COOR 0xf9 //开启协调器
#define STOP_COOR 0xfa //关闭协调器
#define RST_COOR 0xfb //复位重启协调器,网关通过下拉ZigBee的RST引脚实现复位
#define NET_INFO 0xfc //提取网络环境信息,该命令只能用于协调器
#define NODE_INFO 0xfe //节点信息(设备编号、设备类型、设备编号、自身网络地址、父节点网络地址)
#define NODE_POLL 0xff //全网节点轮询,协调器定时广播,一实现自组织
//------------------节点类型----------------------------
#define LOGICAL_TYPE_COORDINATOR 0x00 //协调器类型
#define LOGICAL_TYPE_ROUTER 0x01 //路由器类型
#define LOGICAL_TYPE_ENDDEVICE 0x02 //终端节点类型
//--------------------------操作类型------------------------
#define READ_OPERATION 0x00 //读操作
#define WRITE_OPERATION 0x01 //写操作
#define UPDATE_OPERATION 0x02 //更新操作
#define ACK_OPERATION 0x03 //网关反馈成功操作
//-------------------------------------------------------------------
#define FORCE_OPEN_OPERATION 0x04 //单灯开启操作
#define FORCE_CLOSE_OPERATION 0x05 //单灯关闭操作
#define FORCE_ODD_OPEN_OPERATION 0x06 //奇数灯开启操作
#define FORCE_ODD_CLOSE_OPERATION 0x07 //奇数灯关闭操作
#define FORCE_EVEN_OPEN_OPERATION 0x08 //偶数灯开启操作
#define FORCE_EVEN_CLOSE_OPERATION 0x09 //偶数灯关闭操作
//-------------------------------------------------------------------
#define AUTO_ODD_OPERATION 0x0a //自动奇数操作
#define AUTO_EVEN_OPERATION 0x0b //自动操偶数作
#define AUTO_ONE_HALF_OPERATION 0x0c //节点1 3号灯自动开启操作
#define AUTO_ANOTHER_HALF_OPERATION 0x0d //节点2 4号灯自动开启操作
#define AUTO_ALL_OPERATION 0x0e //自动操作
//-------------------------------------------------------------------
//-----------------------协调器网络状态-----------------
#define NET_UNBUILDED 0x00 //尚未建网
#define NET_BUILDED 0x01 //已经建网
//------------------------光照强度------------------------
#define LIGHT_BRIGHT 0x00 //亮
#define LIGHT_DIM 0x01 //暗
//------------------------LED的状态-------------------------
#define LED_OFF 0x00 //灭
#define LED_ON 0x01 //亮
//--------------------光耦合的状态--------------------
#define CON_OFF 0x00 //断开
#define CON_ON 0x01 //开启
//--------------------路灯工作状态--------------------
#define LIGHT_OFF 0x00 //断开
#define LIGHT_ON 0x01 //开启
//--------------------节点工作模式--------------------
#define AUTO_ODD_WORK_MODEL 0x00 //夜里奇数灯开启的节点自动工作模式
#define AUTO_EVEN_WORK_MODEL 0x01 //夜里偶数灯开启的节点自动工作模式
#define AUTO_ALL_WORK_MODEL 0x02 //夜里所有灯开启的节点自动工作模式
#define FORCE_WORK_MODEL 0x03 //节点强制工作模式
//-----------------------------------------------------------------------------
void InitZigBeeRstPin(void);
void ResetZigBee(void);
void StopZigBee(void);
void StartZigBee(void);
bool PingZigBee(void);
void GprsAck(CONTROL_FIELD const * const RevCtl);
extern void ClrZigBeeNodeInfo(void);
extern void InitZigBee(void);
extern void ProInfoToZigBee(uint8 const * const s, int16 size);
extern void ProInfoFromZigBee(uint8 const * const s, int16 size);
extern void PrintNodeInfo(void);
extern void ReturnActiveNode(void);
extern void requestPcNowTime(void);
#ifdef __cplusplus
}
#endif
#endif
*/
26
27 #include "IAP_Flash.h"
28
29 #include "Timer.h"
30
31 #include "Delay.h"
32
33 #include "WDT.h"
34
35 #include "BuildOpt.h"
36
37 int main (void)
38 {
39 SystemInit();
40 SYS_ConfigAHBCLK(SYS_AHBCLKCTRL_IOCON, ENABLE);
41 SYS_ConfigAHBCLK(SYS_AHBCLKCTRL_GPIO0, ENABLE);
42
43 WDTInit();
44 WDTStart();
45
46 if(IAP_FlashBlankCheck() == true){
47 SectorBlankMark = true;
48 }
49 else{
50 SectorBlankMark = false;
51 IAP_Read_IP();
52 IAP_Read_Phone();
53 IAP_Read_Node_Info();
54 }
55
56 HalKeyInit();
57 HalLedInit();
58 uartInit();
59 Timer32Init(2000);
60
61 InitZigBee();
62 WDTFeed();
63
64 HalResetEM310();
65 WDTFeed();
66
67 WaitEM310Ready();
68
69 if(InitEM310() == false)
70 while(1);
71
72
73 HalLedBlink(HAL_LED_ALL, 3, 100, 200);
74 SendMeg(REPORT_READY_NUM,"Ready to connect to server!");
75 DelayMS(500);
76
77
78 while(1) {
79
80 if(KeyState & KEY_MASK){
81 ProcessKey();
82 WDTFeed();
83 }
84
85 //if(RING_MARK){
86 ProMegOrCall();
87 WDTFeed();
88 //}
89
90 if(GPRS_STATE == GPRS_CONNECT_STATE){
91 Gprs_Buf.dLength = uart0FIFOGets(Gprs_Buf.Buffer,2,MAX_UART0_BUFFER_SIZE);
92 if (Gprs_Buf.dLength > 0){
93 HalLedBlink(HAL_LED_2, 1, 50, 100);
94 ProInfoFromZigBee((uint8 *)Gprs_Buf.Buffer,Gprs_Buf.dLength);
95 WDTFeed();
96 }
97
98 Gprs_Buf.dLength = GprsRevData(Gprs_Buf.Buffer,2);
99 if (Gprs_Buf.dLength > 0){
100 HalLedBlink(HAL_LED_3, 1, 50, 100);
101 ProInfoToZigBee((uint8 *)Gprs_Buf.Buffer,Gprs_Buf.dLength);
102 WDTFeed();
103 }
104
105 Gprs_Buf.dLength = GprsRevLeftData(Gprs_Buf.Buffer);
106 if (Gprs_Buf.dLength > 0){
107 HalLedBlink(HAL_LED_2|HAL_LED_3, 1, 50, 100);
108 ProInfoToZigBee((uint8 *)Gprs_Buf.Buffer,Gprs_Buf.dLength);
109 WDTFeed();
110 }
111 }
112
113 else if(GPRS_STATE == GPRS_DISCONNECT_STATE)
114 HalLedBlink(HAL_LED_ALL,1,20,500);
115
116
117 if(Timer32IntMark == true){
118 Timer32IntMark = false;
119 IAP_SaveNodeInfo();
120 }
121
122 WDTFeed();
123
124 }
125
126 }
127
128
129
130 /*********************************************************************************************************
131 End Of File
132 *********************************************************************************************************/
2013年4月9日 15:35:36