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

📄 rf_test.c

📁 CC2430无线语音测试代码。两结点间通讯。IAR开发环境的工程文件。
💻 C
📖 第 1 页 / 共 2 页
字号:


   while( !stopApplication() ){
      YLED = LED_ON;
      res = radioSend(&sendBuffer, 1, remoteAddr, DO_ACK);
      sendBall(ORIENTED_RIGHT);
      YLED = LED_OFF;
      if(res == TRUE)
      {
         res = radioReceive(&buffer, &length, PING_PONG_TIMEOUT,&sender);
      }
      else
      {
         res = FALSE;
      }


      if(res == TRUE)
      {
         receiveBall(ORIENTED_RIGHT);
         GLED = LED_ON;
         // lcdUpdateLine(LINE1, "OK!");
         lcdUpdate((char *)"OK!", (char *)"");
         printRSSI(buffer[length]);
      }
      else
      {
         GLED = LED_OFF;
         // lcdUpdateLine(LINE1, "Failed...");
         lcdUpdate((char *)"Failed...", (char *)"");
         waitVisible(CLEARLY_VISIBLE);
      }
      waitVisible(CLEARLY_VISIBLE);
      GLED = LED_OFF;
   }

}


/******************************************************************************
* @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;


   YLED = LED_ON;
   res = radioSend(&sendBuffer, 1, remoteAddr, DO_ACK);
   YLED = LED_OFF;

   if(res == TRUE)
   {
      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))
      {
         lcdUpdateLine(LINE2,(char *)"Correct!");
      }
      failed = failed / 10;
      sprintf(number, (char *)"PER: %d", failed);
      lcdUpdateLine(LINE1,number);
      lcdUpdateChar(LINE1, 8, '%');
   }
   else
   {
      lcdUpdate((char *)"Node Unreachable",(char *)"");
   }

   haltApplicationWithLED();

   return;
}


/******************************************************************************
* @fn  receiveMode
*
* @brief
*      Function for receiving data.
*
* Parameters:
*
* @param  void
*
* @return void
*
******************************************************************************/
void receiveMode(void)
{
   BYTE* receiveBuffer;
   BYTE length;
   BYTE res;
   BYTE sender;

   pingPongInit();

   while( !stopApplication() )
   {
      res = radioReceive(&receiveBuffer, &length, RECEIVE_TIMEOUT, &sender);

      if(res == TRUE)
      {
         GLED = LED_ON;
         if(*receiveBuffer == PING_PONG_REQUEST)
         {
            pingPongResponse();
         }
         else if(*receiveBuffer == PER_TEST_REQUEST)
         {
            conductPerTest();
         }
         else
         {
            printRSSI(receiveBuffer[length]);
            showState();
         }
      }
      else
      {
         lcdUpdate((char *)"Waiting",(char *)"");
         GLED = LED_OFF;
      }

      GLED = LED_OFF;
   }
   return;
}


/******************************************************************************
* @fn  showState
*
* @brief
*      Print "Sending" or "Receiving" on LINE1.
*
* Parameters:
*
* @param  void
*
* @return void
*
******************************************************************************/
void showState(void)
{
   if (RxTxState == SEND){
      lcdUpdateLine(LINE1, (char *)"Sending");
   }
   else{
      lcdUpdateLine(LINE1, (char *)"Receiving");
   }
   halWait(0xFF);
}


/******************************************************************************
* @fn  pingPongResponse
*
* @brief
*      Handles response to pingpong.
*
* Parameters:
*
* @param  void
*
* @return void
*
******************************************************************************/
void pingPongResponse(void)
{
  BYTE transmitBuffer;

  receiveBall(ORIENTED_LEFT);
  halWait(1);
  YLED = LED_ON;
  transmitBuffer = PING_PONG_RESPONSE;
  radioSend(&transmitBuffer, 1, remoteAddr, DO_NOT_ACK);
  sendBall(ORIENTED_LEFT);
  YLED = LED_OFF;
}


/******************************************************************************
* @fn  conductPerTest
*
* @brief
*      Sends 1000 packets to calculate PER.
*
* Parameters:
*
* @param  void
*
* @return void
*
******************************************************************************/
void conductPerTest(void)
{
    WORD i;
    WORD sendBuffer[2];

    lcdUpdate((char *)"Conducting", (char *)"PER test.");

    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));

   lcdUpdateLine(LINE2, rssiString);
}


/******************************************************************************
* @fn  getFrequency
*
* @brief
*      Get current frequency.
*
* Parameters:
*
* @param  void
*
* @return UINT32
*         Current frequency.
*
******************************************************************************/
UINT32 getFrequency(void)
{
   UINT8 selection;
   char *menuText[] = {(char*)" 2405", (char*)" 2410", (char*)" 2415", (char*)" 2420", (char*)" 2425", (char*)" 2430", (char*)" 2435", (char*)" 2440", (char*)" 2445", (char*)" 2450", (char*)" 2455", (char*)" 2460", (char*)" 2465", (char*)" 2470", (char*)" 2475", (char*)" 2480", (char*)" 2485"};
   selection = lcdMenu(menuText, 17);
   if(selection != ABORT_MENU)
   {
      return (2405000 + 5000*selection);
   }
   else
   {
      return (2405000);
   }

}


/******************************************************************************
* @fn  getAddress
*
* @brief
*      Get current address.
*
* Parameters:
*
* @param  UINT8 a
*
* @return UINT8
*
******************************************************************************/
UINT8 getAddress(UINT8 a)
{
   UINT8 address = a;
   char line[16];
   JOYSTICK_DIRECTION jsv;

   while(getJoystickDirection() != CENTRED);

   while((jsv = getJoystickDirection()) != RIGHT)
   {
      while(getJoystickDirection() != CENTRED);

      if(jsv == UP)
      {
         address++;
      }
      else if (jsv == DOWN)
      {
         address--;
      }

      sprintf(line,(char *)"Address: %d     ",address);
      lcdUpdateLine(LINE2, line);
   }
   return address;
}


/******************************************************************************
* @fn  clockmodes_init
*
* @brief
*     Setup for incorperating the functions in this
*     module with the menu
*
* Parameters:
*
* @param  APPLICATION *a
*         Main application
*
* @return void
*
******************************************************************************/
#ifdef COMPLETE_APPLICATION
void rf_test_init(APPLICATION *a)
{
   a->menuText = (char *)"RF Test";
   a->description = (char *)"Radio comm.";
   a->main_func = rf_test_main;
}
#endif


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -