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: DHT fsl_phy_mcr20a fsl_smac mbed-rtos mbed
Fork of mcr20_wireless_uart by
main.cpp
- Committer:
- cotigac
- Date:
- 2015-04-04
- Revision:
- 19:71b793021c78
- Parent:
- 18:b02fc0e53df8
- Child:
- 23:6f13fea3cace
File content as of revision 19:71b793021c78:
#include "mbed.h" #include "rtos.h" #include "SMAC_Interface.h" #include "SMAC_Config.h" static uint8_t mAppSer; static uint8_t timePassed; #ifdef VERBOSE static bool_t bCCAFailed; static bool_t bACKFailed; #endif static bool_t bTxDone; static bool_t bRxDone; static bool_t evKeyPressed; static bool_t bTxInProgress; static uint8_t gau8TxDataBuffer[gMaxSmacSDULength_c + sizeof(rxPacket_t)]; static txPacket_t *gAppTxPacket; static rxPacket_t *gAppRxPacket; static txContextConfig_t txConfigContext; void InitProject(void); extern smacErrors_t smacToAppMlmeSap(smacToAppMlmeMessage_t* pMsg, instanceId_t instance); extern smacErrors_t smacToAppMcpsSap(smacToAppDataMessage_t* pMsg, instanceId_t instance); DigitalOut led1(LED1); InterruptIn sw2(SW2); uint32_t button_pressed; Thread *thread2; void sw2_press(void) { thread2->signal_set(0x1); } void led_thread(void const *argument) { while (true) { led1 = !led1; Thread::wait(1000); } } void button_thread(void const *argument) { while (true) { Thread::signal_wait(0x1); button_pressed++; } } int main() { Thread thread(led_thread); thread2 = new Thread(button_thread); InitSmac(); Smac_RegisterSapHandlers((SMAC_APP_MCPS_SapHandler_t)smacToAppMcpsSap,(SMAC_APP_MLME_SapHandler_t)smacToAppMlmeSap,0); InitProject(); gAppTxPacket = (txPacket_t*)gau8TxDataBuffer; //Map TX packet to buffer gAppRxPacket = (rxPacket_t*)MEM_BufferAlloc(gMaxSmacSDULength_c + sizeof(rxPacket_t)); SMACFillHeader(&(gAppTxPacket->smacHeader), gDefaultAddress_c); (void)MLMEPAOutputAdjust(gDefaultOutputPower_c); (void)MLMESetChannelRequest(gDefaultChannelNumber_c); (void)MLMEConfigureTxContext(&txConfigContext); gAppRxPacket->u8MaxDataLength = gMaxSmacSDULength_c; (void)MLMERXEnableRequest(gAppRxPacket, 0); button_pressed = 0; sw2.fall(&sw2_press); while (true) { Thread::wait(5000); printf("SW2 was pressed (last 5 seconds): %d \r\n", button_pressed); fflush(stdout); button_pressed = 0; } } smacErrors_t smacToAppMlmeSap(smacToAppMlmeMessage_t* pMsg, instanceId_t instance) { switch(pMsg->msgType) { case gMlmeEdCnf_c: printf("EdCnf: \r\n"); //(void)OSA_EventSet(&gTaskEvent, gMlme_EdCnf_EVENT_c); break; case gMlmeCcaCnf_c: printf("CcaCnf: \r\n"); //(void)OSA_EventSet(&gTaskEvent, gMlme_CcaCnf_EVENT_c); break; case gMlmeTimeoutInd_c: printf("MlmeTimeoutInd: \r\n"); //(void)OSA_EventSet(&gTaskEvent, gMlme_TimeoutInd_EVENT_c); break; default: break; } MEM_BufferFree(pMsg); return gErrorNoError_c; } //(Data) Sap handler for managing data confirm and data indication smacErrors_t smacToAppMcpsSap(smacToAppDataMessage_t* pMsg, instanceId_t instance) { switch(pMsg->msgType) { case gMcpsDataInd_c: if(pMsg->msgData.dataInd.pRxPacket->rxStatus == rxSuccessStatus_c) { printf("McpsDataInd: \r\n"); //(void)OSA_EventSet(&gTaskEvent, gMcps_Ind_EVENT_c); } break; case gMcpsDataCnf_c: #ifdef VERBOSE if(pMsg->msgData.dataCnf.status == gErrorChannelBusy_c) { bCCAFailed = TRUE; } if(pMsg->msgData.dataCnf.status == gErrorNoAck_c) { bACKFailed = TRUE; } #endif printf("McpsDataCnf: \r\n"); //(void)OSA_EventSet(&gTaskEvent, gMcps_Cnf_EVENT_c); break; default: break; } MEM_BufferFree(pMsg); return gErrorNoError_c; } void InitProject(void) { /*Global Data init*/ #ifdef VERBOSE bACKFailed = FALSE; bCCAFailed = FALSE; #endif bTxInProgress = FALSE; bTxDone = FALSE; evKeyPressed = FALSE; txConfigContext.autoAck = FALSE; txConfigContext.ccaBeforeTx = FALSE; txConfigContext.retryCountAckFail = 0; txConfigContext.retryCountCCAFail = 0; }