博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
GateWay程序分析01_主程序分析
阅读量:6941 次
发布时间:2019-06-27

本文共 8537 字,大约阅读时间需要 28 分钟。

  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

转载地址:http://brnnl.baihongyu.com/

你可能感兴趣的文章
Spell Checker - 新版Chrome的纠错特性
查看>>
http协议以及httpd2.2与httpd2.4的详解
查看>>
jpa postgresql 使用uuid作为主键
查看>>
Linux文件目录
查看>>
8.1 shell介绍 8.2 命令历史 8.3 命令补全和别名 8.4 通配符 8.5 输入输出重
查看>>
GAEPhotos V1.02 发布了
查看>>
docker 部署Tomcat应用相关操作
查看>>
文件权限
查看>>
回顾2017,展望2018
查看>>
Eclipse 编译运行卡顿
查看>>
Linux常用命令——chmod
查看>>
expansions and substitutions
查看>>
PyTorch 0.4源码安装(Windows)
查看>>
Velocity和jQuery冲突的解决办法
查看>>
用户登录提示符编程“-bash-4.1#”
查看>>
Nginx
查看>>
面试总结(php)
查看>>
LBS-手机定位应用
查看>>
ViewController.swift MyFriend
查看>>
RabbitMQ实战:消息通信模式和最佳实践
查看>>