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
Diff: main.cpp
- Revision:
- 1:04f46755f8af
- Parent:
- 0:c2a57b2f934e
- Child:
- 2:b87c19873d46
--- 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; -} -