⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rf_test.c

📁 基于cc2430的无限通信实例
💻 C
📖 第 1 页 / 共 2 页
字号:
             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 + -