📄 rf_test.c
字号:
break;
}
}
}
}
/******************************************************************************
* @fn perTestMode
*
* @brief
* Function for performing a packet error rate (PER) test.
*
* Parameters:
*
* @param void
*
* @return void
*
******************************************************************************/
void perTestMode(void)
{
BYTE sendBuffer = PER_TEST_REQUEST;
char number[16];
BYTE* receiveBuffer;
BYTE length;
BYTE res;
BYTE sender;
WORD lastPacketNumber = 0;
WORD thisPacketNumber;
WORD failed = 0;
ClearScreen();
Print(0,5,"--PerTestMode--",1);
Rectangle(2 , 3 , 108 , 6);
YLED = LED_ON;
res = radioSend(&sendBuffer, 1, remoteAddr, DO_ACK);
YLED = LED_OFF;
if(res == TRUE)
{
if(LanguageSel == 1)
{
Print(4,10,"RUNNING...",1);
}
else
{
Print(4,10,"进行中... ",1);
}
while(lastPacketNumber < PER_TOTAL_PACKET_NUMBER)
{
res = radioReceive(&receiveBuffer, &length, PER_RECEIVE_TIMEOUT, &sender);
if(res == TRUE)
{
thisPacketNumber = *((WORD*) receiveBuffer);
failed += (thisPacketNumber - lastPacketNumber - 1);
lastPacketNumber = thisPacketNumber;
GLED = LED_ON;
}
else
{
GLED = LED_OFF;
failed += (PER_TOTAL_PACKET_NUMBER - lastPacketNumber);
lastPacketNumber = PER_TOTAL_PACKET_NUMBER;
}
}
if((failed == 0) &&(lastPacketNumber != 0))
{
if(LanguageSel == 1)
{
Print(1,30,"Correct! ",1);
}
else
{
Print(1,30,"误码率: ",1);
}
}
failed = failed / 10;
sprintf(number, (char *)"PER: %d% ", failed);
Print(4,10,(INT8U*)number,1);
}
else
{
if(LanguageSel == 1)
{
Print(4,10,"Node Unre ",1);
}
else
{
Print(4,10,"无应答节点!",1);
}
}
haltApplicationWithLED();
while(ScanKey() != 0Xff);
halWait(5);
return;
}
/******************************************************************************
* @fn receiveMode
*
* @brief
* Function for receiving data.
*
* Parameters:
*
* @param void
*
* @return void
*
******************************************************************************/
void receiveMode(void)
{
BYTE* receiveBuffer;
BYTE length;
BYTE res;
BYTE sender;
ClearScreen();
Print(0,5,"--ReceiveMode--",1);
Rectangle(2 , 3 , 108 , 6);
while( !stopApplication() )
{
res = radioReceive(&receiveBuffer, &length, RECEIVE_TIMEOUT, &sender);
if(res == TRUE)
{
Print(4,10," OK ",1);
GLED = LED_ON;
if(*receiveBuffer == PER_TEST_REQUEST)
{
conductPerTest();
}
else
{
printRSSI(receiveBuffer[length]);
// showState();
}
}
else
{
if(LanguageSel == 1)
{
Print(4,10,"Waiting...",1);
}
else
{
Print(4,10,"等待中... ",1);
}
GLED = LED_OFF;
}
GLED = LED_OFF;
}
halWait(5);
return;
}
/******************************************************************************
* @fn conductPerTest
*
* @brief
* Sends 1000 packets to calculate PER.
*
* Parameters:
*
* @param void
*
* @return void
*
******************************************************************************/
void conductPerTest(void)
{
WORD i;
WORD sendBuffer[2];
ClearScreen();
Print(0,5,"--Conducting--",1);
Rectangle(2 , 3 , 108 , 6);
if(LanguageSel == 1)
{
Print(4,8,"PER test... ",1);
}
else
{
Print(4,10,"误码率测试...",1);
}
sendBuffer[1] = PER_TOTAL_PACKET_NUMBER;
for(i=1; i < PER_TOTAL_PACKET_NUMBER+1 ; i++)
{
halWait(8);
sendBuffer[0] = i;
radioSend((BYTE*) sendBuffer, sizeof(sendBuffer), remoteAddr, DO_NOT_ACK);
}
}
/******************************************************************************
* @fn printRSSI
*
* @brief
* Printing RSSI on the LCD-display.
*
* Parameters:
*
* @param INT8 rssi
* New RSSI value.
*
*
* @return void
*
******************************************************************************/
void printRSSI(INT8 rssi)
{
char rssiString[16];
sprintf(rssiString, (char const *)"%d dBm ", (rssi-45));
Print(4,8,(INT8U*)rssiString,1);
}
/******************************************************************************
* @fn getFrequency
*
* @brief
* Get current frequency.
*
* Parameters:
*
* @param void
*
* @return UINT32
* Current frequency.
*
******************************************************************************/
UINT32 getFrequency(void)
{
UINT16 Fre = 2405;
INT8U jsv;
char line[6];
ClearScreen();
Print(0,5,"--Fre Setting--",1);
if(LanguageSel == 1)
{
Print6(2,10,"Frequency is: ",1);
}
else
{
Print(2,8,"频率设定为:",1);
}
Rectangle(2 , 4 , 108 , 7);
while((jsv = ScanKey()) != K_OK)
{
while(ScanKey() != 0xff);
if(jsv == K_UP)
{
if(Fre < 2485)
{
Fre += 5;
}
}
else if (jsv == K_DOWN)
{
if(Fre > 2405)
{
Fre -= 5;
}
}
sprintf(line,(char *)"%d",Fre);
Print(5,38,(UINT8*)line,1);
}
while(ScanKey() != 0xff);
return ((UINT32)Fre*1000);
}
/******************************************************************************
* @fn getAddress
*
* @brief
* Get current address.
*
* Parameters:
*
* @param UINT8 a
*
* @return UINT8
*
******************************************************************************/
UINT8 getAddress(UINT8 a)
{
UINT8 address = a;
char line[6];
INT8U jsv;
ClearScreen();
Print(0,0,"--Addr Setting--",1);
if(LanguageSel == 1)
{
Print6(2,10,"Address is: ",1);
}
else
{
Print(2,8,"地址设定为:",1);
}
Rectangle(2 , 4 , 108 , 7);
while(ScanKey() != 0xff);
while((jsv = ScanKey()) != K_OK)
{
while(ScanKey() != 0xff);
if(jsv == K_UP)
{
address++;
}
else if (jsv == K_DOWN)
{
address--;
}
sprintf(line,(char *)"%d ",address);
Print(5,48,(UINT8*)line,1);
}
while(ScanKey() != 0xff);
return address;
}
/******************************************************************************
* See lcd.h for a description of this function.
******************************************************************************/
void waitVisible(BOOL visibility)
{
UINT16 i;
if(visibility){
i = 100;
}
else{
i = 6;
}
while(i--){
halWait(10);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -