📄 test_config.c
字号:
#include "config_GD61.h"
#include "include_GD61.h"
#include <stdio.h>
///////////////////////////////////////////////////////////////////////
typedef struct routeaddress
{
uint8 relayAddrNum; //available destination address number
uint16 relayAddr[MAX_ROUTE_ADDRESS_NUM]; //destination address
}ROUTEADDRESS;
///////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////
/*
uint16 testlineAddr[]={
0, 1, 2, 3, 4, 5, 8, 9,
10,11,12,13,14,15,16,17,18,19,
20,21,22,23,24,25,26,27,28,29,
30,31,32,33, 35,36,37,38,39,
40,41,42,43,44,45
};
*/
uint16 testlineAddr[]={ 0,1,2,3,4,5,6,7 };
// uint16 testlineAddr[]={ 0,7,8,9,10,11 };
///////////////////////////////////////////////////////////////////////
#define testLine_Num 0x0014 //number of line
#define testSourceAddr 0x0100 //the address of GD60
#define RoutingFlag 0x00 //down direction relay package
uint16 testP_SerialNum =0x0001; //serial number of package,increase 1 ecah time
extern volatile uint8 RF_Tx_Buffer[TX_BUFFER_LEN]; // UART0 sending buffer
extern uint8 RFSendByteCounter;
ROUTEADDRESS upAddr,dnAddr;
///////////////////////////////////////////////////////////////////////
void testGetRouteAddr(uint16 node);
void MakeDnRouteFrame(uint16 node);
void MakeUpRouteFrame(uint16 node);
void ConfigRouteTable(void);
///////////////////////////////////////////////////////////////////////
void ConfigRouteTable(void)
{
#ifdef INCLUDE_CONFIG_ROUTER
int16 nodeCount;
uint16 i=0;
char dbuffer[100];
WatchDogClear(); //clr watchdog
DelayMS_(1000);
Uart0SendEnter();
nodeCount=(sizeof(testlineAddr)>>1);
for(i=0;i<nodeCount;i++){
WatchDogClear(); //clr watchdog
testGetRouteAddr(i);
////down direction
#ifdef FIX_ENTER_ADDRESS
sprintf(dbuffer,"fixed enter address."); Uart0SendString(dbuffer);
#else
sprintf(dbuffer,"flowing enter address."); Uart0SendString(dbuffer);
#endif
sprintf(dbuffer,"Down direction Router Table Setting, Node No.%d, address=%d",(i+1),testlineAddr[i]);
Uart0SendString(dbuffer);
sprintf(dbuffer,"Press any key to confirm."); Uart0SendString(dbuffer);
Uart0SendEnter(); _getchar();
MakeDnRouteFrame(i);
RF_SendAddCrc(RFSendByteCounter);
RF_SendingOver();
RFtoRXmode(); //release RF channel
}
Uart0SendEnter();
///////////////////////////////////////////////////////////////////////
WatchDogClear(); //clr watchdog
DelayMS_(1000);
Uart0SendEnter();
nodeCount=(sizeof(testlineAddr)>>1);
for(i=0;i<nodeCount;i++){
WatchDogClear(); //clr watchdog
testGetRouteAddr(i);
////up direction
#ifdef FIX_ENTER_ADDRESS
sprintf(dbuffer,"fixed enter address."); Uart0SendString(dbuffer);
#else
sprintf(dbuffer,"flowing enter address."); Uart0SendString(dbuffer);
#endif
sprintf(dbuffer,"Up direction Router Table Setting, Node No.%d, address=%d",(i+1),testlineAddr[i]);
Uart0SendString(dbuffer);
sprintf(dbuffer,"Press any key to confirm."); Uart0SendString(dbuffer);
Uart0SendEnter(); _getchar();
MakeUpRouteFrame(i);
RF_SendAddCrc(RFSendByteCounter);
RF_SendingOver();
RFtoRXmode(); //release RF channel
}
Uart0SendEnter();
#endif
}
///////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////
// transmitting the package to be relay
// status: ok
void MakeDnRouteFrame(uint16 node)
{
#ifdef INCLUDE_CONFIG_ROUTER
uint8 *buff_pt;
uint8 addrcnt;
buff_pt=(uint8*)RF_Tx_Buffer; //point to transmit buffer
////
buff_pt=buff_pt+10; //reserve the synchronization semaphore
RFSendByteCounter=0; //8 bytes(SYN) + 2 CRC
////
*buff_pt++ =(uint8)RF_START_FLAG; //start flag (01)
*buff_pt++ =(uint8)RF_START_FLAG;
*buff_pt++ =(testLine_Num>>8); // power line number (23)
*buff_pt++ =(uint8)testLine_Num;
*buff_pt++ =testSourceAddr>>8; //source address (45)
*buff_pt++ =(uint8)testSourceAddr;
*buff_pt++ =testlineAddr[node]>>8; //destination address (67)
*buff_pt++ =testlineAddr[node];
*buff_pt++ =testP_SerialNum>>8; //package serial number (89)
*buff_pt++ =testP_SerialNum;
testP_SerialNum++;
//// route area
*buff_pt++ =RoutingFlag; //direction moving package
*buff_pt++ =0x03; //byte counter
*buff_pt++ =0x01;
#ifdef FIX_ENTER_ADDRESS
*buff_pt++ =testlineAddr[0]>>8; //router address
*buff_pt++ =testlineAddr[0];
#else
*buff_pt++ =testlineAddr[node]>>8; //destination address (67)
*buff_pt++ =testlineAddr[node];
#endif
RFSendByteCounter+=15;
//// data area
*buff_pt++= SETUP_ROUTE_TABLE_DN;
*buff_pt++= (dnAddr.relayAddrNum<<1)+1;
RFSendByteCounter+=2;
*buff_pt++= dnAddr.relayAddrNum;
RFSendByteCounter+=1;
for(addrcnt=0;addrcnt<dnAddr.relayAddrNum;addrcnt++){
*buff_pt++= (uint8)(dnAddr.relayAddr[addrcnt]>>8);
*buff_pt++= (uint8)(dnAddr.relayAddr[addrcnt]);
RFSendByteCounter+=2;
}
#endif
}
///////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////
void MakeUpRouteFrame(uint16 node)
{
#ifdef INCLUDE_CONFIG_ROUTER
uint8 *buff_pt;
uint8 addrcnt;
buff_pt=(uint8*)RF_Tx_Buffer; //point to transmit buffer
////
buff_pt=buff_pt+10; //reserve the synchronization semaphore
RFSendByteCounter=0; //8 bytes(SYN) + 2 CRC
////
*buff_pt++ =(uint8)RF_START_FLAG; //start flag (01)
*buff_pt++ =(uint8)RF_START_FLAG;
*buff_pt++ =testLine_Num>>8; // power line number (23)
*buff_pt++ =(uint8)testLine_Num;
*buff_pt++ =testSourceAddr>>8; //source address (45)
*buff_pt++ =(uint8)testSourceAddr;
*buff_pt++ =testlineAddr[node]>>8; //destination address (67)
*buff_pt++ =testlineAddr[node];
*buff_pt++ =testP_SerialNum>>8; //package serial number (89)
*buff_pt++ =testP_SerialNum;
testP_SerialNum++;
//// route area
*buff_pt++ =RoutingFlag; //direction moving package
*buff_pt++ =0x03; //byte counter
*buff_pt++ =0x01;
#ifdef FIX_ENTER_ADDRESS
*buff_pt++ =testlineAddr[0]>>8; //router address
*buff_pt++ =testlineAddr[0];
#else
*buff_pt++ =testlineAddr[node]>>8; //destination address (67)
*buff_pt++ =testlineAddr[node];
#endif
RFSendByteCounter+=15;
//// data area
*buff_pt++ = SETUP_ROUTE_TABLE_UP;
*buff_pt++ = (upAddr.relayAddrNum<<1)+1;
RFSendByteCounter += 2;
*buff_pt++ = upAddr.relayAddrNum;
RFSendByteCounter += 1;
for(addrcnt=0;addrcnt<upAddr.relayAddrNum;addrcnt++){
*buff_pt++= (uint8)(upAddr.relayAddr[addrcnt]>>8);
*buff_pt++= (uint8)(upAddr.relayAddr[addrcnt]);
RFSendByteCounter+=2;
}
#endif
}
///////////////////////////////////////////////////////////////////////
// the result in upAddr,dnAddr;
// status:
///////////////////////////////////////////////////////////////////////
void testGetRouteAddr(uint16 node_pt)
{
#ifdef INCLUDE_CONFIG_ROUTER
uint16 i;
uint16 nodeNum;
nodeNum=(sizeof(testlineAddr)>>1);
//// initial the up direction address
upAddr.relayAddrNum=0;
for(i=0;i<MAX_ROUTE_ADDRESS_NUM;i++){
upAddr.relayAddr[i]=0xaa;
}
//// get the up direction addr
for(i=0;i<MAX_ROUTE_ADDRESS_NUM;i++){
if((int16)(node_pt-i-1)>=0){
upAddr.relayAddr[i]=testlineAddr[node_pt-i-1];
upAddr.relayAddrNum++;
}
else{
break;
}
}
//// initial the down direction address
dnAddr.relayAddrNum=0;
for(i=0;i<MAX_ROUTE_ADDRESS_NUM;i++){
dnAddr.relayAddr[i]=0xaa;
}
//// get the down direction address
for(i=0;i<MAX_ROUTE_ADDRESS_NUM;i++){
if((node_pt+i+1)<nodeNum){
dnAddr.relayAddr[i]=testlineAddr[node_pt+i+1];
dnAddr.relayAddrNum++;
}
else{
break;
}
}
#endif
}
///////////////////////////////////////////////////////////////////////
// End Of File
///////////////////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -