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