444 lines
16 KiB
C
444 lines
16 KiB
C
|
#include "OSAL.h"
|
|||
|
#include "ZGlobals.h"
|
|||
|
#include "AF.h"
|
|||
|
#include "aps_groups.h"
|
|||
|
#include "ZDApp.h"
|
|||
|
//#include "SampleApp.h"
|
|||
|
#include "demoapp.h"
|
|||
|
#include "SampleAppHw.h"
|
|||
|
#include "OnBoard.h"
|
|||
|
/* HAL */
|
|||
|
#include "hal_lcd.h"
|
|||
|
#include "hal_led.h"
|
|||
|
#include "hal_key.h"
|
|||
|
#include "MT_UART.h"
|
|||
|
#include "DHT11.h"
|
|||
|
#include "string.h"
|
|||
|
#include "stdlib.h"
|
|||
|
#include "MT.h"
|
|||
|
|
|||
|
uint8 my_TaskID;
|
|||
|
endPointDesc_t my_epDesc;
|
|||
|
uint8 my_TransID = 0; // This is the unique message ID (counter)
|
|||
|
afAddrType_t my_DstAddr;
|
|||
|
devStates_t identity_nwk = DEV_INIT;
|
|||
|
static struct join_info join_addr[SAMPLEAPP_MAX_CLUSTERS];//<2F><><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>һ<EFBFBD><D2BB>
|
|||
|
|
|||
|
const cId_t my_ClusterList[SAMPLEAPP_MAX_CLUSTERS] =
|
|||
|
{
|
|||
|
SAMPLEAPP_SENSOR_CLUSTERID,
|
|||
|
SAMPLEAPP_CTRL_CLUSTERID
|
|||
|
};
|
|||
|
//<2F>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
const SimpleDescriptionFormat_t my_SimpleDesc =
|
|||
|
{
|
|||
|
MY_ENDPOINT, // int Endpoint;
|
|||
|
SAMPLEAPP_PROFID, // uint16 AppProfId[2];
|
|||
|
SAMPLEAPP_DEVICEID, // uint16 AppDeviceId[2];
|
|||
|
SAMPLEAPP_DEVICE_VERSION, // int AppDevVer:4;
|
|||
|
SAMPLEAPP_FLAGS, // int AppFlags:4;
|
|||
|
SAMPLEAPP_MAX_CLUSTERS, // uint8 AppNumInClusters;
|
|||
|
(cId_t *)my_ClusterList, // uint8 *pAppInClusterList;
|
|||
|
SAMPLEAPP_MAX_CLUSTERS, // uint8 AppNumInClusters;
|
|||
|
(cId_t *)my_ClusterList // uint8 *pAppInClusterList;
|
|||
|
};
|
|||
|
static struct adjust_info adjust = {
|
|||
|
TEMPS_ADJUST_MIN_DEF,
|
|||
|
TEMPS_ADJUST_MAX_DEF,
|
|||
|
HUMIS_ADJUST_MIN_DEF,
|
|||
|
HUMIS_ADJUST_MAX_DEF,
|
|||
|
TEMPS_ADJUST_MIN_DEF,
|
|||
|
HUMIS_ADJUST_MIN_DEF,
|
|||
|
|
|||
|
SET_TEMP_ADJUST_CLOSE,
|
|||
|
SET_HUMI_ADJUST_CLOSE,
|
|||
|
MANUAL_CTRL_MODE,
|
|||
|
MANUAL_CTRL_MODE,
|
|||
|
5,
|
|||
|
5};
|
|||
|
|
|||
|
void send_to_gateway(char *str)
|
|||
|
{
|
|||
|
signed char len = strlen(str);
|
|||
|
if(len > 0){
|
|||
|
HalUARTWrite(1,(uint8 *)str,len);
|
|||
|
HalUARTWrite(1,"\r\n",2);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
//ÿ<><C3BF><EFBFBD>ն<EFBFBD><D5B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD>ȸ<EFBFBD>Э<EFBFBD><D0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,ֻ<><D6BB><EFBFBD>ն˵<D5B6><CBB5><EFBFBD>
|
|||
|
void send_coord_affirm(uint16 cid)
|
|||
|
{
|
|||
|
uint8 data[10];
|
|||
|
|
|||
|
strcpy((char *)data,CLIENT_AFFIRM);
|
|||
|
my_DstAddr.addr.shortAddr = 0x0000;
|
|||
|
AF_DataRequest( &my_DstAddr,//Ŀ<><C4BF><EFBFBD><EFBFBD>ַ
|
|||
|
&my_epDesc,
|
|||
|
cid,
|
|||
|
strlen((char const *)data),
|
|||
|
data,
|
|||
|
&my_TransID,
|
|||
|
AF_DISCV_ROUTE,
|
|||
|
AF_DEFAULT_RADIUS );
|
|||
|
}
|
|||
|
//Э<><D0AD><EFBFBD><EFBFBD><EFBFBD>Բɼ<D4B2><C9BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʪ<EFBFBD><CAAA><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><DDBD>д<EFBFBD><D0B4><EFBFBD>
|
|||
|
void coord_th_dispose(unsigned char *th)
|
|||
|
{
|
|||
|
char *info[10];signed char len=0;
|
|||
|
info[len] = strtok((char *)th,",");
|
|||
|
while(info[len]){
|
|||
|
info[++len] = strtok(NULL,",");
|
|||
|
}//get_data/periodic_th,24,29,open,close
|
|||
|
|
|||
|
if(len != 5)
|
|||
|
return;
|
|||
|
adjust.temp_curr = atoi((char const *)info[1]);
|
|||
|
adjust.humi_curr = atoi((char const *)info[2]);
|
|||
|
strcpy(adjust.temp_c_ops,info[3]);//<2F><><EFBFBD>濪<EFBFBD><E6BFAA>״̬
|
|||
|
strcpy(adjust.humi_c_ops,info[4]);//<2F><><EFBFBD>濪<EFBFBD><E6BFAA>״̬
|
|||
|
debug("<EFBFBD>¶<EFBFBD>%d<><64>,ʪ<><CAAA>%d%%\n",adjust.temp_curr,adjust.humi_curr);
|
|||
|
|
|||
|
char tbuf[16]="";
|
|||
|
sprintf(tbuf,"%d,%d\r",adjust.temp_curr,adjust.humi_curr);
|
|||
|
HalUARTWrite(1,(uint8 *)tbuf,strlen(tbuf));
|
|||
|
|
|||
|
if(strncmp((char *)(adjust.temp_c_mode),AUTO_CTRL_MODE,strlen(AUTO_CTRL_MODE)) == 0){
|
|||
|
if((adjust.temp_curr >= adjust.temp_min)&&(adjust.temp_curr <= adjust.temp_max)&&(strncmp(adjust.temp_c_ops,"open",strlen("open")) == 0)){
|
|||
|
my_SendPointToPointMessage(SAMPLEAPP_SENSOR_CLUSTERID,SET_TEMP_ADJUST_CLOSE);//<2F>¶<EFBFBD><C2B6><EFBFBD><EFBFBD><EFBFBD>,<2C>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸
|
|||
|
my_SendPointToPointMessage(SAMPLEAPP_CTRL_CLUSTERID,SET_TEMP_ADJUST_CLOSE);
|
|||
|
}else if((adjust.temp_curr > adjust.temp_max)&&(strncmp(adjust.temp_c_ops,"close",strlen("close")) == 0)){
|
|||
|
my_SendPointToPointMessage(SAMPLEAPP_SENSOR_CLUSTERID,SET_TEMP_ADJUST_OPEN);//<2F>¶<EFBFBD>̫<EFBFBD><CCAB>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸
|
|||
|
my_SendPointToPointMessage(SAMPLEAPP_CTRL_CLUSTERID,SET_TEMP_ADJUST_OPEN);
|
|||
|
}else if((adjust.temp_curr < adjust.temp_min)&&(strncmp(adjust.temp_c_ops,"close",strlen("close")) == 0)){
|
|||
|
//<2F>¶ȹ<C2B6><C8B9><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸
|
|||
|
}
|
|||
|
}
|
|||
|
if(strncmp((char *)(adjust.humi_c_mode),AUTO_CTRL_MODE,strlen(AUTO_CTRL_MODE)) == 0){
|
|||
|
if((adjust.humi_curr >= adjust.humi_min)&&(adjust.humi_curr <= adjust.humi_max)&&(strncmp(adjust.humi_c_ops,"open",strlen("open")) == 0)){
|
|||
|
my_SendPointToPointMessage(SAMPLEAPP_SENSOR_CLUSTERID,SET_HUMI_ADJUST_CLOSE);//ʪ<><CAAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C>ر<EFBFBD><D8B1><EFBFBD><EFBFBD>м<EFBFBD>ʪ<EFBFBD><CAAA>ʪ<EFBFBD>豸
|
|||
|
my_SendPointToPointMessage(SAMPLEAPP_CTRL_CLUSTERID,SET_HUMI_ADJUST_CLOSE);
|
|||
|
}else if((adjust.humi_curr > adjust.humi_max)&&(strncmp(adjust.humi_c_ops,"close",strlen("close")) == 0)){
|
|||
|
my_SendPointToPointMessage(SAMPLEAPP_SENSOR_CLUSTERID,SET_HUMI_ADJUST_OPEN);//ʪ<><CAAA>̫<EFBFBD><CCAB>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʪ<EFBFBD>豸
|
|||
|
my_SendPointToPointMessage(SAMPLEAPP_CTRL_CLUSTERID,SET_HUMI_ADJUST_OPEN);
|
|||
|
}else if((adjust.humi_curr < adjust.humi_min)&&(strncmp(adjust.humi_c_ops,"close",strlen("close")) == 0)){
|
|||
|
//ʪ<>ȹ<EFBFBD><C8B9><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʪ<EFBFBD>豸
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
//<2F>ɼ<EFBFBD><C9BC><EFBFBD>ʪ<EFBFBD>Ȳ<EFBFBD><C8B2><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
void get_th_send_to_coord(char *head)
|
|||
|
{
|
|||
|
uint8 th[6];char curr_t[6],curr_h[6];
|
|||
|
char temp[60],count = 100;
|
|||
|
while(count--){
|
|||
|
DHT11();
|
|||
|
if((wendu_shi == 0)||(shidu_shi == 0))
|
|||
|
continue;//<2F>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7>Ҫ<EFBFBD><D2AA><EFBFBD>²ɼ<C2B2>
|
|||
|
else
|
|||
|
break;
|
|||
|
}
|
|||
|
th[0]=wendu_shi+'0';
|
|||
|
th[1]=wendu_ge%10+'0';
|
|||
|
th[2]=',';
|
|||
|
th[3]=shidu_shi+'0';
|
|||
|
th[4]=shidu_ge%10+'0';
|
|||
|
th[5]= 0;
|
|||
|
if((LOCAL_LED1 == SWITCH_LED_OPEN))
|
|||
|
strcpy(curr_t,"open");
|
|||
|
else
|
|||
|
strcpy(curr_t,"close");
|
|||
|
if((LOCAL_LED2 == SWITCH_LED_OPEN))
|
|||
|
strcpy(curr_h,"open");
|
|||
|
else
|
|||
|
strcpy(curr_h,"close");
|
|||
|
sprintf(temp,"%s,%s,%s,%s",head,th,curr_t,curr_h);
|
|||
|
debug("%s\n",temp);
|
|||
|
my_SendPointToPointMessage(SAMPLEAPP_COORD_SEND,(uint8 *)temp);//<2F><><EFBFBD>ݸ<EFBFBD>ʽ<EFBFBD><CABD>periodic_th/get_data,25,60,open,close
|
|||
|
}
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
void serial_dispos(uint8 port,uint8 len,uint8 *str)
|
|||
|
{
|
|||
|
|
|||
|
if(strstr((char *)str, GET_DATA)!=NULL){//<2F><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>debug(uart0)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(uart1)
|
|||
|
my_SendPointToPointMessage(SAMPLEAPP_SENSOR_CLUSTERID,GET_DATA);//Э<><D0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
return;
|
|||
|
}
|
|||
|
if(port == 0){//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>
|
|||
|
if(strncmp((char *)str,"open",strlen("open")) == 0){//<2F><><EFBFBD>Կ<EFBFBD><D4BF>ؿ<EFBFBD><D8BF>Բ<EFBFBD><D4B2><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
my_SendPointToPointMessage(SAMPLEAPP_SENSOR_CLUSTERID,SET_TEMP_ADJUST_OPEN);
|
|||
|
my_SendPointToPointMessage(SAMPLEAPP_SENSOR_CLUSTERID,SET_HUMI_ADJUST_OPEN);
|
|||
|
my_SendPointToPointMessage(SAMPLEAPP_CTRL_CLUSTERID,SET_TEMP_ADJUST_OPEN);
|
|||
|
my_SendPointToPointMessage(SAMPLEAPP_CTRL_CLUSTERID,SET_HUMI_ADJUST_OPEN);
|
|||
|
LOCAL_LED1 = SWITCH_LED_OPEN;
|
|||
|
LOCAL_LED2 = SWITCH_LED_OPEN;
|
|||
|
SWITCH_LED = SWITCH_LED_OPEN;
|
|||
|
}else if(strncmp((char *)str,"close",strlen("close")) == 0){
|
|||
|
my_SendPointToPointMessage(SAMPLEAPP_SENSOR_CLUSTERID,SET_TEMP_ADJUST_CLOSE);
|
|||
|
my_SendPointToPointMessage(SAMPLEAPP_SENSOR_CLUSTERID,SET_HUMI_ADJUST_CLOSE);
|
|||
|
my_SendPointToPointMessage(SAMPLEAPP_CTRL_CLUSTERID,SET_TEMP_ADJUST_CLOSE);
|
|||
|
my_SendPointToPointMessage(SAMPLEAPP_CTRL_CLUSTERID,SET_HUMI_ADJUST_CLOSE);
|
|||
|
LOCAL_LED1 = SWITCH_LED_CLOSE;
|
|||
|
LOCAL_LED2 = SWITCH_LED_CLOSE;
|
|||
|
SWITCH_LED = SWITCH_LED_CLOSE;
|
|||
|
}
|
|||
|
}else if(port == 1){//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
if(strncmp((char *)str,SET_DATA,strlen(SET_DATA)) == 0){
|
|||
|
char *info[10];signed char len=0;
|
|||
|
debug("%s\n",str);
|
|||
|
info[len] = strtok((char *)str,",");
|
|||
|
while(info[len]){
|
|||
|
info[++len] = strtok(NULL,",");
|
|||
|
}//set_data,24,29,40,60,auto,manual
|
|||
|
// <20><><EFBFBD>жϺ<D0B6><CFBA><EFBFBD>ֵ
|
|||
|
if(len != 7)
|
|||
|
return;
|
|||
|
adjust.temp_min = atoi(info[1]);
|
|||
|
adjust.temp_max = atoi(info[2]);
|
|||
|
adjust.humi_min = atoi(info[3]);
|
|||
|
adjust.humi_max = atoi(info[4]);
|
|||
|
strcpy((char *)(adjust.temp_c_mode),info[5]);
|
|||
|
strcpy((char *)(adjust.humi_c_mode),info[6]);
|
|||
|
}else if(strncmp((char *)str,SET_TEMP_ADJUST_OPEN,strlen(SET_TEMP_ADJUST_OPEN)) == 0){
|
|||
|
if(strncmp((char *)(adjust.temp_c_mode),AUTO_CTRL_MODE,strlen(AUTO_CTRL_MODE)) == 0)
|
|||
|
return;
|
|||
|
strcpy(adjust.temp_c_ops,"open");
|
|||
|
my_SendPointToPointMessage(SAMPLEAPP_SENSOR_CLUSTERID,SET_TEMP_ADJUST_OPEN);
|
|||
|
my_SendPointToPointMessage(SAMPLEAPP_CTRL_CLUSTERID,SET_TEMP_ADJUST_OPEN);
|
|||
|
}else if(strncmp((char *)str,SET_TEMP_ADJUST_CLOSE,strlen(SET_TEMP_ADJUST_CLOSE)) == 0){
|
|||
|
if(strncmp((char *)(adjust.temp_c_mode),AUTO_CTRL_MODE,strlen(AUTO_CTRL_MODE)) == 0)
|
|||
|
return;
|
|||
|
strcpy(adjust.temp_c_ops,"close");
|
|||
|
my_SendPointToPointMessage(SAMPLEAPP_SENSOR_CLUSTERID,SET_TEMP_ADJUST_CLOSE);
|
|||
|
my_SendPointToPointMessage(SAMPLEAPP_CTRL_CLUSTERID,SET_TEMP_ADJUST_CLOSE);
|
|||
|
}else if(strncmp((char *)str,SET_HUMI_ADJUST_OPEN,strlen(SET_HUMI_ADJUST_OPEN)) == 0){
|
|||
|
if(strncmp((char *)(adjust.humi_c_mode),AUTO_CTRL_MODE,strlen(AUTO_CTRL_MODE)) == 0)
|
|||
|
return;
|
|||
|
strcpy(adjust.humi_c_ops,"open");
|
|||
|
my_SendPointToPointMessage(SAMPLEAPP_SENSOR_CLUSTERID,SET_HUMI_ADJUST_OPEN);
|
|||
|
my_SendPointToPointMessage(SAMPLEAPP_CTRL_CLUSTERID,SET_HUMI_ADJUST_OPEN);
|
|||
|
}else if(strncmp((char *)str,SET_HUMI_ADJUST_CLOSE,strlen(SET_HUMI_ADJUST_CLOSE)) == 0){
|
|||
|
if(strncmp((char *)(adjust.humi_c_mode),AUTO_CTRL_MODE,strlen(AUTO_CTRL_MODE)) == 0)
|
|||
|
return;
|
|||
|
strcpy(adjust.humi_c_ops,"close");
|
|||
|
my_SendPointToPointMessage(SAMPLEAPP_SENSOR_CLUSTERID,SET_HUMI_ADJUST_CLOSE);
|
|||
|
my_SendPointToPointMessage(SAMPLEAPP_CTRL_CLUSTERID,SET_HUMI_ADJUST_CLOSE);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ
|
|||
|
void my_Init( uint8 task_id )
|
|||
|
{
|
|||
|
my_TaskID = task_id;
|
|||
|
MT_UartInit();//<2F><><EFBFBD>ڳ<EFBFBD>ʼ<EFBFBD><CABC>
|
|||
|
MT_UartRegisterTaskID(task_id);//<2F>Ǽ<EFBFBD><C7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
/* GPIO<49><4F>ʼ<EFBFBD><CABC> */
|
|||
|
P1DIR |= (1<<0); //P1_0<5F><30><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
|
|||
|
P1DIR |= (1<<1); //P1_1<5F><31><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
|
|||
|
P2INP &= ~(1<<6);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
LOCAL_LED1 = SWITCH_LED_CLOSE;
|
|||
|
LOCAL_LED2 = SWITCH_LED_CLOSE;
|
|||
|
|
|||
|
P1INP &= ~(1<<3);
|
|||
|
P1SEL &= ~((1<<0)|(1<<1)|(1<<3));
|
|||
|
P1DIR |= (1<<0)|(1<<1)|(1<<3);
|
|||
|
SWITCH_LED = SWITCH_LED_CLOSE;
|
|||
|
|
|||
|
/* <20>˵<EFBFBD><CBB5><EFBFBD>ʼ<EFBFBD><CABC> */
|
|||
|
my_epDesc.endPoint = MY_ENDPOINT;
|
|||
|
my_epDesc.task_id = &my_TaskID;
|
|||
|
my_epDesc.simpleDesc = (SimpleDescriptionFormat_t *)&my_SimpleDesc;
|
|||
|
my_epDesc.latencyReq = noLatencyReqs;
|
|||
|
if(afRegister(&my_epDesc) == afStatus_INVALID_PARAMETER)
|
|||
|
debug("<EFBFBD>˵<EFBFBD>ע<EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>\n");
|
|||
|
else
|
|||
|
debug("<EFBFBD>˵<EFBFBD>ע<EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>\n");
|
|||
|
/* <20><>ַ<EFBFBD>ṹ<EFBFBD><E1B9B9>ʼ<EFBFBD><CABC> */
|
|||
|
my_DstAddr.addrMode = (afAddrMode_t)Addr16Bit;//<2F>㲥
|
|||
|
my_DstAddr.endPoint = MY_ENDPOINT;
|
|||
|
my_DstAddr.addr.shortAddr = 0x0000;//Ĭ<><C4AC>ΪЭ<CEAA><D0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
|||
|
}
|
|||
|
|
|||
|
//zigbee<65><65><EFBFBD><EFBFBD>Ϣ<EFBFBD>ӿ<EFBFBD>
|
|||
|
void my_SendPointToPointMessage(uint8 obj,uint8 *str)
|
|||
|
{
|
|||
|
uint16 cid;
|
|||
|
|
|||
|
if(identity_nwk == DEV_END_DEVICE){
|
|||
|
my_DstAddr.addr.shortAddr = 0x0000;
|
|||
|
cid = SAMPLEAPP_SENSOR_CLUSTERID;
|
|||
|
}else if(identity_nwk == DEV_ZB_COORD){
|
|||
|
if(obj == SAMPLEAPP_SENSOR_CLUSTERID){
|
|||
|
my_DstAddr.addr.shortAddr = join_addr[SAMPLEAPP_SENSOR_CLUSTERID-1].addr;
|
|||
|
cid = SAMPLEAPP_SENSOR_CLUSTERID;
|
|||
|
}else if(obj == SAMPLEAPP_CTRL_CLUSTERID){
|
|||
|
my_DstAddr.addr.shortAddr = join_addr[SAMPLEAPP_CTRL_CLUSTERID-1].addr;
|
|||
|
cid = SAMPLEAPP_CTRL_CLUSTERID;
|
|||
|
}
|
|||
|
}else if(identity_nwk == DEV_ROUTER){
|
|||
|
return;
|
|||
|
}
|
|||
|
debug("send:0x%x,%d\n",my_DstAddr.addr.shortAddr,cid);
|
|||
|
AF_DataRequest( &my_DstAddr,//Ŀ<><C4BF><EFBFBD><EFBFBD>ַ
|
|||
|
&my_epDesc,
|
|||
|
cid,
|
|||
|
strlen((char const *)str),
|
|||
|
str,
|
|||
|
&my_TransID,
|
|||
|
AF_DISCV_ROUTE,
|
|||
|
AF_DEFAULT_RADIUS);
|
|||
|
}
|
|||
|
//zigbee<65>յ<EFBFBD><D5B5><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
void my_MessageMSGCB( afIncomingMSGPacket_t *pkt )
|
|||
|
{
|
|||
|
uint8 data[30];
|
|||
|
|
|||
|
osal_memcpy(data,pkt->cmd.Data,pkt->cmd.DataLength);
|
|||
|
data[pkt->cmd.DataLength] = 0;//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
|||
|
debug("recv:%s\n",data);
|
|||
|
switch ( pkt->clusterId )
|
|||
|
{
|
|||
|
case SAMPLEAPP_CTRL_CLUSTERID: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
if((identity_nwk == DEV_ZB_COORD)&&(strncmp((char *)pkt->cmd.Data,CLIENT_AFFIRM,6) == 0)){//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Э<EFBFBD><D0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ն˵<D5B6>ַ
|
|||
|
debug("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ն<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ:0x%x\n",pkt->srcAddr.addr.shortAddr);
|
|||
|
join_addr[SAMPLEAPP_CTRL_CLUSTERID-1].type = SAMPLEAPP_CTRL_CLUSTERID;
|
|||
|
join_addr[SAMPLEAPP_CTRL_CLUSTERID-1].addr = pkt->srcAddr.addr.shortAddr;
|
|||
|
break;//<2F>ռ<EFBFBD><D5BC><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>˳<EFBFBD>
|
|||
|
}else if(identity_nwk == DEV_END_DEVICE){
|
|||
|
if(strncmp((char *)pkt->cmd.Data,SET_TEMP_ADJUST_OPEN,strlen(SET_TEMP_ADJUST_OPEN)) == 0){
|
|||
|
SWITCH_LED = SWITCH_LED_OPEN;
|
|||
|
}else if(strncmp((char *)pkt->cmd.Data,SET_TEMP_ADJUST_CLOSE,strlen(SET_TEMP_ADJUST_CLOSE)) == 0){
|
|||
|
SWITCH_LED = SWITCH_LED_CLOSE;
|
|||
|
}else if(strncmp((char *)pkt->cmd.Data,SET_HUMI_ADJUST_OPEN,strlen(SET_HUMI_ADJUST_OPEN)) == 0){
|
|||
|
SWITCH_LED = SWITCH_LED_OPEN;
|
|||
|
}else if(strncmp((char *)pkt->cmd.Data,SET_HUMI_ADJUST_CLOSE,strlen(SET_HUMI_ADJUST_CLOSE)) == 0){
|
|||
|
SWITCH_LED = SWITCH_LED_CLOSE;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
case SAMPLEAPP_SENSOR_CLUSTERID://<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
if((identity_nwk == DEV_ZB_COORD)&&(strncmp((char *)pkt->cmd.Data,CLIENT_AFFIRM,6) == 0)){//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Э<EFBFBD><D0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ն˵<D5B6>ַ
|
|||
|
debug("<EFBFBD>ɼ<EFBFBD><EFBFBD>ն<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ:0x%x\n",pkt->srcAddr.addr.shortAddr);
|
|||
|
join_addr[SAMPLEAPP_SENSOR_CLUSTERID-1].type = SAMPLEAPP_SENSOR_CLUSTERID;
|
|||
|
join_addr[SAMPLEAPP_SENSOR_CLUSTERID-1].addr = pkt->srcAddr.addr.shortAddr;
|
|||
|
break;//<2F>ռ<EFBFBD><D5BC><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>˳<EFBFBD>
|
|||
|
}else if(strncmp((char *)pkt->cmd.Data,SET_TEMP_ADJUST_OPEN,strlen(SET_TEMP_ADJUST_OPEN)) == 0){
|
|||
|
LOCAL_LED1 = SWITCH_LED_OPEN;
|
|||
|
SWITCH_LED = SWITCH_LED_OPEN;
|
|||
|
}else if(strncmp((char *)pkt->cmd.Data,SET_TEMP_ADJUST_CLOSE,strlen(SET_TEMP_ADJUST_CLOSE)) == 0){
|
|||
|
LOCAL_LED1 = SWITCH_LED_CLOSE;
|
|||
|
SWITCH_LED = SWITCH_LED_CLOSE;
|
|||
|
}else if(strncmp((char *)pkt->cmd.Data,SET_HUMI_ADJUST_OPEN,strlen(SET_HUMI_ADJUST_OPEN)) == 0){
|
|||
|
LOCAL_LED2 = SWITCH_LED_OPEN;
|
|||
|
SWITCH_LED = SWITCH_LED_OPEN;
|
|||
|
}else if(strncmp((char *)pkt->cmd.Data,SET_HUMI_ADJUST_CLOSE,strlen(SET_HUMI_ADJUST_CLOSE)) == 0){
|
|||
|
LOCAL_LED2 = SWITCH_LED_CLOSE;
|
|||
|
SWITCH_LED = SWITCH_LED_CLOSE;
|
|||
|
}else if(strncmp((char *)pkt->cmd.Data,PERIODIC_REPORT_TH,strlen(PERIODIC_REPORT_TH)) == 0){
|
|||
|
if(identity_nwk == DEV_ZB_COORD){
|
|||
|
coord_th_dispose(data);//periodic_th,25,60,open,close
|
|||
|
}
|
|||
|
}else if(strncmp((char *)pkt->cmd.Data,GET_DATA,strlen(GET_DATA)) == 0){//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD>Э<EFBFBD><D0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
if(identity_nwk == DEV_END_DEVICE){//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
get_th_send_to_coord(GET_DATA);
|
|||
|
osal_set_event(my_TaskID,DEMO_GET_TH);
|
|||
|
}else if(identity_nwk == DEV_ZB_COORD){//Э<><D0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݲ<EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
char temp[80];
|
|||
|
debug("%s\n",data);
|
|||
|
//get_data,24,29,40,60,25,60,open,close,auto,manual
|
|||
|
sprintf(temp,"%s,%d,%d,%d,%d,%s,%s,%s",GET_DATA,
|
|||
|
adjust.temp_min,
|
|||
|
adjust.temp_max,
|
|||
|
adjust.humi_min,
|
|||
|
adjust.humi_max,
|
|||
|
data+strlen(GET_DATA)+1,//<2F><><EFBFBD><EFBFBD>"get_data,"<22>ַ<EFBFBD>,ȡ<><C8A1>"25,60,open,close"
|
|||
|
adjust.temp_c_mode,
|
|||
|
adjust.humi_c_mode
|
|||
|
);
|
|||
|
debug("%s\n",temp);
|
|||
|
send_to_gateway((char *)temp);
|
|||
|
coord_th_dispose(data);//get_data,25,60,open,close
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
uint16 my_ProcessEvent( uint8 task_id, uint16 events )
|
|||
|
{
|
|||
|
afIncomingMSGPacket_t *MSGpkt = NULL;
|
|||
|
|
|||
|
if (events & SYS_EVENT_MSG)
|
|||
|
{
|
|||
|
MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( my_TaskID );
|
|||
|
while(MSGpkt != NULL){
|
|||
|
switch ( MSGpkt->hdr.event )
|
|||
|
{
|
|||
|
case ZDO_STATE_CHANGE:
|
|||
|
identity_nwk = (devStates_t)(MSGpkt->hdr.status);
|
|||
|
if(identity_nwk == DEV_END_DEVICE){
|
|||
|
debug("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>\n");
|
|||
|
debug("<EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>ַ=0x%x\n",NLME_GetShortAddr());
|
|||
|
#if CTRL_OR_GATHER//<2F><><EFBFBD>ƽڵ<C6BD>/<2F>ɼ<EFBFBD><C9BC>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD>ȷ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ݸ<EFBFBD>Э<EFBFBD><D0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD>˭<EFBFBD><CBAD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Э<EFBFBD><D0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
|||
|
send_coord_affirm(SAMPLEAPP_CTRL_CLUSTERID);//<2F><><EFBFBD>Dz<EFBFBD>ͬ<EFBFBD>ն<EFBFBD>Ҫ<EFBFBD>ĵĵط<C4B5>
|
|||
|
#else
|
|||
|
send_coord_affirm(SAMPLEAPP_SENSOR_CLUSTERID);//<2F><><EFBFBD>Dz<EFBFBD>ͬ<EFBFBD>ն<EFBFBD>Ҫ<EFBFBD>ĵĵط<C4B5>
|
|||
|
#endif
|
|||
|
}
|
|||
|
break;
|
|||
|
case AF_INCOMING_MSG_CMD://<2F><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|||
|
my_MessageMSGCB(MSGpkt);
|
|||
|
break;
|
|||
|
case CMD_SERIAL_MSG:
|
|||
|
{
|
|||
|
uint8 str[UART_RECV_LEN];
|
|||
|
uint8 port = *(((mtOSALSerialData_t *)MSGpkt)->msg);//<2F><><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>+<2B><><EFBFBD><EFBFBD>+<2B><><EFBFBD><EFBFBD>
|
|||
|
uint8 len = *(((mtOSALSerialData_t *)MSGpkt)->msg+1);
|
|||
|
if(len < UART_RECV_LEN)
|
|||
|
osal_memcpy(str,((mtOSALSerialData_t *)MSGpkt)->msg+2,len);
|
|||
|
else
|
|||
|
break;
|
|||
|
if(len > 1){
|
|||
|
*(str+len) = 0;
|
|||
|
debug("uart%d(%d):%s\n",port,len,str);
|
|||
|
serial_dispos(port,len,str);
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
}
|
|||
|
osal_msg_deallocate( (uint8 *)MSGpkt );
|
|||
|
MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive(my_TaskID);
|
|||
|
}
|
|||
|
return (events ^ SYS_EVENT_MSG);
|
|||
|
}else if (events & DEMO_KEYBOARD_1){
|
|||
|
debug("key1 down\n");
|
|||
|
my_SendPointToPointMessage(SAMPLEAPP_SENSOR_CLUSTERID,SET_TEMP_ADJUST_OPEN);
|
|||
|
my_SendPointToPointMessage(SAMPLEAPP_SENSOR_CLUSTERID,SET_HUMI_ADJUST_OPEN);
|
|||
|
my_SendPointToPointMessage(SAMPLEAPP_CTRL_CLUSTERID,SET_TEMP_ADJUST_OPEN);
|
|||
|
my_SendPointToPointMessage(SAMPLEAPP_CTRL_CLUSTERID,SET_HUMI_ADJUST_OPEN);
|
|||
|
LOCAL_LED1 = SWITCH_LED_OPEN;
|
|||
|
LOCAL_LED2 = SWITCH_LED_OPEN;
|
|||
|
SWITCH_LED = SWITCH_LED_OPEN;
|
|||
|
return (events ^ DEMO_KEYBOARD_1);
|
|||
|
}else if (events & DEMO_KEYBOARD_2){
|
|||
|
debug("key2 down\n");
|
|||
|
my_SendPointToPointMessage(SAMPLEAPP_SENSOR_CLUSTERID,SET_TEMP_ADJUST_CLOSE);
|
|||
|
my_SendPointToPointMessage(SAMPLEAPP_SENSOR_CLUSTERID,SET_HUMI_ADJUST_CLOSE);
|
|||
|
my_SendPointToPointMessage(SAMPLEAPP_CTRL_CLUSTERID,SET_TEMP_ADJUST_CLOSE);
|
|||
|
my_SendPointToPointMessage(SAMPLEAPP_CTRL_CLUSTERID,SET_HUMI_ADJUST_CLOSE);
|
|||
|
LOCAL_LED1 = SWITCH_LED_CLOSE;
|
|||
|
LOCAL_LED2 = SWITCH_LED_CLOSE;
|
|||
|
SWITCH_LED = SWITCH_LED_CLOSE;
|
|||
|
return (events ^ DEMO_KEYBOARD_2);
|
|||
|
}else if (events & DEMO_GET_TH){
|
|||
|
if(identity_nwk == DEV_END_DEVICE){
|
|||
|
get_th_send_to_coord(PERIODIC_REPORT_TH);
|
|||
|
osal_start_timerEx(my_TaskID,DEMO_GET_TH,SENSOR_PERIODIC_REPORTED);
|
|||
|
}
|
|||
|
return (events ^ DEMO_GET_TH);
|
|||
|
}
|
|||
|
return 0;
|
|||
|
}
|
|||
|
|