📄 nodeapp.c.bak
字号:
#include "app.h"
#include "../api/timer.h"
#include "stdio.h"
extern int get_tmp(void);
COMM_MSG cluster_msg;
COMM_MSG node_data;
char timeout=0;
char send_seq=0;
int count =0;
unsigned char T_p_node;
unsigned int sync_count = SYNC_COUNT;
/********
* param init
*/
void param_init()
{
/* LOCAL_ID = m->data[0];
LOCAL_GID = m->data[1];
T=m->data[2];
node_num =m->data[3];
ALARM_TMP = m->data[4];
*/
}
/*******************************************
* eeprom 存储
*/
void eeprom_write(unsigned int addr,unsigned int data)
{
while(EECR&(1<<EEWE));
EEAR=addr;
EEDR=data;
EECR|=(1<<EEMWE);
EECR|=(1<<EEWE);
}
unsigned char eeprom_read(unsigned int addr)
{
while(EECR&(1<<EEWE));
EEAR=addr;
EECR|=(1<<EERE);
return EEDR;
}
/******************************************/
void T1_timeout(){
led1Toggle();
start_T0(1,T);
}
unsigned char CC1100_sendDone()
{
//led1Toggle();
//printf("count %d\n",count);
send_seq ++;
}
extern void mcu_sleep();
extern unsigned char rxBuffer[32];
void CC1100_receive()
{
char type,seqNO;
unsigned int node_id;
unsigned char source_id;
unsigned char *msg =(&rxBuffer[0]);
unsigned char sreg;
COMM_MSG *m = (COMM_MSG *)(msg);
type = m->type;
node_id = m->DA;
if ((node_id == IP)||( node_id ==0xffff) ||(node_id == CLUSTER_IP))
{
switch(type)
{
case CLUSTER_NODE_SYNC:
{
sreg = SREG;
CLI();
if (!SYNC_FLAG) //下一次重新同步前将syncflag置为0
{
led0Toggle();
SYNC_FLAG =1;
seqNO = m->data[0];
//start_T1(0,(LOCAL_ID * T_p_node - seqNO*slot_Tcluster));
start_T1(0,(LOCAL_ID *3000));
}
SREG = sreg;
break;
}
case CLUSTER_NODE_ACK:
{
led0Toggle();
printf("ack %d\n",m->data[0]);
stop_T3();
CC1100_sleep();
send_seq = 1;
post(mcu_sleep);
break;
}
case NODE_CHECK_CMD:
{
break;
}
case NODE_DATA:
{
sreg = SREG;
CLI();
if (!SYNC_FLAG) //下一次重新同步前将syncflag置为0
{
SYNC_FLAG =1;
seqNO = m->data[0];
source_id = m->ID;
if (source_id >LOCAL_ID)
start_T1(0,(T -((source_id-LOCAL_ID) * T_p_node + seqNO*RE_SEND_DELAY)));
else
start_T1(0,((LOCAL_ID - source_id) * T_p_node - seqNO*RE_SEND_DELAY));
}
SREG = sreg;
break;
}
case SINK_INIT_NODE:
{
LOCAL_ID = m->data[0];
eeprom_write(0,LOCAL_ID);
LOCAL_GID = m->data[1];
eeprom_write(0,LOCAL_GID);
T=m->data[2];
eeprom_write(0,T);
node_num =m->data[3];
eeprom_write(0,node_num);
ALARM_TMP = m->data[4];
eeprom_write(0,ALARM_TMP);
// work_channel = m->data[5];//根据节点组号判断就可以
// 存储配置信息
break;
}
default :break;
} //end switch
}//end if
}
/*
void T2_timeout(){
unsigned char tmp,bat,crc;
//led0Toggle();
tmp = 0x38;//get_tmp();
bat = get_battle();
node_data.len = 12;
node_data.ID = LOCAL_ID;
node_data.GID = LOCAL_GID;
node_data.type = NODE_DATA;
node_data.data[0] = send_seq;
node_data.data[1] = (tmp>>8)&0xff;
node_data.data[2] = tmp&0xff;
node_data.data[3] = (bat>>8)&0xff;
node_data.data[4] = bat&0xff;
node_data.crc = 0xffff;
//切换通道
CC1100_send((unsigned char*)&node_data,node_data.len+1);
//切换通道
}
*/
/*
void cllect_send()
{
unsigned char tmp,bat,crc;
tmp = 0x38;//get_tmp();
if (tmp>ALARM_TMP)
start_T2(0,300000);//CYCLE_TIME = NEW_CYCLE_TIME;
bat = 0x33;//get_battle();
node_data.len = 12;
node_data.ID = LOCAL_ID;
node_data.GID = LOCAL_GID;
node_data.type = NODE_DATA;
node_data.data[0] = send_seq;
node_data.data[1] = (tmp>>8)&0xff;
node_data.data[2] = tmp&0xff;
node_data.data[3] = (bat>>8)&0xff;
node_data.data[4] = bat&0xff;
node_data.crc = 0xffff;
CC1100_send((unsigned char*)&node_data,node_data.len+1);
start_T0(1,300);
led2Toggle();
}
*/
void resend()
{
CC1100_send((unsigned char*)&node_data,node_data.len+1);
start_T3(0,RE_SEND_DELAY);
}
void T2_timeout(){
int i;
//led0Toggle();
//for(i=0;i<10000;i++)
;
}
void T3_timeout()
{
timeout++;
post(resend);
// CC1100_send((unsigned char*)&node_data,node_data.len+1);
//start_T0(0,500);
if (timeout >=2) //重发3次结束
{
printf("stop\n");
stop_T3();
CC1100_sleep();
timeout =0;
}
}
void T0_timeout()
{
unsigned char tmp,bat,crc;
sync_count--;
if (sync_count == 0)
{
stop_T0();
start_T0(0, T - (node_num * T_p_node));
SYNC_FLAG =0;
sync_count = SYNC_COUNT;
CC1100_wakeup();
}
tmp = get_tmp();
count ++;
if (tmp>ALARM_TMP)
start_T3(0,300000);//CYCLE_TIME = NEW_CYCLE_TIME;
bat = 0x33;//get_battle();
node_data.len = 12;
node_data.ID = LOCAL_ID;
node_data.GID = LOCAL_GID;
node_data.DA = CLUSTER_IP;
node_data.type = NODE_DATA;
node_data.data[0] = send_seq;
node_data.data[1] = tmp;
node_data.data[2] = (bat>>8)&0xff;
node_data.data[3] = bat&0xff;
node_data.crc = 0xffff;
led2Toggle();
CC1100_wakeup();
CC1100_send((unsigned char*)&node_data,node_data.len+1);
start_T3(0,RE_SEND_DELAY);
// post();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -