bug fix, But not applied

Dependencies:   ADXL362_bugFix stm-spirit1-rf-driver_for_cubebite

Fork of cubebite_rnd_ev-cog-ad3029lz_433MHz_2nd_testing2_RF10CountSensingCheckOK_180619_initReviseTest by JunMo Hong

main.cpp

Committer:
jmhong
Date:
2018-03-21
Revision:
0:c2a57b2f934e
Child:
1:04f46755f8af

File content as of revision 0:c2a57b2f934e:

//#include "mbed.h"
#include "ADXL362.h"
//#include "SimpleSpirit1.h"
#include "main.h"


//*************************************************************************************
//Define : Test, Compile 
//*************************************************************************************
/* 180108 cubebite HJM : cubebite Testing define, 1개씩만 켜야 함. */
#define CUBEBITE_RF_SPEED_TEST_SEND_ON
//#define CUBEBITE_RF_SPEED_TEST_RECV_ON


/* 180109 cubebite HJM : cubebite Compile define, 1개씩만 켜야 함. */
//#define CUBEBITE_BOARD_F746ZG
//#define CUBEBITE_BOARD_F401RE
#define CUBEBITE_BOARD_AD3029LZ


#define CUBEBITE_RF_SETTING_VALUE_PRINT
//*************************************************************************************

#define HEAVY_DEBUG



//DigitalOut led1(LED1);
//DigitalOut led2(LED2);
//ADXL362 adxl362(P1_07, P1_08, P1_06, P1_10);  // Accelerometer (mosi, miso, sclk, cs), SPI 1 
//ADXL362 adxl362(P0_01, P0_02, P0_00, P0_03);  // Accelerometer (mosi, miso, sclk, cs), SPI 0


//180321 HJM : IRQ를 GPIO 28 로 사용, send error를 띄움
//static SimpleSpirit1 &myspirit = SimpleSpirit1::CreateInstance(P0_01, P0_02, P0_00, P1_12 ,P2_08, P1_14);  
//                         // P0_01[SPI0_MOSI]
//                          // P0_02[SPI0_MISO], 
//                          // P0_00[SPI0_CLK], 
//                        // P1_12[GPIO 28, RF(GPIO 0)]->IRQ로 설정, 
//                        // P2_08[SPI0_CS2], 
//                        // P1_14[GPIO 30, RF (SDN)]


//180321 HJM : IRQ를 GPIO 27 로 사용,
static SimpleSpirit1 &myspirit = SimpleSpirit1::CreateInstance(P0_01, P0_02, P0_00, P1_11 ,P2_08, P1_14);  
                        // P0_01[SPI0_MOSI]
                        // P0_02[SPI0_MISO], 
                        // P0_00[SPI0_CLK], 
                        // P1_11[GPIO 27, RF(GPIO 2)]->IRQ로 설정, 
                        // P2_08[SPI0_CS2], 
                        // P1_14[GPIO 30, RF (SDN)]













//static SimpleSpirit1 &myspirit = SimpleSpirit1::CreateInstance(P0_01, P0_02, P0_00, P1_12 ,P2_08, P1_14);  
//                         // P0_01[SPI0_MOSI]
//                          // P0_02[SPI0_MISO], 
//                          // P0_00[SPI0_CLK], 
//                        // P1_12[GPIO 28, RF(GPIO 0)]->IRQ로 설정, (이건 맞음, 찍었을때 파형나옴)
//                        // P2_08[SPI0_CS2], 
//                        // P1_14[GPIO 30, RF (SDN)]



//static SimpleSpirit1 &myspirit = SimpleSpirit1::CreateInstance(P0_01, P0_02, P0_00, P1_12 , SPI0_CS2, P1_14);  
//                         // P0_01[SPI0_MOSI]
//                          // P0_02[SPI0_MISO], 
//                          // P0_00[SPI0_CLK], 
//                        // P1_12[GPIO 28, RF(GPIO 0)]->IRQ로 설정, (이건 맞음, 찍었을때 파형나옴)
//                        // P2_08[SPI0_CS2], 
//                        // P1_14[GPIO 30, RF (SDN)]


                        
//static SimpleSpirit1 &myspirit = SimpleSpirit1::CreateInstance(P1_03, P1_04, P1_02, P1_12 ,P2_10, P1_14);  
                         // P1_03[SPI2_MOSI]
                          // P1_04[SPI2_MISO], 
                          // P1_02[SPI2_CLK], 
                        // P1_12[GPIO 28, RF(GPIO 0)]->IRQ로 설정, (이건 맞음, 찍었을때 파형나옴)
                        // P2_10[SPI2_CS2], 
                        // P1_14[GPIO 30, RF (SDN)]




static int ReadRcvdData(SimpleSpirit1& myspirit);
static int ReadRcvdData_ClockMeasure_AckEnd(SimpleSpirit1& myspirit);

static int SendData(SimpleSpirit1& myspirit);
static int SendData_ClockMeasure_AckStart(SimpleSpirit1& myspirit);


enum RecvReturnValue
{
    CUBEBITE_RECV_OK = 0, CUBEBITE_RECV_ERROR_READ_NOTHING, CUBEBITE_RECV_ERROR_READ_NOT_MATCH
};

enum SendReturnValue
{
    CUBEBITE_SEND_OK = 0, CUBEBITE_SEND_ERROR, CUBEBITE_SEND_COLLISION, CUBEBITE_SEND_NOACK, CUBEBITE_SEND_ERROR_UNKNOWN
};


/**
 * @brief  callback_func
 * @param  callback event
 * @retval None.
 */
static void callback_func(int event) 
{
#ifdef  CUBEBITE_DEBUG
    printf("[CUBEBITE] callback_func(int event) \n");
#endif

  
    if(event == SimpleSpirit1::RX_DONE) 
    {         
        bRxDoneFlag = 1;
    }
    else if (event == SimpleSpirit1::TX_DONE) 
    {  
        bTxDoneFlag = 1;
    }
}


//HJM I2C PullUp Test
DigitalIn TempSupply(P1_11);


// main() runs in its own thread in the OS
int main() 
{
    // local variables
    int8_t x8 = 0;
    int8_t y8 = 0;
    int8_t z8 = 0;  
    uint8_t reg;
    int iReturn;
    
    printf("Hi Eureka!\r\n");
    
//    TempSupply.write(1);
    
    //// set up SPI interface
//    adxl362.init_spi();
//    
//    // Set up accelerometer
//    adxl362.init_adxl362(); 
//    
//    // Check settings
//    reg = adxl362.ACC_ReadReg(FILTER_CTL);
//    printf("FILTER_CTL = 0x%X\r\n", reg);
//    
    
    printf("P0_00 : [%d]      (0 << GPIO_PORT_SHIFT | 0 ) : [%d]\n", P0_00, (0 << GPIO_PORT_SHIFT | 0 ));
    printf("P1_00 : [%d]      (1 << GPIO_PORT_SHIFT | 0 ) : [%d]\n", P1_00, (1 << GPIO_PORT_SHIFT | 0 ));
    
    
    
    //printf("\n\nPIN Number 16, P2_03, ADC0_VIN0/GPIO35 : 십진수 -> [%d], 십육진수 -> [0x%X]\n", P2_03);
//    printf("PIN Number 17, P2_04, ADC0_VIN0/GPIO35 : 십진수 -> [%d], 십육진수 -> [0x%X]\n", P2_04);
//    printf("PIN Number 18, P2_05, ADC0_VIN0/GPIO35 : 십진수 -> [%d], 십육진수 -> [0x%X]\n", P2_05);
//    printf("PIN Number 19, P2_06, ADC0_VIN0/GPIO35 : 십진수 -> [%d], 십육진수 -> [0x%X]\n", P2_06);
//    printf("PIN Number 20, P2_07, ADC0_VIN0/GPIO35 : 십진수 -> [%d], 십육진수 -> [0x%X]\n", P2_07);
//    printf("PIN Number 21, P2_08, ADC0_VIN0/GPIO35 : 십진수 -> [%d], 십육진수 -> [0x%X]\n", P2_08);
//    printf("PIN Number 22, P2_09, ADC0_VIN0/GPIO35 : 십진수 -> [%d], 십육진수 -> [0x%X]\n", P2_09);
//    printf("PIN Number 23, P2_10, ADC0_VIN0/GPIO35 : 십진수 -> [%d], 십육진수 -> [0x%X]\n", P2_10);
//    printf("PIN Number 24, P0_05, ADC0_VIN0/GPIO35 : 십진수 -> [%d], 십육진수 -> [0x%X]\n", P0_05);
    
/* 180108 cubebite HJM : spirit module, init code  */
    printf("[CUBEBITE] Init ");
    /* LED off */
//    TestLED = 0; 
    myspirit.attach_irq_callback(callback_func);  
    iReturn = myspirit.on();
    if ( 0 == iReturn )
    {
        printf("OK.\n");    
    }
    else
    {
        printf("ERROR.\n");
    }
    
#ifdef  CUBEBITE_DEBUG
    printf("[CUBEBITE] CUBEBITE_DEBUG ON. \n");
#endif  //CUBEBITE_DEBUG


#ifdef  CUBEBITE_RF_SETTING_VALUE_PRINT
    printf("Xtal offset in ppm              : [%d]\n", XTAL_OFFSET_PPM);
    printf("base frequency                  : [%d]\n", (uint32_t)BASE_FREQUENCY);
    printf("channel space                   : [%d]\n", (uint32_t)CHANNEL_SPACE);
    printf("channel number                  : [%d]\n", CHANNEL_NUMBER);    
    printf("modulation select               : [%d]\n", MODULATION_SELECT);
    printf("data rate                       : [%d]\n", DATARATE);
    printf("frequency deviation             : [%d]\n", (uint32_t)FREQ_DEVIATION);
    printf("channel filter bandwidth        : [%d]\n", (uint32_t)BANDWIDTH);
    #ifdef  CUBEBITE_RF_SPEED_TEST_SEND_ON    
    printf("\nOutput Power(dBm)             : [%f]\n", POWER_DBM);
//    printf("\nOutput Power(dBm)             : [%f]\n", (float)CUBEBITE_OUTPUT_POWER_DBM_TEST);
    
    #endif  //CUBEBITE_RF_SPEED_TEST_SEND_ON
    
    #ifdef  CUBEBITE_RF_SPEED_TEST_RECV_ON
    printf("\nRSSI threshold Setting value  : [%d]\n", (int)CCA_THRESHOLD);
    #endif  //CUBEBITE_RF_SPEED_TEST_RECV_ON
    
    wait(2);
#endif  //CUBEBITE_RF_SETTING_VALUE_PRINT
    
    while(1) 
    {
        /* low power in idle condition., waiting for an event */
//        __WFE(); 
        
        

        
        
        
        
#ifdef  CUBEBITE_RF_SPEED_TEST_SEND_ON  
        iReturn = SendData(myspirit);
        if (CUBEBITE_SEND_OK == iReturn)
        {
            printf("[DEBUG] send OK.\n");
        }
        else if (CUBEBITE_SEND_ERROR == iReturn)
        {
            printf("[DEBUG] send ERROR.\n");
        }
        
        iReturn = (int)myspirit.get_last_sqi(); //HJM : LQI, 현재 주변 통신 품질 값, 높을수록 좋은 것.
        printf("get_last_sqi() return       : [%d]\n", iReturn);
#endif

#ifdef  CUBEBITE_RF_SPEED_TEST_RECV_ON
        if (bRxDoneFlag)
        {            
            iReturn = ReadRcvdData(myspirit);      
            if (CUBEBITE_RECV_OK == iReturn)
            {
                //통신 속도 체크시, 응답 send code.
                printf("[DEBUG] recv OK.\n");
                
                float fReturn1 = myspirit.get_last_rssi_dbm();
                printf("get_last_rssi_dbm() return       : [%f]\n", fReturn1);  //HJM : 위의 값과 같을 거라고 예상 됨. 나중에 테스트.    
                if (-50 < fReturn1)   //-80 < fReturn1
                {
                    TestLED3 = !TestLED3;     /* Toggle LED at the receiver */                    
                }
                else if (-50 >= fReturn1)
                {
//                    TestLED = !TestLED;     /* Toggle LED at the receiver */
                    TestLED2 = !TestLED2;     /* Toggle LED at the receiver */                    
//                    TestLED3 = !TestLED3;     /* Toggle LED at the receiver */
                }                
                else if (-70 >= fReturn1)    //-100 >= fReturn1
                {
                    TestLED = !TestLED;     /* Toggle LED at the receiver */                    
                }
            }
            bRxDoneFlag = 0;                        
        }
#endif        
        
    }
  /* unreachable */
  // myspirit.off();
  // return 0;
    
}




///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//recv






/**
 * @brief  ReadRcvdData
 * @param  None
 * @retval None
 */
static int ReadRcvdData(SimpleSpirit1& myspirit)
{  
#ifdef  CUBEBITE_DEBUG
    printf("[CUBEBITE] ReadRcvdData() 호출 됨. \n");  
#endif
 
    for(unsigned int flush_count = 0; flush_count < TEST_STR_LEN; flush_count++) uiRendBuf[flush_count] = 0 ;/* clear the read buffer */
    

    int ret = myspirit.read(uiRendBuf, sizeof(uiRendBuf));    
    if (ret == 0) 
    {
        printf("[CUBEBITE] Read() Error : Nothing to read\n");
        return CUBEBITE_RECV_ERROR_READ_NOTHING;
    }
    printf("ReadRcvdData() 1");
    
    printf("[DEBUG]recv -> %s ", uiRendBuf);

    ret = strcmp((const char *)uiRendBuf, (const char *)uiSendBuf);
    printf(" 3");
    if (0 == ret)
    {        
//        set_ack_bSendDataFlag(); //180118 HJM : 다시 바로 보내는 걸로 수정
//        printf("read, send buf collect!!\n");
//        TestLED = !TestLED;     /* Toggle LED at the receiver */
        printf(" 4");
//        bIsAckSended = true;
//        printf("[DEBUG]recv -> %s\n", uiRendBuf);
#ifdef  CUBEBITE_DEBUG
        printf("[DEBUG]recv -> %s\n", uiRendBuf);
#endif

        //746zg 보드        
//        wait(1.0);
/*
        int iRet = myspirit.send(uiSendAckBuf, sizetCurrAckBufLen);
        if (iRet == RADIO_TX_OK)
        {
        #ifdef  CUBEBITE_DEBUG
            printf("ACK : [RADIO_TX_OK]\n");
        #endif
        }
        else if (iRet == RADIO_TX_ERR)
        {
        #ifdef  CUBEBITE_DEBUG            
            printf("ACK : [RADIO_TX_ERR]\n");
        #endif
        }
        else if (iRet == RADIO_TX_COLLISION)
        {
        #ifdef  CUBEBITE_DEBUG            
            printf("ACK : [RADIO_TX_COLLISION]\n");
        #endif            
        }
        else if (iRet == RADIO_TX_NOACK)
        {
        #ifdef  CUBEBITE_DEBUG            
            printf("ACK : [RADIO_TX_NOACK]\n");
        #endif
        }                          
        */
        
        return CUBEBITE_RECV_OK;
        printf(" 5 ok\n");
    }


#ifdef  CUBEBITE_DEBUG
    printf("[CUBEBITE] ReadRcvdData() 호출 끝. \n");  
#endif

    return CUBEBITE_RECV_ERROR_READ_NOT_MATCH;
    printf(" 6 error\n");
}



static int ReadRcvdData_ClockMeasure_AckEnd(SimpleSpirit1& myspirit)
{  
#ifdef  CUBEBITE_DEBUG
    printf("[CUBEBITE] ReadRcvdData() 호출 됨. \n");  
#endif
 
    for(unsigned int flush_count = 0; flush_count < TEST_STR_LEN; flush_count++) uiRendBuf[flush_count] = 0 ;/* clear the read buffer */

    int ret = myspirit.read(uiRendBuf, sizeof(uiRendBuf));
    if (ret == 0) 
    {
        printf("[CUBEBITE] Read() Error : Nothing to read\n");
        return CUBEBITE_RECV_ERROR_READ_NOTHING;
    }
#ifdef  CUBEBITE_RF_SPEED_TEST_RECV_ON
    ret = strcmp((const char *)uiRendBuf, (const char *)uiSendBuf);
    if (0 == ret)
    {        
//        set_ack_bSendDataFlag(); //180118 HJM : 다시 바로 보내는 걸로 수정
//        printf("read, send buf collect!!\n");
        TestLED = !TestLED;     /* Toggle LED at the receiver */
//        bIsAckSended = true;
#ifdef  CUBEBITE_DEBUG
        printf("[DEBUG]recv -> %s\n", uiRendBuf);
#endif

        //746zg 보드        
//        wait(1.0);
/*
        int iRet = myspirit.send(uiSendAckBuf, sizetCurrAckBufLen);
        if (iRet == RADIO_TX_OK)
        {
        #ifdef  CUBEBITE_DEBUG
            printf("ACK : [RADIO_TX_OK]\n");
        #endif
        }
        else if (iRet == RADIO_TX_ERR)
        {
        #ifdef  CUBEBITE_DEBUG            
            printf("ACK : [RADIO_TX_ERR]\n");
        #endif
        }
        else if (iRet == RADIO_TX_COLLISION)
        {
        #ifdef  CUBEBITE_DEBUG            
            printf("ACK : [RADIO_TX_COLLISION]\n");
        #endif            
        }
        else if (iRet == RADIO_TX_NOACK)
        {
        #ifdef  CUBEBITE_DEBUG            
            printf("ACK : [RADIO_TX_NOACK]\n");
        #endif
        }                          
        */
        
        return CUBEBITE_RECV_OK;
    }
#endif

//#ifdef  CUBEBITE_RF_SPEED_TEST_SEND_ON 
//    //401re 보드
//    if (true == bIsSendFirstClockFunctionStarted)
//    {
//        clocktimeRFSpeedTestEnd = clock();
//    } 
//    //printf("[DEBUG]recv -> %s\n", uiRendBuf);
//#endif    


#ifdef  CUBEBITE_DEBUG
    printf("[CUBEBITE] ReadRcvdData() 호출 끝. \n");  
#endif

    return CUBEBITE_RECV_ERROR_READ_NOT_MATCH;
}






///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//send






/**
 * @brief  SendData
 * @param  None
 * @retval None
 */
static int SendData(SimpleSpirit1& myspirit)
{
//#ifdef  CUBEBITE_DEBUG
//    printf("[CUBEBITE] SendData() 호출 됨.\n");
//#endif
    printf("[CUBEBITE] SendData() 호출 됨.\n");
    while(myspirit.is_receiving()); /* wait for ongoing RX ends 180110 HJM 아마 이 전에 보내던 거 마저 다 보내려고 하는 거 같다. */

    size_t curr_len = strlen((const char*)uiSendBuf) + 1;
    int iRet = 0;

    printf("SendData() uiSendBuf -> [%s]\n", uiSendBuf);
    iRet = myspirit.send(uiSendBuf, curr_len);
    if (iRet == RADIO_TX_OK)
    {
#ifdef  CUBEBITE_DEBUG        
        printf("[RADIO_TX_OK]\n");
#endif
        return CUBEBITE_SEND_OK;
    }
    else if (iRet == RADIO_TX_ERR)
    {
#ifdef  CUBEBITE_DEBUG
        printf("[RADIO_TX_ERR]\n");
#endif
        return CUBEBITE_SEND_ERROR;
    }
    else if (iRet == RADIO_TX_COLLISION)
    {
#ifdef  CUBEBITE_DEBUG        
        printf("[RADIO_TX_COLLISION]\n");
#endif        
        return CUBEBITE_SEND_COLLISION;
    }
    else if (iRet == RADIO_TX_NOACK)
    {
#ifdef  CUBEBITE_DEBUG                
        printf("[RADIO_TX_NOACK]\n");
#endif  
        return CUBEBITE_SEND_NOACK;              
    }
    
#ifdef  CUBEBITE_DEBUG
    printf("[CUBEBITE] SendData() 호출 끝.\n");
#endif

    return CUBEBITE_SEND_ERROR_UNKNOWN;
}


static int SendData_ClockMeasure_AckStart(SimpleSpirit1& myspirit)
{
#ifdef  CUBEBITE_DEBUG
    printf("[CUBEBITE] SendData() 호출 됨.\n");
#endif
    while(myspirit.is_receiving()); /* wait for ongoing RX ends 180110 HJM 아마 이 전에 보내던 거 마저 다 보내려고 하는 거 같다. */

    size_t curr_len = strlen((const char*)uiSendBuf) + 1;
    int iRet = 0;

    iRet = myspirit.send(uiSendBuf, curr_len);
    if (iRet == RADIO_TX_OK)
    {
#ifdef  CUBEBITE_DEBUG        
        printf("[RADIO_TX_OK]\n");
#endif

//#ifdef  CUBEBITE_RF_SPEED_TEST_SEND_ON     
//        if (false == bIsSendFirstClockFunctionStarted)
//        {
//            clocktimeRFSpeedTestStart = clock();    
//            bIsSendFirstClockFunctionStarted = true;            
//        }
//#endif

        return CUBEBITE_SEND_OK;
    }
    else if (iRet == RADIO_TX_ERR)
    {
#ifdef  CUBEBITE_DEBUG
        printf("[RADIO_TX_ERR]\n");
#endif
        return CUBEBITE_SEND_ERROR;
    }
    else if (iRet == RADIO_TX_COLLISION)
    {
#ifdef  CUBEBITE_DEBUG        
        printf("[RADIO_TX_COLLISION]\n");
#endif        
        return CUBEBITE_SEND_COLLISION;
    }
    else if (iRet == RADIO_TX_NOACK)
    {
#ifdef  CUBEBITE_DEBUG                
        printf("[RADIO_TX_NOACK]\n");
#endif  
        return CUBEBITE_SEND_NOACK;              
    }
    
#ifdef  CUBEBITE_DEBUG
    printf("[CUBEBITE] SendData() 호출 끝.\n");
#endif

    return CUBEBITE_SEND_ERROR_UNKNOWN;
}