180718 HJM : 8 Count sensing data RF send, certTest, temp(cold)Test_

Dependencies:   1_cubebite_ev-cog-ad3029lz_433MHz_1nd_certTest stm-spirit1-rf-driver_for_cubebite2

Fork of cubebite_rnd_ev-cog-ad3029lz_433MHz_2nd_testing2_RF10CountSensingCheckOK_180619_initReviseTest by JunMo Hong

Revision:
1:04f46755f8af
Parent:
0:c2a57b2f934e
Child:
2:8861d01a78e4
--- a/main.cpp	Wed Mar 21 05:06:15 2018 +0000
+++ b/main.cpp	Fri Jun 22 03:43:49 2018 +0000
@@ -1,54 +1,166 @@
-//#include "mbed.h"
+//HJM : 선풍기 에이징 테스트 용 소스임.
+//180615 HJM : 선풍기 에이징 용 온도 1개 진동 10개 전송용 테스트 임.
+//            CUBEBITE_TEMPERATURE_DISABLE  define 값으로 온도 센서 (연결 및 미연결) 시 설정을 할 수 있음.
+
+
+
+#include "mbed.h"
 #include "ADXL362.h"
-//#include "SimpleSpirit1.h"
+#include "SimpleSpirit1.h"
 #include "main.h"
 
 
+
 //*************************************************************************************
 //Define : Test, Compile 
 //*************************************************************************************
+//#define CUBEBITE_DEBUG
+//#define HEAVY_DEBUG
+
+
 /* 180108 cubebite HJM : cubebite Testing define, 1개씩만 켜야 함. */
 #define CUBEBITE_RF_SPEED_TEST_SEND_ON
 //#define CUBEBITE_RF_SPEED_TEST_RECV_ON
-
+//#define CUBEBITE_RF_SPEED_TEST_SEND_AND_RECV_ON   //HJM : 추후 만들 예정..
 
 /* 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 CUBEBITE_TEMPERATURE_DISABLE
+
+
+//180411 HJM : 현재 1~3 까지 3대까지 가능 -> 게이트웨이에서 3대까지만 처리하게끔 되어있
+#define CUBEBITE_SENSOR_UUID        1   //180621 HJM : 온도 및 진동 테스트 용
+//#define CUBEBITE_SENSOR_UUID        2 //180621 HJM : 철기연 테스트 용
 //*************************************************************************************
 
-#define HEAVY_DEBUG
+
+
+
+//HJM : 타이머 인터럽트 테스트 용
+#ifdef  CUBEBITE_DEBUG
+    DigitalOut led1(LED1);
+#endif  
+
+
+
+
+//*************************************************************************************
+//HJM SUDO code : 3개 객체 생성->RF, 온도, 진동
+//*************************************************************************************
+//RF 객체
+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)]
+
+
+//온도 객체
+#ifndef CUBEBITE_TEMPERATURE_DISABLE
+I2C i2c(I2C_SDA, I2C_SCL);  //HJM : 테스트 용 임, 서대리님이 클래스 정리해서 줄 예정
+#endif
+
+//진동 객체(Accelerometer (mosi, miso, sclk, cs), SPI 1)
+ADXL362 adxl362(P1_07, P1_08, P1_06, P1_10); //HJM : 테스트 용 임, 서대리님이 클래스 정리해서 줄 예정
+
+//*************************************************************************************
+
+
+
+
+
+
+//*************************************************************************************
+//HJM SUDO code : main 사용자 함수 선언
+//*************************************************************************************
+
+
+static void callback_func(int event);   //RF user callback 함수임.
+void UserTimerInterrupt(void);          //1초, 타이머 인터럽트 임
+int UserTimerInterrupt_Execution(void);
+static int SendData(SimpleSpirit1& myspirit);
+
+
+//*************************************************************************************
+
+
+
+
+
 
 
 
-//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
+//*************************************************************************************
+//(테스트용)HJM SUDO code : 전역 변수, 진동, 온도 쪽 테스트용임. 추후 서대리님이 클래스 재 정의시 없어질 예정
+//*************************************************************************************
+
+
+
+
+//진동
+uint16_t vCnt = 0;
+uint8_t iCnt = 0;   
+
+//int16_t x16 = 0;
+//int16_t y16 = 0;
+//int16_t z16 = 0;
+int8_t x8 = 0;
+int8_t y8 = 0;
+int8_t z8 = 0;
+
+
+int8_t int8tX8Result = 0;
+int8_t int8tY8Result = 0;
+int8_t int8tZ8Result = 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)]
+int16_t temp_x16[3] = {0,};
+int16_t temp_y16[3] = {0,};
+int16_t temp_z16[3] = {0,};
+
+int Comp1_x = 0, Comp2_x = 0;
+int Comp1_y = 0, Comp2_y = 0;
+int Comp1_z = 0, Comp2_z = 0;
+
+float float_x = 0;
+float float_y = 0;
+float float_z = 0;     
+
+float G_x = 0;
+float G_y = 0;
+float G_z = 0;
+
+float  Output = 0;
+
+double dVibOutputSqrt = 0;
 
 
-//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)]
+//온도
+char wReg[2] = {0,};
+char rReg[2] = {0,};
+int wACK = 0;
+int rACK = 0;
+int16_t Tem16;
+float TempData = 0;
+
+#define busAddr 0x4F
+
+#define ID_DATA_ADDR 0x00
+#define ID_CON_ADDR 0x01
+#define ID_REG_ADDR 0x07
+
+
+//RF->이거도 클래스 내부에 넣기
+static volatile bool bRxDoneFlag = false; 
+static volatile bool bTxDoneFlag = false; 
+static volatile bool bSendDataFlag = false;
+
+//*************************************************************************************
 
 
 
@@ -58,64 +170,138 @@
 
 
 
-
+//HJM : I2C PullUp 용.. RF IRQ 도 이 핀 이지만 사용안하기 때문에 괜찮음.
+DigitalOut TempSupply(P1_12);
 
+bool iTempFlag = false;
+bool isTimerInterruptStarted = false;
+bool bIs1SecTimerSet = false;
+int iTempInitCount = 0;
+bool isTempInitOk = false;
+int main(void)
+{    
+//*************************************************************************************
+//HJM SUDO code : 진동, 온도, RF 초기화
+//*************************************************************************************    
+    
+    //필수!!!
+    TempSupply.write(1);
+    
+    
+    //진동 init_시작
+        // set up SPI interface
+    adxl362.init_spi();
+        // Set up accelerometer
+    adxl362.init_adxl362();
+    
+    wait_ms(25);
+    //진동 init_끝
+    
+    
+    //온도 init_시작    
+        //Power supply for the sensor is given from GPIO28(VDD_MCU_B).
+    
+#ifndef CUBEBITE_TEMPERATURE_DISABLE
+    i2c.frequency(100000);
+#endif
+    
+        // JMOD Init
+#ifndef CUBEBITE_TEMPERATURE_DISABLE        
+    wReg[0] = ID_CON_ADDR;
+    
+    while(rReg[0] != 0x03)
+    {
+        //write 0x00(ID_CON_ADDR) 
+        wReg[1] = 0x00;
+        wACK = i2c.write(busAddr, wReg, 2);
 
+        //read 0x00(ID_CON_ADDR) 
+        wACK = i2c.write(busAddr, wReg, 1);
+        rACK = i2c.read(busAddr, rReg, 1);
+    
+        wait_ms(250);     
+        
+        //write 0x03(ID_CON_ADDR) 
+        wReg[1] = 0x03;
+        wACK = i2c.write(busAddr, wReg, 2);
+
+        //read 0x03(ID_CON_ADDR) 
+        wACK = i2c.write(busAddr, wReg, 1);
+        rACK = i2c.read(busAddr, rReg, 1);
+    
+        i2c.write(busAddr, wReg, 2);
 
-//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)]
-
+        if(rReg[0] == 0x03)
+        {
+            printf(" (Success!!)\n\n");
 
-
-//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)]
+            //write 0x00(ID_CON_ADDR) 
+            wReg[1] = 0x00;
+            wACK = i2c.write(busAddr, wReg, 2);
+            isTempInitOk = true;
+            wait_ms(250);     
+        }
+        else if (3 == iTempInitCount)
+        {
+            isTempInitOk = false;
+            break;
+        }
+        else
+        {
+            printf(".");
+            ++iTempInitCount;
+        }
+        
+        wait_ms(500);           
+    }
+#endif    
+    //온도 init_끝
+    
+    
+    
+    //RF init_시작    
+    myspirit.attach_irq_callback(callback_func);      
+    if (myspirit.on())
+    {
+        printf("ERROR.\n");        
+    }
+    else
+    {
+        printf("OK.\n"); 
+    }    
+    //RF init_끝
+//*************************************************************************************    
+    
+    
+    
+//*************************************************************************************
+//HJM SUDO code : 1초 타이머 인터럽트 생성, 1초 간격 호출 함수 : UserTimerInterrupt()
+//*************************************************************************************
+//    Timeout timeoutUserInterrupt;                         //1번만 실행
+//    Ticker timeoutUserInterrupt;                            //매번 실행
+//    timeoutUserInterrupt.attach(&UserTimerInterrupt, 1.0); //1 sec 
+//    timeoutUserInterrupt.attach(&UserTimerInterrupt, 3.0); //3 sec 
+//*************************************************************************************
+    
+    wait(1);
+    
+    
+    while(1)
+    {
+        __WFE();    //HJM : sleep 모드 ON                
+        
+        UserTimerInterrupt_Execution();
+        if (true == isTimerInterruptStarted)
+        {            
+            isTimerInterruptStarted = false;
+            SendData(myspirit);                                                    
+        }        
+    }
 
 
-                        
-//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);
+//    return 0; //unreachable
+}
 
-
-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
@@ -134,345 +320,165 @@
 }
 
 
-//HJM I2C PullUp Test
-DigitalIn TempSupply(P1_11);
 
-
-// main() runs in its own thread in the OS
-int main() 
+void UserTimerInterrupt(void)
 {
-    // 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");
-    }
-    
+//*************************************************************************************
+//HJM : 타이머 인터럽트 작동 테스트
+//*************************************************************************************    
+//180329 HJM : 작동 테스트 완료
 #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);
+    led1 = !led1;
 #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        
-        
+//*************************************************************************************
+    
+    if (false == bIs1SecTimerSet)
+    {
+        bIs1SecTimerSet = true;        
     }
-  /* unreachable */
-  // myspirit.off();
-  // return 0;
-    
+
+    return;    
 }
 
 
-
-
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-//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 */
+volatile int iFunctionCallCounting = 0;
+int UserTimerInterrupt_Execution(void)
+{
+//    printf("UserTimerInterrupt_Execution 호출, dataCount : [%d]\n", dataCount);
+    ++iFunctionCallCounting;
     
-
-    int ret = myspirit.read(uiRendBuf, sizeof(uiRendBuf));    
-    if (ret == 0) 
+    if (false == isTimerInterruptStarted)
     {
-        printf("[CUBEBITE] Read() Error : Nothing to read\n");
-        return CUBEBITE_RECV_ERROR_READ_NOTHING;
-    }
-    printf("ReadRcvdData() 1");
+        //진동    
+        adxl362.ACC_GetXYZ8(&x8, &y8, &z8);        
+        
+        if (0 == x8)
+        {
+            uiSendBuf[dataCount++] = '0';
+            uiSendBuf[dataCount++] = 'x';
+            uiSendBuf[dataCount++] = '@';            
+        }
+        else
+        {
+            int8tX8Result = x8;
+                                    
+            uiSendBuf[dataCount++] = (uint8_t)int8tX8Result;            
+        }
+        
+        if (0 == y8)
+        {
+            uiSendBuf[dataCount++] = '0';
+            uiSendBuf[dataCount++] = 'y';
+            uiSendBuf[dataCount++] = '@';
+        }
+        else
+        {
+            int8tY8Result = y8;   
+            
+            uiSendBuf[dataCount++] = (uint8_t)int8tY8Result; 
+        }
+        
+        if (0 == z8)
+        {
+            uiSendBuf[dataCount++] = '0';
+            uiSendBuf[dataCount++] = 'z';
+            uiSendBuf[dataCount++] = '@';
+        }                      
+        else
+        {
+            int8tZ8Result = z8;            
+                        
+            uiSendBuf[dataCount++] = (uint8_t)int8tZ8Result;   
+        }  
+        
+//        printf("int8tX8Result : %d\n", (uint8_t)int8tX8Result);
+        
+//        printf("int8tY8Result : %d\n", (uint8_t)int8tY8Result);
+        
+//        printf("int8tZ8Result : %d\n", (uint8_t)int8tZ8Result);
+                    
+                
+         
     
-    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)
+            wait(0.025); // 25ms, Wait is required in this mode
+    
+        //온도     
+    //        temperature data receive
+#ifndef CUBEBITE_TEMPERATURE_DISABLE
+        if (true == isTempInitOk)
         {
-        #ifdef  CUBEBITE_DEBUG            
-            printf("ACK : [RADIO_TX_NOACK]\n");
-        #endif
-        }                          
-        */
+            wReg[0] = ID_DATA_ADDR;
+    
+            i2c.write(busAddr, wReg, 1);
+            i2c.read(busAddr, rReg, 2);
         
-        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
+            Tem16 = (rReg[0] << 8) | (rReg[1]);
+            Tem16 >>= 5;
+            TempData = Tem16;
+            
+            TempData = TempData *0.125;
+            
+            if (0 == rReg[0])
+            {            
+                uiSendBuf[dataCount++] = '0';            
+    //            uiSendBuf[dataCount++] = '1';            
+            }
+            else
+            {
+                uiSendBuf[dataCount++] = (uint8_t)rReg[0];    
+            }
+            
+            if (0 == rReg[1])
+            {
+                uiSendBuf[dataCount++] = '0';            
+    //            uiSendBuf[dataCount++] = '2';            
+            }
+            else
+            {
+                uiSendBuf[dataCount++] = (uint8_t)rReg[1];            
+            }
+        }
+        else
+        {
+            uiSendBuf[dataCount++] = '0';
+            uiSendBuf[dataCount++] = '0';
+        }
+        
 
-        //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
-        }                          
-        */
+#else   //온도 안쓰면,
+        uiSendBuf[dataCount++] = '0';
+        uiSendBuf[dataCount++] = '0';
+#endif
+    
+#ifdef  CUBEBITE_DEBUG    
+        printf("!!!!!!!!!!!!!! cFileWriteData : %d@%d@%d@%f\n", x8, y8, z8, TempData);        
+#endif  //CUBEBITE_DEBUG
+        
+    
+//        printf("iFunctionCallCounting : [%d]\n", iFunctionCallCounting);
+        
+        uiSendBuf[dataCount++] = '#';        
+        uiSendBuf[dataCount++] = '#';
         
-        return CUBEBITE_RECV_OK;
+        wait(0.025); // 25ms, Wait is required in this mode
+    
     }
-#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;
+    
+    if (iFunctionCallCounting >= 10)    //10번의 측정이 끝나면,
+    {
+        isTimerInterruptStarted = true;
+//        printf("if in!!\n");
+        
+        uiSendBuf[dataCount++] = '*';        
+        uiSendBuf[dataCount++] = '*';
+        
+        uiSendBuf[dataCount] = CUBEBITE_SENSOR_UUID;
+                           
+        iFunctionCallCounting = 0;
+    }  
+    
+    return 0;
 }
 
 
@@ -480,29 +486,9 @@
 
 
 
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-//send
+
+
+
 
 
 
@@ -516,107 +502,83 @@
  */
 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 아마 이 전에 보내던 거 마저 다 보내려고 하는 거 같다. */
+#ifdef  CUBEBITE_DEBUG
+    printf("=========================================\n");
+#endif  //CUBEBITE_DEBUG    
 
+#ifdef  CUBEBITE_DEBUG
+    printf("[CUBEBITE] SendData() 호출 됨.\n");
+#endif  //CUBEBITE_DEBUG    
+    
+    int iRet;
+    while(myspirit.is_receiving()); /* wait for ongoing RX ends 180110 HJM 아마 이 전에 보내던 거 마저 다 보내려고 하는 거 같다. */
+    
     size_t curr_len = strlen((const char*)uiSendBuf) + 1;
-    int iRet = 0;
+//    printf("curr_len : [%d]\n", curr_len);
+    
+    
+    iRet = myspirit.send(uiSendBuf, curr_len);
+    
+    
+    dataCount = 0;    
+    for (int iTemp = 0; iTemp < TEST_STR_LEN; ++iTemp)
+    {
+        uiSendBuf[iTemp] = 0;
+    }
+    
+//    static uint8_t uiRFSpeedTestSendBuf[MAX_BUFFER_LEN] = { 0, };  //70 Byte    //성공    
 
-    printf("SendData() uiSendBuf -> [%s]\n", uiSendBuf);
-    iRet = myspirit.send(uiSendBuf, curr_len);
+//    sprintf((char *)uiRFSpeedTestSendBuf, "%f@%f@%f@%f@%f", G_x, G_y, G_z, Output, TempData);    //HJM : 데이터 파싱 용
+//    sprintf((char *)uiRFSpeedTestSendBuf, "%.2f@%.2f@%.2f@%.2lf@%.2f@%d", G_x, G_y, G_z, dVibOutputSqrt, TempData, CUBEBITE_SENSOR_UUID);    //HJM : 데이터 파싱 용
+//    printf("%.2f@%.2f@%.2f@%.2lf@%.2f@%d\n\n", G_x, G_y, G_z, dVibOutputSqrt, TempData, CUBEBITE_SENSOR_UUID);
+
+    //서버 에서 split 처리 시, 아래와 같음.
+    //0 -> 진동 x 축 값
+    //1 -> 진동 y 축 값
+    //2 -> 진동 z 축 값
+    //3 -> 온도 값
+    //
+ 
+//    iRet = myspirit.send(uiSendBuf, curr_len);
     if (iRet == RADIO_TX_OK)
     {
-#ifdef  CUBEBITE_DEBUG        
-        printf("[RADIO_TX_OK]\n");
-#endif
-        return CUBEBITE_SEND_OK;
+        return RADIO_TX_OK;
     }
     else if (iRet == RADIO_TX_ERR)
     {
-#ifdef  CUBEBITE_DEBUG
-        printf("[RADIO_TX_ERR]\n");
-#endif
-        return CUBEBITE_SEND_ERROR;
+        return RADIO_TX_ERR;
     }
     else if (iRet == RADIO_TX_COLLISION)
-    {
-#ifdef  CUBEBITE_DEBUG        
-        printf("[RADIO_TX_COLLISION]\n");
-#endif        
-        return CUBEBITE_SEND_COLLISION;
+    {     
+        return RADIO_TX_COLLISION;
     }
     else if (iRet == RADIO_TX_NOACK)
     {
-#ifdef  CUBEBITE_DEBUG                
-        printf("[RADIO_TX_NOACK]\n");
-#endif  
-        return CUBEBITE_SEND_NOACK;              
+        return RADIO_TX_NOACK;              
     }
+    else if (iRet == RADIO_TX_ERR_RESET)
+    {
+        printf("RADIO_TX_ERR_RESET return.\n");
+//        myspirit.off();
+        myspirit.reset_board();
+        myspirit.off();
+        myspirit.on();
+    }
+    
+    dataCount = 0;
+    
+    for (int iTemp = 0; iTemp < TEST_STR_LEN; ++iTemp)
+    {
+        uiSendBuf[iTemp] = 0;
+    }
+        
     
 #ifdef  CUBEBITE_DEBUG
     printf("[CUBEBITE] SendData() 호출 끝.\n");
 #endif
 
-    return CUBEBITE_SEND_ERROR_UNKNOWN;
+    return -10;
 }
 
 
-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;
-}
-