This program utilizes the mcr20 Thread Shield on the FRDM-K64F MCU which is a two-part workspace (HVAC Server (RX)/Probe(TX)) to handle low temperature events read at the probe(s) to prevent pipes from freezing.

Dependencies:   fsl_phy_mcr20a fsl_smac mbed-rtos mbed

Fork of mcr20_wireless_uart by NXP

Committer:
haircules
Date:
Thu Mar 30 20:22:35 2017 +0000
Revision:
29:be24c0c29f17
Parent:
27:1eb29717bfd9
SmartPipe HVAC Server

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sam_grove 0:01fb291427ce 1 #include "mbed.h"
cotigac 18:b02fc0e53df8 2 #include "rtos.h"
sam_grove 2:3e7685cfb2a7 3
FSL\B36402 23:6f13fea3cace 4 #include "Phy.h"
cotigac 19:71b793021c78 5 #include "SMAC_Interface.h"
cotigac 19:71b793021c78 6 #include "SMAC_Config.h"
andreikovacs 27:1eb29717bfd9 7 #include "MemManager.h"
andreikovacs 27:1eb29717bfd9 8 #include "circular_buffer.h"
cotigac 19:71b793021c78 9
andreikovacs 27:1eb29717bfd9 10 char * const cu8FreescaleLogo[]={
andreikovacs 27:1eb29717bfd9 11 "\f\r\n",
andreikovacs 27:1eb29717bfd9 12 "\n\r\n\r\n\r #\n",
andreikovacs 27:1eb29717bfd9 13 "\r ###\n",
andreikovacs 27:1eb29717bfd9 14 "\r ### *\n",
andreikovacs 27:1eb29717bfd9 15 "\r # ***\n",
andreikovacs 27:1eb29717bfd9 16 "\r *** #\n",
andreikovacs 27:1eb29717bfd9 17 "\r * ###\n",
andreikovacs 27:1eb29717bfd9 18 "\r ###\n",
andreikovacs 27:1eb29717bfd9 19 "\r * #\n",
andreikovacs 27:1eb29717bfd9 20 "\r ***\n",
andreikovacs 27:1eb29717bfd9 21 "\r *** #\n",
andreikovacs 27:1eb29717bfd9 22 "\r # * ###\n",
andreikovacs 27:1eb29717bfd9 23 "\r ### ###\n",
andreikovacs 27:1eb29717bfd9 24 "\r ### * # F R E E S C A L E\n",
andreikovacs 27:1eb29717bfd9 25 "\r # ***\n",
andreikovacs 27:1eb29717bfd9 26 "\r *** S E M I C O N D U C T O R\n",
andreikovacs 27:1eb29717bfd9 27 "\r # *\n",
andreikovacs 27:1eb29717bfd9 28 "\r ### 2 0 1 5\n",
andreikovacs 27:1eb29717bfd9 29 "\r ###\n",
andreikovacs 27:1eb29717bfd9 30 "\r # Wireless Uart Demo\r\n\n",
andreikovacs 27:1eb29717bfd9 31 NULL
andreikovacs 27:1eb29717bfd9 32 };
andreikovacs 26:56ca40dcfae1 33
FSL\B36402 23:6f13fea3cace 34 #define gMcps_Cnf_EVENT_c (1<<1)
FSL\B36402 23:6f13fea3cace 35 #define gMcps_Ind_EVENT_c (1<<2)
FSL\B36402 23:6f13fea3cace 36 #define gMlme_EdCnf_EVENT_c (1<<3)
FSL\B36402 23:6f13fea3cace 37 #define gMlme_CcaCnf_EVENT_c (1<<4)
FSL\B36402 23:6f13fea3cace 38 #define gMlme_TimeoutInd_EVENT_c (1<<5)
FSL\B36402 23:6f13fea3cace 39 #define gWUSelf_EVENT_c (1<<6)
FSL\B36402 23:6f13fea3cace 40
andreikovacs 27:1eb29717bfd9 41 #define gDefaultBaudRate_UART_c 115200UL
andreikovacs 27:1eb29717bfd9 42
haircules 29:be24c0c29f17 43 #define BUF_SIZE 3
haircules 29:be24c0c29f17 44
andreikovacs 27:1eb29717bfd9 45 Serial uart(USBTX, USBRX);
andreikovacs 27:1eb29717bfd9 46 CircularBuffer uartBuf;
andreikovacs 27:1eb29717bfd9 47
haircules 29:be24c0c29f17 48
cotigac 19:71b793021c78 49 #ifdef VERBOSE
cotigac 19:71b793021c78 50 static bool_t bCCAFailed;
cotigac 19:71b793021c78 51 static bool_t bACKFailed;
cotigac 19:71b793021c78 52 #endif
FSL\B36402 23:6f13fea3cace 53 uint32_t gTaskEventFlags;
haircules 29:be24c0c29f17 54 int low_temp_flag = 0;
haircules 29:be24c0c29f17 55 int heat_state = 0;
cotigac 19:71b793021c78 56 static uint8_t gau8TxDataBuffer[gMaxSmacSDULength_c + sizeof(rxPacket_t)];
sam_grove 25:f40bc034cd8b 57 txPacket_t *gAppTxPacket;
sam_grove 25:f40bc034cd8b 58 rxPacket_t *gAppRxPacket;
cotigac 19:71b793021c78 59 static txContextConfig_t txConfigContext;
cotigac 19:71b793021c78 60
andreikovacs 27:1eb29717bfd9 61
andreikovacs 27:1eb29717bfd9 62 void PrintMenu(char * const pu8Menu[])
andreikovacs 27:1eb29717bfd9 63 {
andreikovacs 27:1eb29717bfd9 64 uint8_t u8Index = 0;
andreikovacs 27:1eb29717bfd9 65 while(pu8Menu[u8Index]){
andreikovacs 27:1eb29717bfd9 66 uart.printf(pu8Menu[u8Index]);
andreikovacs 27:1eb29717bfd9 67 u8Index++;
andreikovacs 27:1eb29717bfd9 68 }
andreikovacs 27:1eb29717bfd9 69 }
andreikovacs 27:1eb29717bfd9 70
andreikovacs 27:1eb29717bfd9 71
cotigac 19:71b793021c78 72 void InitProject(void);
FSL\B36402 23:6f13fea3cace 73 void InitApp(void);
FSL\B36402 23:6f13fea3cace 74
cotigac 19:71b793021c78 75 extern smacErrors_t smacToAppMlmeSap(smacToAppMlmeMessage_t* pMsg, instanceId_t instance);
cotigac 19:71b793021c78 76 extern smacErrors_t smacToAppMcpsSap(smacToAppDataMessage_t* pMsg, instanceId_t instance);
cotigac 19:71b793021c78 77
andreikovacs 27:1eb29717bfd9 78 DigitalOut led1(LED_GREEN);
haircules 29:be24c0c29f17 79 DigitalOut led2(LED_RED);
haircules 29:be24c0c29f17 80 DigitalOut led3(LED_BLUE);
cotigac 18:b02fc0e53df8 81 InterruptIn sw2(SW2);
cotigac 18:b02fc0e53df8 82 uint32_t button_pressed;
haircules 29:be24c0c29f17 83 uint8_t timer;
haircules 29:be24c0c29f17 84 char temp[] = {'1','0','0'}; /*initialize temp to safe value*/
cotigac 18:b02fc0e53df8 85 Thread *thread2;
FSL\B36402 23:6f13fea3cace 86 Thread *eventsThread;
haircules 29:be24c0c29f17 87 Thread *timerThread;
sam_grove 2:3e7685cfb2a7 88
andreikovacs 27:1eb29717bfd9 89 void uartSetBaudRate(uint32_t b)
andreikovacs 27:1eb29717bfd9 90 {
andreikovacs 27:1eb29717bfd9 91 uart.baud(b);
andreikovacs 27:1eb29717bfd9 92 }
andreikovacs 27:1eb29717bfd9 93
haircules 29:be24c0c29f17 94 /*ISR for sw2*/
cotigac 18:b02fc0e53df8 95 void sw2_press(void)
cotigac 18:b02fc0e53df8 96 {
cotigac 18:b02fc0e53df8 97 thread2->signal_set(0x1);
haircules 29:be24c0c29f17 98 /*Toggle Blue LED*/
haircules 29:be24c0c29f17 99 led3 = !led3;
haircules 29:be24c0c29f17 100
haircules 29:be24c0c29f17 101 }
haircules 29:be24c0c29f17 102
haircules 29:be24c0c29f17 103 void timer_thread(void const *argument)
haircules 29:be24c0c29f17 104 {
haircules 29:be24c0c29f17 105 while (true) {
haircules 29:be24c0c29f17 106
haircules 29:be24c0c29f17 107 Thread::wait(1000);
haircules 29:be24c0c29f17 108 /*Kick heat on (turn on Red LED) if temp drops below
haircules 29:be24c0c29f17 109 threshold and heat is not already on*/
haircules 29:be24c0c29f17 110 if((atoi(temp) <= 37) && (heat_state != 1))
haircules 29:be24c0c29f17 111 {
haircules 29:be24c0c29f17 112 low_temp_flag = 1;
haircules 29:be24c0c29f17 113 eventsThread->signal_set(0x1);
haircules 29:be24c0c29f17 114 }
haircules 29:be24c0c29f17 115
haircules 29:be24c0c29f17 116 /*Normal temp, turn off heat*/
haircules 29:be24c0c29f17 117 if(atoi(temp) > 37)
haircules 29:be24c0c29f17 118 {
haircules 29:be24c0c29f17 119 /*Turn off Red LED*/
haircules 29:be24c0c29f17 120 led2 = 1;
haircules 29:be24c0c29f17 121
haircules 29:be24c0c29f17 122 /*Set heat_state to off*/
haircules 29:be24c0c29f17 123 heat_state = 0;
haircules 29:be24c0c29f17 124 }
haircules 29:be24c0c29f17 125 }
cotigac 18:b02fc0e53df8 126 }
sam_grove 2:3e7685cfb2a7 127
cotigac 18:b02fc0e53df8 128 void led_thread(void const *argument)
cotigac 18:b02fc0e53df8 129 {
cotigac 18:b02fc0e53df8 130 while (true) {
haircules 29:be24c0c29f17 131 //led1 = !led1;
andreikovacs 27:1eb29717bfd9 132 Thread::wait(200);
sam_grove 2:3e7685cfb2a7 133 }
sam_grove 2:3e7685cfb2a7 134 }
sam_grove 2:3e7685cfb2a7 135
cotigac 18:b02fc0e53df8 136 void button_thread(void const *argument)
sam_grove 2:3e7685cfb2a7 137 {
cotigac 18:b02fc0e53df8 138 while (true) {
cotigac 18:b02fc0e53df8 139 Thread::signal_wait(0x1);
cotigac 18:b02fc0e53df8 140 button_pressed++;
cotigac 18:b02fc0e53df8 141 }
sam_grove 2:3e7685cfb2a7 142 }
sam_grove 2:3e7685cfb2a7 143
FSL\B36402 23:6f13fea3cace 144 void events_thread(void const *argument)
FSL\B36402 23:6f13fea3cace 145 {
andreikovacs 27:1eb29717bfd9 146 uint8_t rcvd = 0, c = 0;
FSL\B36402 23:6f13fea3cace 147
FSL\B36402 23:6f13fea3cace 148 while (true)
FSL\B36402 23:6f13fea3cace 149 {
haircules 29:be24c0c29f17 150 /*Wait for signal*/
FSL\B36402 23:6f13fea3cace 151 Thread::signal_wait(0x1);
haircules 29:be24c0c29f17 152
haircules 29:be24c0c29f17 153 /*If packet has been sent, reenable recieving mode*/
FSL\B36402 23:6f13fea3cace 154 if(gMcps_Cnf_EVENT_c == (gTaskEventFlags & gMcps_Cnf_EVENT_c))
FSL\B36402 23:6f13fea3cace 155 {
haircules 29:be24c0c29f17 156 /*Reenable RX requests*/
FSL\B36402 23:6f13fea3cace 157 MLMERXEnableRequest(gAppRxPacket, 0);
FSL\B36402 23:6f13fea3cace 158
FSL\B36402 23:6f13fea3cace 159 }
FSL\B36402 23:6f13fea3cace 160
haircules 29:be24c0c29f17 161 /*If a packet has been recieved, rcvd gets data*/
FSL\B36402 23:6f13fea3cace 162 if(gMcps_Ind_EVENT_c == (gTaskEventFlags & gMcps_Ind_EVENT_c))
FSL\B36402 23:6f13fea3cace 163 {
haircules 29:be24c0c29f17 164
haircules 29:be24c0c29f17 165 for(int i = 0; i <= gAppRxPacket->u8DataLength; i++)
haircules 29:be24c0c29f17 166 {
haircules 29:be24c0c29f17 167 rcvd = gAppRxPacket->smacPdu.smacPdu[i];
haircules 29:be24c0c29f17 168
haircules 29:be24c0c29f17 169 /*Add received data to temp*/
haircules 29:be24c0c29f17 170 temp[i] = rcvd;
haircules 29:be24c0c29f17 171
haircules 29:be24c0c29f17 172 }
haircules 29:be24c0c29f17 173
haircules 29:be24c0c29f17 174 printf("Node Temp: %dF\n\r",atoi(temp));
haircules 29:be24c0c29f17 175
haircules 29:be24c0c29f17 176 /*Reenable RX requests*/
FSL\B36402 23:6f13fea3cace 177 MLMERXEnableRequest(gAppRxPacket, 0);
FSL\B36402 23:6f13fea3cace 178
andreikovacs 27:1eb29717bfd9 179
FSL\B36402 23:6f13fea3cace 180 }
FSL\B36402 23:6f13fea3cace 181
FSL\B36402 23:6f13fea3cace 182 if(gMlme_TimeoutInd_EVENT_c == (gTaskEventFlags & gMlme_TimeoutInd_EVENT_c))
FSL\B36402 23:6f13fea3cace 183 {
andreikovacs 27:1eb29717bfd9 184 uart.printf("MlmeTimeoutInd: \r\n");
FSL\B36402 23:6f13fea3cace 185 }
FSL\B36402 23:6f13fea3cace 186
FSL\B36402 23:6f13fea3cace 187 if(gMlme_EdCnf_EVENT_c == (gTaskEventFlags & gMlme_EdCnf_EVENT_c))
FSL\B36402 23:6f13fea3cace 188 {
andreikovacs 27:1eb29717bfd9 189 uart.printf("EdCnf: \r\n");
FSL\B36402 23:6f13fea3cace 190 }
FSL\B36402 23:6f13fea3cace 191
FSL\B36402 23:6f13fea3cace 192 if(gMlme_CcaCnf_EVENT_c == (gTaskEventFlags & gMlme_CcaCnf_EVENT_c))
FSL\B36402 23:6f13fea3cace 193 {
andreikovacs 27:1eb29717bfd9 194 uart.printf("CcaCnf: \r\n");
FSL\B36402 23:6f13fea3cace 195 }
FSL\B36402 23:6f13fea3cace 196
haircules 29:be24c0c29f17 197 /*If there is something on the buffer, load packet and send*/
FSL\B36402 23:6f13fea3cace 198 if(gWUSelf_EVENT_c == (gTaskEventFlags & gWUSelf_EVENT_c))
FSL\B36402 23:6f13fea3cace 199 {
haircules 29:be24c0c29f17 200
haircules 29:be24c0c29f17 201 /*Set Data Length to number of items on uartBuf*/
haircules 29:be24c0c29f17 202 gAppTxPacket->u8DataLength = uartBuf.getCount();
haircules 29:be24c0c29f17 203
haircules 29:be24c0c29f17 204 /*Load TX packets until uartBuf is empty*/
haircules 29:be24c0c29f17 205 for(int i = 0; uartBuf.getCount() > 0; i++)
andreikovacs 27:1eb29717bfd9 206 {
haircules 29:be24c0c29f17 207 uartBuf.getFromBuffer(&c);
haircules 29:be24c0c29f17 208 gAppTxPacket->smacPdu.smacPdu[i] = c;
haircules 29:be24c0c29f17 209 }
haircules 29:be24c0c29f17 210 /*Disable RX requests (block incoming packets)*/
andreikovacs 27:1eb29717bfd9 211 (void)MLMERXDisableRequest();
haircules 29:be24c0c29f17 212 /*Generate request to send data packet*/
andreikovacs 27:1eb29717bfd9 213 (void)MCPSDataRequest(gAppTxPacket);
haircules 29:be24c0c29f17 214
haircules 29:be24c0c29f17 215 printf("Data Sent\n\r");
haircules 29:be24c0c29f17 216
haircules 29:be24c0c29f17 217 /*Toggle Red LED after transmission*/
haircules 29:be24c0c29f17 218 led2 = !led2;
haircules 29:be24c0c29f17 219
haircules 29:be24c0c29f17 220 }
haircules 29:be24c0c29f17 221
haircules 29:be24c0c29f17 222 if(low_temp_flag)
haircules 29:be24c0c29f17 223 {
haircules 29:be24c0c29f17 224 printf("WARNING: Node detected temp below safe threshold\n\r");
haircules 29:be24c0c29f17 225 printf("Suspect Node temp: %dF\n\r",atoi(temp));
haircules 29:be24c0c29f17 226 printf("Turning on heat..\n\r");
haircules 29:be24c0c29f17 227
haircules 29:be24c0c29f17 228 /*Simulate heat by turning on red LED*/
haircules 29:be24c0c29f17 229 led2 = 0;
haircules 29:be24c0c29f17 230
haircules 29:be24c0c29f17 231 /*Lower low_temp_flag*/
haircules 29:be24c0c29f17 232 low_temp_flag = 0;
haircules 29:be24c0c29f17 233
haircules 29:be24c0c29f17 234 /*Set head_state to on*/
haircules 29:be24c0c29f17 235 heat_state = 1;
FSL\B36402 23:6f13fea3cace 236 }
andreikovacs 27:1eb29717bfd9 237
FSL\B36402 23:6f13fea3cace 238 gTaskEventFlags = 0;
FSL\B36402 23:6f13fea3cace 239 }
FSL\B36402 23:6f13fea3cace 240 }
FSL\B36402 23:6f13fea3cace 241
sam_grove 2:3e7685cfb2a7 242 int main()
haircules 29:be24c0c29f17 243 {
haircules 29:be24c0c29f17 244 led1 = 1;/*Turn off Green LED*/
haircules 29:be24c0c29f17 245 led2 = 1;/*Turn off Red LED*/
haircules 29:be24c0c29f17 246 led3 = 1;/*Turn off Blue LED*/
haircules 29:be24c0c29f17 247
andreikovacs 26:56ca40dcfae1 248 MEM_Init();
cotigac 18:b02fc0e53df8 249 Thread thread(led_thread);
cotigac 18:b02fc0e53df8 250 thread2 = new Thread(button_thread);
FSL\B36402 23:6f13fea3cace 251 eventsThread = new Thread(events_thread);
haircules 29:be24c0c29f17 252 timerThread = new Thread(timer_thread);
FSL\B36402 23:6f13fea3cace 253 Phy_Init();
cotigac 19:71b793021c78 254 InitSmac();
andreikovacs 27:1eb29717bfd9 255
andreikovacs 27:1eb29717bfd9 256 uartSetBaudRate(gDefaultBaudRate_UART_c);
andreikovacs 27:1eb29717bfd9 257
FSL\B36402 23:6f13fea3cace 258 //Tell SMAC who to call when it needs to pass a message to the application thread.
FSL\B36402 23:6f13fea3cace 259 Smac_RegisterSapHandlers((SMAC_APP_MCPS_SapHandler_t)smacToAppMcpsSap,(SMAC_APP_MLME_SapHandler_t)smacToAppMlmeSap,0);
FSL\B36402 23:6f13fea3cace 260
FSL\B36402 23:6f13fea3cace 261 InitApp();
andreikovacs 27:1eb29717bfd9 262
andreikovacs 27:1eb29717bfd9 263 PrintMenu(cu8FreescaleLogo);
FSL\B36402 23:6f13fea3cace 264
cotigac 18:b02fc0e53df8 265 button_pressed = 0;
cotigac 18:b02fc0e53df8 266 sw2.fall(&sw2_press);
andreikovacs 27:1eb29717bfd9 267 while (true)
haircules 29:be24c0c29f17 268 {
haircules 29:be24c0c29f17 269 /*Set signal for eventsThread if anything on uartBuf to be sent*/
andreikovacs 27:1eb29717bfd9 270 if ( uartBuf.getCount() )
andreikovacs 27:1eb29717bfd9 271 {
andreikovacs 27:1eb29717bfd9 272 gTaskEventFlags |= gWUSelf_EVENT_c;
andreikovacs 27:1eb29717bfd9 273 eventsThread->signal_set(0x1);
haircules 29:be24c0c29f17 274
andreikovacs 27:1eb29717bfd9 275 }
andreikovacs 27:1eb29717bfd9 276 Thread::yield();
sam_grove 2:3e7685cfb2a7 277 }
sam_grove 2:3e7685cfb2a7 278 }
cotigac 19:71b793021c78 279
FSL\B36402 23:6f13fea3cace 280 void InitApp()
FSL\B36402 23:6f13fea3cace 281 {
FSL\B36402 23:6f13fea3cace 282 gAppTxPacket = (txPacket_t*)gau8TxDataBuffer; //Map TX packet to buffer
FSL\B36402 23:6f13fea3cace 283 gAppRxPacket = (rxPacket_t*)MEM_BufferAlloc(gMaxSmacSDULength_c + sizeof(rxPacket_t));
FSL\B36402 23:6f13fea3cace 284
FSL\B36402 23:6f13fea3cace 285 InitProject();
FSL\B36402 23:6f13fea3cace 286
FSL\B36402 23:6f13fea3cace 287 SMACFillHeader(&(gAppTxPacket->smacHeader), gDefaultAddress_c);
FSL\B36402 23:6f13fea3cace 288
FSL\B36402 23:6f13fea3cace 289 (void)MLMEPAOutputAdjust(gDefaultOutputPower_c);
FSL\B36402 23:6f13fea3cace 290 (void)MLMESetChannelRequest(gDefaultChannelNumber_c);
FSL\B36402 23:6f13fea3cace 291 (void)MLMEConfigureTxContext(&txConfigContext);
FSL\B36402 23:6f13fea3cace 292 //AppDelayTmr = TMR_AllocateTimer();
FSL\B36402 23:6f13fea3cace 293 gAppRxPacket->u8MaxDataLength = gMaxSmacSDULength_c;
FSL\B36402 23:6f13fea3cace 294 (void)MLMERXEnableRequest(gAppRxPacket, 0);
FSL\B36402 23:6f13fea3cace 295 }
FSL\B36402 23:6f13fea3cace 296
FSL\B36402 23:6f13fea3cace 297 /* (Management) Sap handler for managing timeout indication and ED confirm
FSL\B36402 23:6f13fea3cace 298 This is running in INTERRUPT context, so need to send messages to one of the task */
cotigac 19:71b793021c78 299 smacErrors_t smacToAppMlmeSap(smacToAppMlmeMessage_t* pMsg, instanceId_t instance)
cotigac 19:71b793021c78 300 {
cotigac 19:71b793021c78 301 switch(pMsg->msgType)
cotigac 19:71b793021c78 302 {
FSL\B36402 23:6f13fea3cace 303 case gMlmeEdCnf_c:
FSL\B36402 23:6f13fea3cace 304 gTaskEventFlags |= gMlme_EdCnf_EVENT_c;
FSL\B36402 23:6f13fea3cace 305 break;
FSL\B36402 23:6f13fea3cace 306 case gMlmeCcaCnf_c:
FSL\B36402 23:6f13fea3cace 307 gTaskEventFlags |= gMlme_CcaCnf_EVENT_c;
FSL\B36402 23:6f13fea3cace 308 break;
FSL\B36402 23:6f13fea3cace 309 case gMlmeTimeoutInd_c:
FSL\B36402 23:6f13fea3cace 310 gTaskEventFlags |= gMlme_TimeoutInd_EVENT_c;
FSL\B36402 23:6f13fea3cace 311 break;
FSL\B36402 23:6f13fea3cace 312 default:
FSL\B36402 23:6f13fea3cace 313 break;
cotigac 19:71b793021c78 314 }
FSL\B36402 23:6f13fea3cace 315 eventsThread->signal_set(0x1);
cotigac 19:71b793021c78 316 MEM_BufferFree(pMsg);
cotigac 19:71b793021c78 317 return gErrorNoError_c;
cotigac 19:71b793021c78 318 }
cotigac 19:71b793021c78 319
FSL\B36402 23:6f13fea3cace 320 /* (Data) Sap handler for managing data confirm and data indication
FSL\B36402 23:6f13fea3cace 321 This is running in INTERRUPT context, so need to send messages to one of the task */
cotigac 19:71b793021c78 322 smacErrors_t smacToAppMcpsSap(smacToAppDataMessage_t* pMsg, instanceId_t instance)
FSL\B36402 23:6f13fea3cace 323 {
FSL\B36402 23:6f13fea3cace 324 switch(pMsg->msgType)
cotigac 19:71b793021c78 325 {
FSL\B36402 23:6f13fea3cace 326 case gMcpsDataInd_c:
FSL\B36402 23:6f13fea3cace 327 if(pMsg->msgData.dataInd.pRxPacket->rxStatus == rxSuccessStatus_c)
FSL\B36402 23:6f13fea3cace 328 {
FSL\B36402 23:6f13fea3cace 329 gTaskEventFlags |= gMcps_Ind_EVENT_c;
FSL\B36402 23:6f13fea3cace 330 }
FSL\B36402 23:6f13fea3cace 331 break;
FSL\B36402 23:6f13fea3cace 332
FSL\B36402 23:6f13fea3cace 333 case gMcpsDataCnf_c:
FSL\B36402 23:6f13fea3cace 334 #ifdef VERBOSE
FSL\B36402 23:6f13fea3cace 335 if(pMsg->msgData.dataCnf.status == gErrorChannelBusy_c)
FSL\B36402 23:6f13fea3cace 336 {
FSL\B36402 23:6f13fea3cace 337 bCCAFailed = TRUE;
FSL\B36402 23:6f13fea3cace 338 }
FSL\B36402 23:6f13fea3cace 339
FSL\B36402 23:6f13fea3cace 340 if(pMsg->msgData.dataCnf.status == gErrorNoAck_c)
FSL\B36402 23:6f13fea3cace 341 {
FSL\B36402 23:6f13fea3cace 342 bACKFailed = TRUE;
FSL\B36402 23:6f13fea3cace 343 }
cotigac 19:71b793021c78 344 #endif
FSL\B36402 23:6f13fea3cace 345
FSL\B36402 23:6f13fea3cace 346 gTaskEventFlags |= gMcps_Cnf_EVENT_c;
FSL\B36402 23:6f13fea3cace 347 break;
FSL\B36402 23:6f13fea3cace 348
FSL\B36402 23:6f13fea3cace 349 default:
FSL\B36402 23:6f13fea3cace 350 break;
FSL\B36402 23:6f13fea3cace 351 }
FSL\B36402 23:6f13fea3cace 352 eventsThread->signal_set(0x1);
FSL\B36402 23:6f13fea3cace 353 MEM_BufferFree(pMsg);
FSL\B36402 23:6f13fea3cace 354
FSL\B36402 23:6f13fea3cace 355 return gErrorNoError_c;
cotigac 19:71b793021c78 356 }
cotigac 19:71b793021c78 357
cotigac 19:71b793021c78 358 void InitProject(void)
cotigac 19:71b793021c78 359 {
cotigac 19:71b793021c78 360 /*Global Data init*/
cotigac 19:71b793021c78 361 #ifdef VERBOSE
cotigac 19:71b793021c78 362 bACKFailed = FALSE;
cotigac 19:71b793021c78 363 bCCAFailed = FALSE;
cotigac 19:71b793021c78 364 #endif
FSL\B36402 23:6f13fea3cace 365
FSL\B36402 23:6f13fea3cace 366 gTaskEventFlags = 0;
FSL\B36402 23:6f13fea3cace 367
cotigac 19:71b793021c78 368 txConfigContext.autoAck = FALSE;
cotigac 19:71b793021c78 369 txConfigContext.ccaBeforeTx = FALSE;
cotigac 19:71b793021c78 370 txConfigContext.retryCountAckFail = 0;
cotigac 19:71b793021c78 371 txConfigContext.retryCountCCAFail = 0;
FSL\B36402 23:6f13fea3cace 372 }