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

📄 radio.c

📁 传感器网络CC2430模块开发,IEEE802.15.4 MAC 协议实现源程序.
💻 C
字号:
/******************************************************************************
*                                                                             *
*        **********                                                           *
*       ************                                                          *
*      ***        ***                                                         *
*     ***    ++    ***                                                        *
*     ***   +  +   ***                      CHIPCON                           *
*     ***   +                                                                 *
*     ***   +  +   ***                                                        *
*     ***    ++    ***                                                        *
*      ***        ***                                                         *
*       ************                                                          *
*        **********                                                           *
*                                                                             *
*******************************************************************************

Filename:     radio.c
Target:       cc2430
Author:       EFU
Revised:      1/3-2007
Revision:     1.1
******************************************************************************/
#include <string.h>
#include "cul.h"

extern volatile BYTE sppRxStatus;
extern volatile BYTE sppTxStatus;
__no_init SPP_STRUCT rxData @ "PM0_XDATA";
__no_init SPP_STRUCT txData @ "PM0_XDATA";

//-----------------------------------------------------------------------------
// See cul.h for a description of this function.
//-----------------------------------------------------------------------------
void radioInit(UINT32 frequency, BYTE localAddress)
{
   sppInit(frequency,localAddress);

   return;
}


//-----------------------------------------------------------------------------
// See cul.h for a description of this function.
//-----------------------------------------------------------------------------
BOOL radioSend(BYTE* transmitData, WORD dataLength, BYTE remoteAddress, BYTE doAck)
{
   WORD sent = 0;
   BOOL status = TRUE;
   WORD remaining;
   BYTE retries;
   BYTE res;
   txData.destAddress = remoteAddress;
   txData.flags = doAck;


   while((sent < dataLength) && (status == TRUE))
   {
     retries = ACK_RETRIES;
     remaining = dataLength-sent;


     if(remaining > SPP_MAX_PAYLOAD_LENGTH)
     {
       memmove(txData.payload, transmitData + sent, SPP_MAX_PAYLOAD_LENGTH);
       txData.payloadLength = SPP_MAX_PAYLOAD_LENGTH;
       sent += SPP_MAX_PAYLOAD_LENGTH;
     }
     else
     {
       memmove(txData.payload, transmitData + sent, dataLength);
       txData.payloadLength = dataLength;
       sent += dataLength;
     }

     while(retries)
     {
       res = sppSend(&txData);
       if(res == CHANNEL_BUSY)
       {
         halWait(10);
         retries--;
         if(retries == 0)
         {
           status = FALSE;
         }
       }
       else
       {
         retries = 0;
       }
     }
     while(sppTxStatus == TX_IN_PROGRESS);

     if(sppTxStatus == DEST_UNREACHABLE)
     {
       status = FALSE;
     }
   }

   return status;
}





//-----------------------------------------------------------------------------
// See cul.h for a description of this function.
//-----------------------------------------------------------------------------
BOOL radioReceive(BYTE** receiveData, BYTE* length, WORD timeout, BYTE* sender)
{
   BOOL status = TRUE;
   BOOL continueWaiting = TRUE;
   BOOL useTimeout = FALSE;

   if(timeout)
   {
      useTimeout = TRUE;
   }



   sppReceive(&rxData);

   while((sppRxStatus != RX_COMPLETE) && (continueWaiting))
   {
      if(useTimeout)
      {
         halWait(0x01);
         timeout--;
         if(timeout == 0)
         {
            continueWaiting = FALSE;
            status = FALSE;
         }
      }
   }

   if(status == TRUE)
   {
      *receiveData = rxData.payload;
      *length = rxData.payloadLength;
      *sender = rxData.srcAddress;
   }

   return status;
}

⌨️ 快捷键说明

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