JunMo Hong / Mbed 2 deprecated cubebite_rnd_SPSGRFC433

Dependencies:   mbed

Fork of HelloWorld_IDS01A4 by ST

Committer:
jmhong
Date:
Wed Jan 17 02:26:47 2018 +0000
Revision:
12:5e20115bd13b
Parent:
11:f8396aa48de6
Child:
13:d802c6ed2e75
180117 cubebite hjm;

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