JunMo Hong / Mbed 2 deprecated cubebite_rnd_SPSGRFC433

Dependencies:   mbed

Fork of HelloWorld_IDS01A4 by ST

Committer:
jmhong
Date:
Fri Jan 12 04:57:19 2018 +0000
Revision:
11:f8396aa48de6
Parent:
10:cc81b87e005e
Child:
12:5e20115bd13b
180112_RF Speed Test_HJM : commit test, export test

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rosarium 0:2ddc0583bcec 1 /**
rosarium 0:2ddc0583bcec 2 ******************************************************************************
rosarium 0:2ddc0583bcec 3 * @file main.cpp
jmhong 11:f8396aa48de6 4 * @author JMHong, Cubebite
rosarium 0:2ddc0583bcec 5 * @version V1.0.0
jmhong 11:f8396aa48de6 6 * @date June 19th, 2018
rosarium 4:cae1fa054b86 7 * @brief mbed test application for the STMicroelectronics X-NUCLEO-IDB01A4/5
jmhong 11:f8396aa48de6 8 * Spirit1 Module(SPSGRFC-433)
rosarium 0:2ddc0583bcec 9 ******************************************************************************
rosarium 0:2ddc0583bcec 10 * @attention
rosarium 0:2ddc0583bcec 11 *
jmhong 11:f8396aa48de6 12 * <h2><center>&copy; COPYRIGHT(c) 2018 Cubebite</center></h2>
rosarium 0:2ddc0583bcec 13 *
rosarium 0:2ddc0583bcec 14 ******************************************************************************
rosarium 0:2ddc0583bcec 15 */
rosarium 0:2ddc0583bcec 16
jmhong 11:f8396aa48de6 17 //*************************************************************************************
jmhong 11:f8396aa48de6 18 //Include
jmhong 11:f8396aa48de6 19 //*************************************************************************************
rosarium 0:2ddc0583bcec 20 #include "mbed.h"
rosarium 0:2ddc0583bcec 21 #include "SimpleSpirit1.h"
jmhong 11:f8396aa48de6 22 //*************************************************************************************
rosarium 0:2ddc0583bcec 23
jmhong 11:f8396aa48de6 24
jmhong 11:f8396aa48de6 25 //*************************************************************************************
jmhong 11:f8396aa48de6 26 //Define : Debug
jmhong 11:f8396aa48de6 27 //*************************************************************************************
jmhong 10:cc81b87e005e 28 /* 180108 cubebite HJM : SimpleSpirit1 Debug define */
jmhong 10:cc81b87e005e 29 #define NDEBUG
jmhong 10:cc81b87e005e 30 #define HEAVY_DEBUG
jmhong 10:cc81b87e005e 31
jmhong 10:cc81b87e005e 32
jmhong 10:cc81b87e005e 33 /* 180108 cubebite HJM : cubebite Debug define */
jmhong 11:f8396aa48de6 34 //#define CUBEBITE_DEBUG
jmhong 11:f8396aa48de6 35 //*************************************************************************************
jmhong 10:cc81b87e005e 36
jmhong 10:cc81b87e005e 37
jmhong 11:f8396aa48de6 38 //*************************************************************************************
jmhong 11:f8396aa48de6 39 //Define : Test, Compile
jmhong 11:f8396aa48de6 40 //*************************************************************************************
jmhong 11:f8396aa48de6 41 /* 180108 cubebite HJM : cubebite Testing define, 1개씩만 켜야 함. */
jmhong 11:f8396aa48de6 42 //#define CUBEBITE_RF_USER_BUTTON_SEND_TEST
jmhong 10:cc81b87e005e 43 //#define CUBEBITE_RF_DEVICE_PARTNUMBER_TEST
jmhong 10:cc81b87e005e 44 //#define CUBEBITE_RF_GPIO_0_TEST
jmhong 11:f8396aa48de6 45 #define CUBEBITE_RF_SPEED_TEST_SEND_ON
jmhong 11:f8396aa48de6 46 //#define CUBEBITE_RF_SPEED_TEST_RECV_ON
jmhong 10:cc81b87e005e 47
jmhong 10:cc81b87e005e 48
jmhong 11:f8396aa48de6 49 /* 180109 cubebite HJM : cubebite Compile define, 1개씩만 켜야 함. */
jmhong 10:cc81b87e005e 50 //#define CUBEBITE_BOARD_F746ZG
jmhong 10:cc81b87e005e 51 #define CUBEBITE_BOARD_F401RE
jmhong 11:f8396aa48de6 52 //*************************************************************************************
jmhong 10:cc81b87e005e 53
jmhong 10:cc81b87e005e 54
jmhong 11:f8396aa48de6 55 //*************************************************************************************
jmhong 11:f8396aa48de6 56 //Global variable : Create an instance by board
jmhong 11:f8396aa48de6 57 //*************************************************************************************
jmhong 10:cc81b87e005e 58 /* 180108 cubebite HJM : orignal code, backup */
jmhong 10:cc81b87e005e 59 //static SimpleSpirit1 &myspirit = SimpleSpirit1::CreateInstance(D11, D12, D3, D9, D10, D2); /* (SPI_CLK) = (D13:PA5:resistorR7 --> D3:PB3:resistorR4)*/
jmhong 10:cc81b87e005e 60
jmhong 10:cc81b87e005e 61 #ifdef CUBEBITE_BOARD_F401RE
jmhong 10:cc81b87e005e 62 /* 180108 cubebite HJM : F401re borad, AnalogIn PIN Info, A0(PA_0) A1(PA_1) A2(PA_4) A3(PB_0) A4(PC_1) A5(PC_0) */
jmhong 10:cc81b87e005e 63 /* RF Module 과 상관 관계 => A0(PA_0)[SPI GPIO 3] A1(PA_1)[CSN] A2(PA_4)[SPI1 GPIO 2] A3(PB_0)[SPI1 GPIO 1] A4(PC_1)[SPI1_GPIO 0] */
jmhong 10:cc81b87e005e 64 /* 180108 cubebite HJM : F401re borad Init code */
jmhong 10:cc81b87e005e 65 //static SimpleSpirit1 &myspirit = SimpleSpirit1::CreateInstance(PA_7, PA_6, PA_5, PC_7, PB_6, PA_10); //F401re borad
jmhong 10:cc81b87e005e 66 static SimpleSpirit1 &myspirit = SimpleSpirit1::CreateInstance(PA_7, PA_6, PA_5, PA_0, PB_6, PA_10); //F401re borad, IRQ Testing, GPIO 3 -> IRQ
jmhong 10:cc81b87e005e 67 #endif
jmhong 10:cc81b87e005e 68
jmhong 10:cc81b87e005e 69
jmhong 10:cc81b87e005e 70
jmhong 10:cc81b87e005e 71 #ifdef CUBEBITE_BOARD_F746ZG
jmhong 10:cc81b87e005e 72 /* 180108 cubebite HJM : F746zg borad, AnalogIn PIN Info, A0(PA_3) A1(PC_0) A2(PC_3) A3(PF_3) A4(PF_5) A5(PF_10) */
jmhong 10:cc81b87e005e 73 /* RF Module 과 상관 관계 => A0(PA_3)[SPI GPIO 3] A1(PC_0)[CSN] A2(PC_3)[SPI1 GPIO 2] A3(PF_3)[SPI1 GPIO 1] A4(PF_5)[SPI1_GPIO 0] */
jmhong 10:cc81b87e005e 74 /* 180108 cubebite HJM : F746zg borad Init code */
jmhong 10:cc81b87e005e 75 //static SimpleSpirit1 &myspirit = SimpleSpirit1::CreateInstance(PB_5, PB_4, PB_3, PD_14, PD_5, PD_6); //F746zg borad
jmhong 10:cc81b87e005e 76 static SimpleSpirit1 &myspirit = SimpleSpirit1::CreateInstance(PB_5, PB_4, PB_3, PA_3, PD_5, PD_6); //F746zg borad, IRQ Testing, GPIO 3 -> IRQ
jmhong 10:cc81b87e005e 77 #endif
jmhong 11:f8396aa48de6 78 //*************************************************************************************
jmhong 11:f8396aa48de6 79
jmhong 11:f8396aa48de6 80
jmhong 11:f8396aa48de6 81 //*************************************************************************************
jmhong 11:f8396aa48de6 82 //Global variable : LEDs and user buttons by board
jmhong 11:f8396aa48de6 83 //*************************************************************************************
jmhong 11:f8396aa48de6 84 #ifdef CUBEBITE_BOARD_F401RE
jmhong 11:f8396aa48de6 85 static DigitalOut TestLED(D5); /* LED of IDS01A4/5 */
jmhong 11:f8396aa48de6 86 #endif
jmhong 10:cc81b87e005e 87
jmhong 10:cc81b87e005e 88 #ifdef CUBEBITE_BOARD_F746ZG
jmhong 11:f8396aa48de6 89 static DigitalOut TestLED(PB_0); /* LED of IDS01A4/5 */
jmhong 11:f8396aa48de6 90 #endif
jmhong 11:f8396aa48de6 91
jmhong 11:f8396aa48de6 92 #ifdef CUBEBITE_RF_USER_BUTTON_SEND_TEST
jmhong 11:f8396aa48de6 93 static InterruptIn event(USER_BUTTON); /* Interrupt event to give userinterface to send pkt. */
jmhong 11:f8396aa48de6 94 #endif
jmhong 11:f8396aa48de6 95 //*************************************************************************************
jmhong 11:f8396aa48de6 96
jmhong 11:f8396aa48de6 97
jmhong 11:f8396aa48de6 98 //*************************************************************************************
jmhong 11:f8396aa48de6 99 //Global variable : Rf Send, read Buffer
jmhong 11:f8396aa48de6 100 //*************************************************************************************
jmhong 11:f8396aa48de6 101 /* 180108 cubebite HJM : send testing, orignal code */
jmhong 11:f8396aa48de6 102 #define TEST_STR_LEN (32)
jmhong 11:f8396aa48de6 103 static uint8_t send_buf[TEST_STR_LEN] ={'S','P','I','R','I','T','1',' ','H','E','L','L','O',' ','W','O','R','L','D',' ','P','2','P',' ','D','E','M','O'};
jmhong 11:f8396aa48de6 104 static uint8_t read_buf[TEST_STR_LEN] ={'0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'};
jmhong 11:f8396aa48de6 105 //*************************************************************************************
jmhong 11:f8396aa48de6 106
jmhong 11:f8396aa48de6 107
jmhong 11:f8396aa48de6 108 //*************************************************************************************
jmhong 11:f8396aa48de6 109 //Global variable : tx, rx Flag
jmhong 11:f8396aa48de6 110 //*************************************************************************************
jmhong 11:f8396aa48de6 111 static volatile bool rx_done_flag = false;
jmhong 11:f8396aa48de6 112 static volatile bool tx_done_flag = false;
jmhong 11:f8396aa48de6 113 static volatile bool send_data_flag = false;
jmhong 11:f8396aa48de6 114 //*************************************************************************************
jmhong 11:f8396aa48de6 115
jmhong 11:f8396aa48de6 116
jmhong 11:f8396aa48de6 117 //*************************************************************************************
jmhong 11:f8396aa48de6 118 //Global variable : Testing
jmhong 11:f8396aa48de6 119 //*************************************************************************************
jmhong 11:f8396aa48de6 120 /* Test : GPIO 0 */
jmhong 11:f8396aa48de6 121 #ifdef CUBEBITE_RF_GPIO_0_TEST
jmhong 11:f8396aa48de6 122 #ifdef CUBEBITE_BOARD_F401RE
jmhong 11:f8396aa48de6 123 /* 180108 cubebite HJM : F401re borad, PC_1 == RF_MODULE_GPIO 0, Testing code */
jmhong 11:f8396aa48de6 124 static DigitalIn RF_GPIO_0_INPUT(PC_1); //F401re borad
jmhong 11:f8396aa48de6 125 //static DigitalIn RF_GPIO_3_INPUT(PA_0); //F401re borad, 사용시, send 정상 동작 안함, Spirit1 IRQ 핀이랑 같이 물려있기 때문
jmhong 10:cc81b87e005e 126 #endif
jmhong 10:cc81b87e005e 127 #endif
jmhong 10:cc81b87e005e 128
jmhong 11:f8396aa48de6 129 #ifdef CUBEBITE_RF_GPIO_0_TEST
jmhong 11:f8396aa48de6 130 #ifdef CUBEBITE_BOARD_F746ZG
jmhong 11:f8396aa48de6 131 /* 180108 cubebite HJM : F746zg borad, PC_1 == RF_MODULE_GPIO 0, Testing code */
jmhong 11:f8396aa48de6 132 static DigitalIn RF_GPIO_0_INPUT(PF_5); //F746zg borad
jmhong 10:cc81b87e005e 133 //static DigitalIn RF_GPIO_3_INPUT(PA_3); //F746zg borad, 사용시, send 정상 동작 안함, Spirit1 IRQ 핀이랑 같이 물려있기 때문
jmhong 11:f8396aa48de6 134 #endif
jmhong 11:f8396aa48de6 135 #endif
jmhong 11:f8396aa48de6 136
jmhong 11:f8396aa48de6 137
jmhong 11:f8396aa48de6 138
jmhong 11:f8396aa48de6 139 /* Test : RF Speed Test */
jmhong 11:f8396aa48de6 140 #ifdef CUBEBITE_RF_SPEED_TEST_SEND_ON
jmhong 11:f8396aa48de6 141 static clock_t clockRfSpeedTestStart, clockRfSpeedTestEnd;
jmhong 11:f8396aa48de6 142 static float fRfSpeedTestResult;
jmhong 11:f8396aa48de6 143
jmhong 11:f8396aa48de6 144 static bool bIsSendFirstClockFunctionStarted = false;
jmhong 11:f8396aa48de6 145 static bool bIsSetSendFlag = false;
jmhong 11:f8396aa48de6 146 #endif
jmhong 11:f8396aa48de6 147
jmhong 11:f8396aa48de6 148 #ifdef CUBEBITE_RF_SPEED_TEST_RECV_ON
jmhong 11:f8396aa48de6 149 #define TEST_ACK_STR_LEN (6)
jmhong 11:f8396aa48de6 150 static uint8_t send_ack_buf[TEST_ACK_STR_LEN] ={'O','K'};
jmhong 11:f8396aa48de6 151 size_t curr_ack_len = strlen((const char*)send_ack_buf) + 1;
jmhong 11:f8396aa48de6 152
jmhong 11:f8396aa48de6 153 static bool bIsAckSended = false;
jmhong 11:f8396aa48de6 154 #endif
jmhong 11:f8396aa48de6 155 //*************************************************************************************
jmhong 10:cc81b87e005e 156
jmhong 10:cc81b87e005e 157
jmhong 10:cc81b87e005e 158
jmhong 10:cc81b87e005e 159
rosarium 0:2ddc0583bcec 160
jmhong 11:f8396aa48de6 161
jmhong 11:f8396aa48de6 162
jmhong 11:f8396aa48de6 163
rosarium 0:2ddc0583bcec 164
jmhong 11:f8396aa48de6 165
jmhong 11:f8396aa48de6 166
jmhong 11:f8396aa48de6 167
jmhong 11:f8396aa48de6 168
rosarium 0:2ddc0583bcec 169
jmhong 10:cc81b87e005e 170
jmhong 10:cc81b87e005e 171
rosarium 1:cf2e2f85bf8d 172 /**
rosarium 1:cf2e2f85bf8d 173 * @brief callback_func
rosarium 1:cf2e2f85bf8d 174 * @param callback event
rosarium 1:cf2e2f85bf8d 175 * @retval None.
rosarium 1:cf2e2f85bf8d 176 */
rosarium 0:2ddc0583bcec 177 static void callback_func(int event)
rosarium 0:2ddc0583bcec 178 {
jmhong 11:f8396aa48de6 179 #ifdef CUBEBITE_DEBUG
jmhong 11:f8396aa48de6 180 printf("[CUBEBITE] callback_func(int event) \n");
jmhong 11:f8396aa48de6 181 #endif
jmhong 11:f8396aa48de6 182
jmhong 11:f8396aa48de6 183
jmhong 10:cc81b87e005e 184
jmhong 11:f8396aa48de6 185 if(event == SimpleSpirit1::RX_DONE)
jmhong 11:f8396aa48de6 186 {
jmhong 11:f8396aa48de6 187 rx_done_flag = 1;
jmhong 11:f8396aa48de6 188 }
jmhong 11:f8396aa48de6 189 else if (event == SimpleSpirit1::TX_DONE)
jmhong 11:f8396aa48de6 190 {
jmhong 11:f8396aa48de6 191 tx_done_flag = 1;
jmhong 11:f8396aa48de6 192 }
rosarium 0:2ddc0583bcec 193 }
rosarium 0:2ddc0583bcec 194
jmhong 11:f8396aa48de6 195
jmhong 11:f8396aa48de6 196
jmhong 11:f8396aa48de6 197
rosarium 4:cae1fa054b86 198 /**
rosarium 4:cae1fa054b86 199 * @brief set_send_data_flag
rosarium 4:cae1fa054b86 200 * @param None
rosarium 4:cae1fa054b86 201 * @retval None
rosarium 4:cae1fa054b86 202 */
wobetz 5:a65ed26b0f98 203 static void set_send_data_flag(void)
rosarium 4:cae1fa054b86 204 {
jmhong 11:f8396aa48de6 205 send_data_flag = 1 ;
rosarium 4:cae1fa054b86 206 }
rosarium 1:cf2e2f85bf8d 207
jmhong 11:f8396aa48de6 208
jmhong 11:f8396aa48de6 209
jmhong 11:f8396aa48de6 210
jmhong 11:f8396aa48de6 211
jmhong 11:f8396aa48de6 212
rosarium 1:cf2e2f85bf8d 213 /**
rosarium 1:cf2e2f85bf8d 214 * @brief send_data
rosarium 1:cf2e2f85bf8d 215 * @param None
rosarium 1:cf2e2f85bf8d 216 * @retval None
rosarium 1:cf2e2f85bf8d 217 */
wobetz 5:a65ed26b0f98 218 static void send_data(void)
wobetz 5:a65ed26b0f98 219 {
jmhong 11:f8396aa48de6 220 #ifdef CUBEBITE_DEBUG
jmhong 11:f8396aa48de6 221 printf("[CUBEBITE] send_data() 호출 됨.\n");
jmhong 11:f8396aa48de6 222 printf("[CUBEBITE] myspirit, is_receiving()\t......");
jmhong 11:f8396aa48de6 223 #endif
jmhong 11:f8396aa48de6 224 while(myspirit.is_receiving()); /* wait for ongoing RX ends 180110 HJM 아마 이 전에 보내던 거 마저 다 보내려고 하는 거 같다. */
jmhong 11:f8396aa48de6 225 #ifdef CUBEBITE_DEBUG
jmhong 11:f8396aa48de6 226 printf("OK\n");
jmhong 11:f8396aa48de6 227 #endif
jmhong 11:f8396aa48de6 228
jmhong 11:f8396aa48de6 229
jmhong 11:f8396aa48de6 230 size_t curr_len = strlen((const char*)send_buf) + 1;
jmhong 10:cc81b87e005e 231 int iRet = 0;
jmhong 11:f8396aa48de6 232
jmhong 11:f8396aa48de6 233
jmhong 11:f8396aa48de6 234 #ifdef CUBEBITE_DEBUG
jmhong 11:f8396aa48de6 235 printf("[CUBEBITE] myspirit, send()\t......");
jmhong 11:f8396aa48de6 236 #endif
jmhong 11:f8396aa48de6 237 iRet = myspirit.send(send_buf, curr_len);
jmhong 10:cc81b87e005e 238 if (iRet == RADIO_TX_OK)
jmhong 10:cc81b87e005e 239 {
jmhong 11:f8396aa48de6 240 #ifdef CUBEBITE_DEBUG
jmhong 11:f8396aa48de6 241 printf("[RADIO_TX_OK]\n");
jmhong 11:f8396aa48de6 242 #endif
jmhong 11:f8396aa48de6 243
jmhong 11:f8396aa48de6 244 #ifdef CUBEBITE_RF_SPEED_TEST_SEND_ON
jmhong 11:f8396aa48de6 245 #ifdef CUBEBITE_BOARD_F401RE
jmhong 11:f8396aa48de6 246 if (false == bIsSendFirstClockFunctionStarted)
jmhong 11:f8396aa48de6 247 {
jmhong 11:f8396aa48de6 248 clockRfSpeedTestStart = clock();
jmhong 11:f8396aa48de6 249 bIsSendFirstClockFunctionStarted = true;
jmhong 11:f8396aa48de6 250 }
jmhong 11:f8396aa48de6 251 #endif
jmhong 11:f8396aa48de6 252 #endif
jmhong 10:cc81b87e005e 253 }
jmhong 10:cc81b87e005e 254 else if (iRet == RADIO_TX_ERR)
jmhong 10:cc81b87e005e 255 {
jmhong 11:f8396aa48de6 256 #ifdef CUBEBITE_DEBUG
jmhong 10:cc81b87e005e 257 printf("[RADIO_TX_ERR]\n");
jmhong 11:f8396aa48de6 258 #endif
jmhong 10:cc81b87e005e 259 }
jmhong 10:cc81b87e005e 260 else if (iRet == RADIO_TX_COLLISION)
jmhong 10:cc81b87e005e 261 {
jmhong 11:f8396aa48de6 262 #ifdef CUBEBITE_DEBUG
jmhong 10:cc81b87e005e 263 printf("[RADIO_TX_COLLISION]\n");
jmhong 11:f8396aa48de6 264 #endif
jmhong 10:cc81b87e005e 265 }
jmhong 10:cc81b87e005e 266 else if (iRet == RADIO_TX_NOACK)
jmhong 10:cc81b87e005e 267 {
jmhong 11:f8396aa48de6 268 #ifdef CUBEBITE_DEBUG
jmhong 10:cc81b87e005e 269 printf("[RADIO_TX_NOACK]\n");
jmhong 11:f8396aa48de6 270 #endif
jmhong 10:cc81b87e005e 271 }
jmhong 10:cc81b87e005e 272
jmhong 11:f8396aa48de6 273 #ifdef CUBEBITE_DEBUG
jmhong 11:f8396aa48de6 274 printf("[CUBEBITE] send_data() 호출 끝.\n");
jmhong 11:f8396aa48de6 275 #endif
rosarium 0:2ddc0583bcec 276 }
rosarium 4:cae1fa054b86 277
jmhong 11:f8396aa48de6 278
jmhong 11:f8396aa48de6 279
jmhong 11:f8396aa48de6 280
jmhong 11:f8396aa48de6 281
jmhong 11:f8396aa48de6 282
jmhong 11:f8396aa48de6 283
jmhong 11:f8396aa48de6 284
jmhong 11:f8396aa48de6 285
jmhong 11:f8396aa48de6 286
rosarium 4:cae1fa054b86 287 /**
rosarium 4:cae1fa054b86 288 * @brief read_rcvd_data
rosarium 4:cae1fa054b86 289 * @param None
rosarium 4:cae1fa054b86 290 * @retval None
rosarium 4:cae1fa054b86 291 */
wobetz 5:a65ed26b0f98 292 static void read_rcvd_data(void)
rosarium 4:cae1fa054b86 293 {
jmhong 11:f8396aa48de6 294 #ifdef CUBEBITE_DEBUG
jmhong 11:f8396aa48de6 295 printf("[CUBEBITE] read_rcvd_data() 호출 됨. \n");
jmhong 11:f8396aa48de6 296 #endif
rosarium 4:cae1fa054b86 297
jmhong 11:f8396aa48de6 298 for(unsigned int flush_count = 0; flush_count < TEST_STR_LEN; flush_count++) read_buf[flush_count] = 0 ;/* clear the read buffer */
jmhong 11:f8396aa48de6 299
jmhong 11:f8396aa48de6 300 int ret = myspirit.read(read_buf, sizeof(read_buf));
jmhong 11:f8396aa48de6 301 if (ret == 0)
jmhong 11:f8396aa48de6 302 {
jmhong 11:f8396aa48de6 303 printf("[CUBEBITE] Read() Error : Nothing to read\n");
rosarium 4:cae1fa054b86 304 return;
jmhong 11:f8396aa48de6 305 }
jmhong 11:f8396aa48de6 306 #ifdef CUBEBITE_RF_SPEED_TEST_RECV_ON
jmhong 11:f8396aa48de6 307 ret = strcmp((const char *)read_buf, (const char *)send_buf);
jmhong 11:f8396aa48de6 308 if (0 == ret)
jmhong 11:f8396aa48de6 309 {
jmhong 11:f8396aa48de6 310 printf("read, send buf collect!!\n");
jmhong 11:f8396aa48de6 311 TestLED = !TestLED; /* Toggle LED at the receiver */
jmhong 11:f8396aa48de6 312 // bIsAckSended = true;
jmhong 11:f8396aa48de6 313 //746zg 보드
jmhong 11:f8396aa48de6 314 int iRet = myspirit.send(send_ack_buf, curr_ack_len);
jmhong 11:f8396aa48de6 315 if (iRet == RADIO_TX_OK)
jmhong 11:f8396aa48de6 316 {
jmhong 11:f8396aa48de6 317 #ifdef CUBEBITE_DEBUG
jmhong 11:f8396aa48de6 318 printf("ACK : [RADIO_TX_OK]\n");
jmhong 11:f8396aa48de6 319 #endif
jmhong 11:f8396aa48de6 320 }
jmhong 11:f8396aa48de6 321 else if (iRet == RADIO_TX_ERR)
jmhong 11:f8396aa48de6 322 {
jmhong 11:f8396aa48de6 323 #ifdef CUBEBITE_DEBUG
jmhong 11:f8396aa48de6 324 printf("ACK : [RADIO_TX_ERR]\n");
jmhong 11:f8396aa48de6 325 #endif
jmhong 11:f8396aa48de6 326 }
jmhong 11:f8396aa48de6 327 else if (iRet == RADIO_TX_COLLISION)
jmhong 11:f8396aa48de6 328 {
jmhong 11:f8396aa48de6 329 #ifdef CUBEBITE_DEBUG
jmhong 11:f8396aa48de6 330 printf("ACK : [RADIO_TX_COLLISION]\n");
jmhong 11:f8396aa48de6 331 #endif
jmhong 11:f8396aa48de6 332 }
jmhong 11:f8396aa48de6 333 else if (iRet == RADIO_TX_NOACK)
jmhong 11:f8396aa48de6 334 {
jmhong 11:f8396aa48de6 335 #ifdef CUBEBITE_DEBUG
jmhong 11:f8396aa48de6 336 printf("ACK : [RADIO_TX_NOACK]\n");
jmhong 11:f8396aa48de6 337 #endif
jmhong 11:f8396aa48de6 338 }
jmhong 11:f8396aa48de6 339
jmhong 11:f8396aa48de6 340 }
jmhong 11:f8396aa48de6 341 #endif
jmhong 11:f8396aa48de6 342
jmhong 11:f8396aa48de6 343 #ifdef CUBEBITE_RF_SPEED_TEST_SEND_ON
jmhong 11:f8396aa48de6 344 //401re 보드
jmhong 11:f8396aa48de6 345 if (true == bIsSendFirstClockFunctionStarted)
jmhong 11:f8396aa48de6 346 {
jmhong 11:f8396aa48de6 347 clockRfSpeedTestEnd = clock();
jmhong 11:f8396aa48de6 348 }
jmhong 11:f8396aa48de6 349 #endif
jmhong 11:f8396aa48de6 350
jmhong 11:f8396aa48de6 351
jmhong 11:f8396aa48de6 352 #ifdef CUBEBITE_DEBUG
jmhong 11:f8396aa48de6 353 printf("[CUBEBITE] read_rcvd_data() 호출 끝. \n");
jmhong 11:f8396aa48de6 354 #endif
rosarium 4:cae1fa054b86 355 }
rosarium 4:cae1fa054b86 356
jmhong 11:f8396aa48de6 357 static void ack_send_data(void)
jmhong 11:f8396aa48de6 358 {
jmhong 11:f8396aa48de6 359 #ifdef CUBEBITE_RF_SPEED_TEST_RECV_ON
jmhong 11:f8396aa48de6 360 //746zg 보드
jmhong 11:f8396aa48de6 361 int iRet = myspirit.send(send_ack_buf, curr_ack_len);
jmhong 11:f8396aa48de6 362 if (iRet == RADIO_TX_OK)
jmhong 11:f8396aa48de6 363 {
jmhong 11:f8396aa48de6 364 #ifdef CUBEBITE_DEBUG
jmhong 11:f8396aa48de6 365 printf("ACK : [RADIO_TX_OK]\n");
jmhong 11:f8396aa48de6 366 #endif
jmhong 11:f8396aa48de6 367 }
jmhong 11:f8396aa48de6 368 else if (iRet == RADIO_TX_ERR)
jmhong 11:f8396aa48de6 369 {
jmhong 11:f8396aa48de6 370 #ifdef CUBEBITE_DEBUG
jmhong 11:f8396aa48de6 371 printf("ACK : [RADIO_TX_ERR]\n");
jmhong 11:f8396aa48de6 372 #endif
jmhong 11:f8396aa48de6 373 }
jmhong 11:f8396aa48de6 374 else if (iRet == RADIO_TX_COLLISION)
jmhong 11:f8396aa48de6 375 {
jmhong 11:f8396aa48de6 376 #ifdef CUBEBITE_DEBUG
jmhong 11:f8396aa48de6 377 printf("ACK : [RADIO_TX_COLLISION]\n");
jmhong 11:f8396aa48de6 378 #endif
jmhong 11:f8396aa48de6 379 }
jmhong 11:f8396aa48de6 380 else if (iRet == RADIO_TX_NOACK)
jmhong 11:f8396aa48de6 381 {
jmhong 11:f8396aa48de6 382 #ifdef CUBEBITE_DEBUG
jmhong 11:f8396aa48de6 383 printf("ACK : [RADIO_TX_NOACK]\n");
jmhong 11:f8396aa48de6 384 #endif
jmhong 11:f8396aa48de6 385 }
jmhong 11:f8396aa48de6 386 #endif
jmhong 11:f8396aa48de6 387 }
jmhong 11:f8396aa48de6 388
jmhong 11:f8396aa48de6 389
rosarium 4:cae1fa054b86 390
rosarium 1:cf2e2f85bf8d 391 /**
rosarium 1:cf2e2f85bf8d 392 * @brief main routine
rosarium 1:cf2e2f85bf8d 393 * @param None
rosarium 1:cf2e2f85bf8d 394 * @retval int
rosarium 1:cf2e2f85bf8d 395 */
rosarium 0:2ddc0583bcec 396 int main()
rosarium 1:cf2e2f85bf8d 397 {
jmhong 11:f8396aa48de6 398 /* LED off */
jmhong 11:f8396aa48de6 399 TestLED = 0;
jmhong 10:cc81b87e005e 400 /* 180108 cubebite HJM : function return value print */
jmhong 10:cc81b87e005e 401 int iRet = 0;
jmhong 11:f8396aa48de6 402
jmhong 11:f8396aa48de6 403 #ifdef CUBEBITE_RF_GPIO_0_TEST
jmhong 10:cc81b87e005e 404 /* 180108 cubebite HJM : GPIO 0, init code */
jmhong 10:cc81b87e005e 405 SGpioInit gpioIRQ={
jmhong 10:cc81b87e005e 406 SPIRIT_GPIO_0,
jmhong 10:cc81b87e005e 407 SPIRIT_GPIO_MODE_DIGITAL_OUTPUT_LP,
jmhong 10:cc81b87e005e 408 SPIRIT_GPIO_DIG_OUT_IRQ
jmhong 10:cc81b87e005e 409 };
jmhong 10:cc81b87e005e 410 SpiritGpioInit(&gpioIRQ);
jmhong 10:cc81b87e005e 411
jmhong 10:cc81b87e005e 412 /* 180108 cubebite HJM : GPIO 0, For spiritFunctionalState(), Testing code */
jmhong 10:cc81b87e005e 413 SpiritFunctionalState spiritFunctionalState={
jmhong 10:cc81b87e005e 414 S_DISABLE
jmhong 10:cc81b87e005e 415 };
jmhong 10:cc81b87e005e 416 #endif
jmhong 10:cc81b87e005e 417
jmhong 10:cc81b87e005e 418 /* 180108 cubebite HJM : spirit module, init code */
jmhong 10:cc81b87e005e 419 printf("[CUBEBITE] myspirit, attach_irq_callback()\t......");
jmhong 10:cc81b87e005e 420 myspirit.attach_irq_callback(callback_func);
jmhong 10:cc81b87e005e 421 printf("OK\n");
jmhong 10:cc81b87e005e 422
jmhong 10:cc81b87e005e 423 printf("[CUBEBITE] myspirit, on()\t......");
jmhong 10:cc81b87e005e 424 iRet = myspirit.on();
jmhong 10:cc81b87e005e 425 if ( 0 == iRet )
jmhong 10:cc81b87e005e 426 {
jmhong 10:cc81b87e005e 427 printf("OK\n");
jmhong 10:cc81b87e005e 428 }
jmhong 10:cc81b87e005e 429 else
jmhong 10:cc81b87e005e 430 {
jmhong 10:cc81b87e005e 431 printf("ERROR\n");
jmhong 10:cc81b87e005e 432 }
jmhong 11:f8396aa48de6 433 #ifdef CUBEBITE_DEBUG
jmhong 11:f8396aa48de6 434 printf("[CUBEBITE] CUBEBITE_DEBUG ON. \n");
jmhong 11:f8396aa48de6 435 #endif
jmhong 10:cc81b87e005e 436
jmhong 10:cc81b87e005e 437
jmhong 11:f8396aa48de6 438 #ifdef CUBEBITE_RF_USER_BUTTON_SEND_TEST
jmhong 11:f8396aa48de6 439 event.rise(&set_send_data_flag); /*User button interrupt trigger to set send data flag */
jmhong 11:f8396aa48de6 440 #endif
jmhong 11:f8396aa48de6 441
jmhong 10:cc81b87e005e 442
jmhong 10:cc81b87e005e 443 #ifdef CUBEBITE_RF_DEVICE_PARTNUMBER_TEST
jmhong 10:cc81b87e005e 444 uint16_t int16SpiritPartNum = 0;
jmhong 10:cc81b87e005e 445 #endif
jmhong 11:f8396aa48de6 446 while(1)
jmhong 11:f8396aa48de6 447 {
jmhong 10:cc81b87e005e 448 #ifdef CUBEBITE_RF_DEVICE_PARTNUMBER_TEST
jmhong 11:f8396aa48de6 449 printf("[CUBEBITE][devicePartNumber] SpiritGeneralGetDevicePartNumber()\t......");
jmhong 11:f8396aa48de6 450
jmhong 11:f8396aa48de6 451 int16SpiritPartNum = SpiritGeneralGetDevicePartNumber();
jmhong 11:f8396aa48de6 452 printf("OK => ");
jmhong 11:f8396aa48de6 453 printf("int16SpiritPartNum value : [0x%04X]\n", int16SpiritPartNum);
jmhong 11:f8396aa48de6 454 int16SpiritPartNum = 0;
jmhong 10:cc81b87e005e 455 #endif
jmhong 10:cc81b87e005e 456
jmhong 11:f8396aa48de6 457 /* low power in idle condition., waiting for an event */
jmhong 11:f8396aa48de6 458 __WFE();
jmhong 10:cc81b87e005e 459
jmhong 10:cc81b87e005e 460 #ifdef CUBEBITE_RF_GPIO_0_TEST
jmhong 11:f8396aa48de6 461 //180108 HJM : For spiritFunctionalState(), testing code
jmhong 11:f8396aa48de6 462
jmhong 11:f8396aa48de6 463 if (S_ENABLE == spiritFunctionalState)
jmhong 11:f8396aa48de6 464 {
jmhong 11:f8396aa48de6 465 spiritFunctionalState = S_DISABLE;
jmhong 11:f8396aa48de6 466 }
jmhong 11:f8396aa48de6 467 else
jmhong 11:f8396aa48de6 468 {
jmhong 11:f8396aa48de6 469 spiritFunctionalState = S_ENABLE;
jmhong 11:f8396aa48de6 470 }
jmhong 11:f8396aa48de6 471
jmhong 11:f8396aa48de6 472 /* 180108 cubebite HJM : GPIO 0, For, spiritFunctionalState() => Enables or Disables the output of temperature sensor on SPIRIT GPIO_0. */
jmhong 11:f8396aa48de6 473 SpiritGpioTemperatureSensor(spiritFunctionalState);
jmhong 11:f8396aa48de6 474
jmhong 11:f8396aa48de6 475 /* 180108 cubebite HJM : RF_GPIO_0_INPUT pin value print */
jmhong 11:f8396aa48de6 476 printf("****** RF GPIO_0 Status Testing => [%d] ******\n", (int)RF_GPIO_0_INPUT);
jmhong 11:f8396aa48de6 477 wait(1);
jmhong 11:f8396aa48de6 478 #endif
jmhong 10:cc81b87e005e 479
jmhong 11:f8396aa48de6 480 #ifdef CUBEBITE_RF_SPEED_TEST_SEND_ON
jmhong 11:f8396aa48de6 481 if (true == bIsSetSendFlag)
jmhong 11:f8396aa48de6 482 {
jmhong 11:f8396aa48de6 483 set_send_data_flag();
jmhong 11:f8396aa48de6 484 bIsSetSendFlag = false;
jmhong 11:f8396aa48de6 485 }
jmhong 10:cc81b87e005e 486 #endif
jmhong 10:cc81b87e005e 487
jmhong 11:f8396aa48de6 488 if(rx_done_flag)
jmhong 11:f8396aa48de6 489 {
jmhong 11:f8396aa48de6 490 rx_done_flag = false;
jmhong 11:f8396aa48de6 491 read_rcvd_data();
jmhong 11:f8396aa48de6 492 printf("recvedd.\n");
jmhong 11:f8396aa48de6 493 #ifdef CUBEBITE_RF_SPEED_TEST_SEND_ON
jmhong 11:f8396aa48de6 494 if (true == bIsSendFirstClockFunctionStarted)
jmhong 11:f8396aa48de6 495 {
jmhong 11:f8396aa48de6 496 fRfSpeedTestResult = (float)(clockRfSpeedTestEnd - clockRfSpeedTestStart)/CLOCKS_PER_SEC;
jmhong 11:f8396aa48de6 497 printf("\n Clock Rf Speed Test : [%.9f(sec)] \n", fRfSpeedTestResult);
jmhong 11:f8396aa48de6 498
jmhong 11:f8396aa48de6 499 bIsSendFirstClockFunctionStarted = false;
jmhong 11:f8396aa48de6 500 }
jmhong 11:f8396aa48de6 501 #endif
jmhong 11:f8396aa48de6 502 }
jmhong 11:f8396aa48de6 503
jmhong 11:f8396aa48de6 504 else if (send_data_flag)
jmhong 11:f8396aa48de6 505 {
jmhong 11:f8396aa48de6 506 #ifdef CUBEBITE_RF_SPEED_TEST_SEND_ON
jmhong 11:f8396aa48de6 507 //180112 HJM : Ack 응답 올 때 까지의 Timeout.
jmhong 11:f8396aa48de6 508 // wait(0.1); //100ms, 정상 동작, 오류 없음. (5분 테스트)
jmhong 11:f8396aa48de6 509 // wait(0.06); //60ms, 정상 동작, 오류 없음. (5분 테스트)
jmhong 11:f8396aa48de6 510 wait(0.05); // 50ms, 정상 동작, 오류 없음. (10분 테스트)
jmhong 11:f8396aa48de6 511 // wait(0.01); // 10ms, 정상 동작.
jmhong 11:f8396aa48de6 512 // wait(0.008); // 8ms, 정상 동작, 하지만 0.01 이 최대 속도값으로 보임.
jmhong 11:f8396aa48de6 513 // wait(0.005); // 5ms, 정상 동작, 하지만 0.01 이 최대 속도값으로 보임, 하지만 Nothing to read 오류가 많이 뜸. (20분 테스트)
jmhong 11:f8396aa48de6 514 // wait(0.00001); // 0.01ms, 비 정상 동작. (30분 테스트)
jmhong 11:f8396aa48de6 515 #endif
jmhong 11:f8396aa48de6 516
jmhong 11:f8396aa48de6 517 send_data_flag = false;
jmhong 11:f8396aa48de6 518 send_data();
jmhong 11:f8396aa48de6 519 printf("sended.\n");
jmhong 11:f8396aa48de6 520
jmhong 11:f8396aa48de6 521 }
jmhong 10:cc81b87e005e 522
jmhong 11:f8396aa48de6 523 else if (tx_done_flag)
jmhong 11:f8396aa48de6 524 {
jmhong 11:f8396aa48de6 525 tx_done_flag = false;
jmhong 11:f8396aa48de6 526 // printf("\n***Packet sent ***\nSent string ='%s' (len=%d)\n", send_buf, strlen((const char*)send_buf) + 1);
jmhong 11:f8396aa48de6 527 }
jmhong 10:cc81b87e005e 528
jmhong 11:f8396aa48de6 529 #ifdef CUBEBITE_RF_SPEED_TEST_RECV_ON
jmhong 11:f8396aa48de6 530 //180112 HJM 오후 1시, 현재 사용 안하는 중, recv 쪽에서 strcmp로 보낸 데이터와 받은 데이터 비교 후, send 를 바로 하는 코드로 바꿨음.
jmhong 11:f8396aa48de6 531 else if (true == bIsAckSended)
jmhong 11:f8396aa48de6 532 {
jmhong 11:f8396aa48de6 533 bIsAckSended = false;
jmhong 11:f8396aa48de6 534 ack_send_data();
jmhong 11:f8396aa48de6 535 printf("recv sended.\n");
jmhong 11:f8396aa48de6 536 }
jmhong 11:f8396aa48de6 537 #endif
rosarium 4:cae1fa054b86 538 }
wobetz 5:a65ed26b0f98 539 /* unreachable */
wobetz 5:a65ed26b0f98 540 // myspirit.off();
wobetz 5:a65ed26b0f98 541 // return 0;
rosarium 0:2ddc0583bcec 542 }