/*************************************************************************//** *****************************************************************************/ static void APP_TaskHandler(void) { switch (appState) { case APP_STATE_INITIAL: { appInit(); } break; case APP_STATE_SEND: { appSendData(); } break; case APP_STATE_SENDING_DONE: { #if APP_ENDDEVICE appState = APP_STATE_PREPARE_TO_SLEEP; #else SYS_TimerStart(&appDataSendingTimer); appState = APP_STATE_WAIT_SEND_TIMER; #endif } break; case APP_STATE_PREPARE_TO_SLEEP: { if (!NWK_Busy()) { NWK_SleepReq(); appState = APP_STATE_SLEEP; } } break; case APP_STATE_SLEEP: { HAL_LedClose(); HAL_Sleep(APP_SENDING_INTERVAL); appState = APP_STATE_WAKEUP; } break; case APP_STATE_WAKEUP: { NWK_WakeupReq(); HAL_LedInit(); HAL_LedOn(LED_NETWORK); appState = APP_STATE_SEND; } break; default: break; } }
int main(void) { SYS_Init(); HAL_UartInit(38400); HAL_LedInit(); HAL_LedOff(0); init_nwk(); startTimeoutTimer(); while (1) { SYS_TaskHandler(); HAL_UartTaskHandler(); APP_TaskHandler(); } }
/*************************************************************************//** *****************************************************************************/ static void appInit(void) { appMsg.messageType = 1; appMsg.nodeType = APP_NODE_TYPE; appMsg.extAddr = APP_ADDR; appMsg.shortAddr = APP_ADDR; appMsg.softVersion = 0x01010100; appMsg.channelMask = (1L << APP_CHANNEL); appMsg.panId = APP_PANID; appMsg.workingChannel = APP_CHANNEL; appMsg.parentShortAddr = 0; appMsg.lqi = 0; appMsg.rssi = 0; appMsg.sensors.type = 1; appMsg.sensors.size = sizeof(int32_t) * 3; appMsg.sensors.battery = 0; appMsg.sensors.temperature = 0; appMsg.sensors.light = 0; appMsg.caption.type = 32; appMsg.caption.size = APP_CAPTION_SIZE; memcpy(appMsg.caption.text, APP_CAPTION, APP_CAPTION_SIZE); #if APP_COORDINATOR // Enable RCB_BB RS232 level converter #if defined(PLATFORM_RCB128RFA1) || defined(PLATFORM_RCB256RFR2) DDRD = (1 << 4) | (1 << 6) | (1 << 7); PORTD = (0 << 4) | (1 << 6) | (1 << 7); #endif #if defined(PLATFORM_RCB231) DDRC = (1 << 4) | (1 << 6) | (1 << 7); PORTC = (0 << 4) | (1 << 6) | (1 << 7); #endif #endif #if defined(PLATFORM_XPLAINED_PRO) && defined(HAL_ATMEGA256RFR2) // Enable chip antenna DDRG = (1 << 1); PORTG = (0 << 1); DDRF = (1 << 2); PORTF = (1 << 2); #endif HAL_LedInit(); NWK_SetAddr(APP_ADDR); NWK_SetPanId(APP_PANID); PHY_SetChannel(APP_CHANNEL); #ifdef PHY_AT86RF212 PHY_SetBand(APP_BAND); PHY_SetModulation(APP_MODULATION); #endif PHY_SetRxState(true); #ifdef NWK_ENABLE_SECURITY NWK_SetSecurityKey((uint8_t *)APP_SECURITY_KEY); #endif NWK_OpenEndpoint(APP_ENDPOINT, appDataInd); appDataSendingTimer.interval = APP_SENDING_INTERVAL; appDataSendingTimer.mode = SYS_TIMER_INTERVAL_MODE; appDataSendingTimer.handler = appDataSendingTimerHandler; #if APP_ROUTER || APP_ENDDEVICE appNetworkStatus = false; appNetworkStatusTimer.interval = 500; appNetworkStatusTimer.mode = SYS_TIMER_PERIODIC_MODE; appNetworkStatusTimer.handler = appNetworkStatusTimerHandler; SYS_TimerStart(&appNetworkStatusTimer); #else HAL_LedOn(LED_NETWORK); #endif #ifdef PHY_ENABLE_RANDOM_NUMBER_GENERATOR PHY_RandomReq(); #endif appState = APP_STATE_SEND; }