/*************************************************************************//** *****************************************************************************/ 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); NWK_SetAddr(APP_ADDR); NWK_SetPanId(APP_PANID); PHY_SetChannel(APP_CHANNEL); #if (defined(PHY_AT86RF212B) || defined(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 LED_On(LED_NETWORK); #endif #ifdef PHY_ENABLE_RANDOM_NUMBER_GENERATOR srand(PHY_RandomReq()); #endif appState = APP_STATE_SEND; }
/*************************************************************************//** *****************************************************************************/ static void appInit(void) { 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); PHY_SetTxPower(0x23); NWK_SetSecurityKey((uint8_t *)APP_SECURITY_KEY); NWK_OpenEndpoint(APP_ENDPOINT, appDataInd); appTimer.interval = APP_FLUSH_TIMER_INTERVAL; appTimer.mode = SYS_TIMER_INTERVAL_MODE; appTimer.handler = appTimerHandler; }
static void appInit(void) { msg.messageType = 1; msg.nodeType = APP_NODE_TYPE; msg.extAddr = APP_ADDR; msg.shortAddr = APP_ADDR; msg.softVersion = 0x01010100; msg.channelMask = (1L << APP_CHANNEL); msg.panId = APP_PANID; msg.workingChannel = APP_CHANNEL; msg.parentShortAddr = 0; msg.lqi = 0; msg.rssi = 0; msg.sensors.type = 1; msg.sensors.size = sizeof(int32_t) * 3; msg.sensors.battery = 0; msg.sensors.temperature = 0; msg.sensors.light = 0; msg.caption.type = 32; msg.caption.size = APP_CAPTION_SIZE; memcpy(msg.caption.text, APP_CAPTION, APP_CAPTION_SIZE); #if APP_COORDINATOR // Enable RCB_BB RS232 level converter #if defined(PLATFORM_RCB128RFA1) 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 ledsInit(); NWK_SetAddr(APP_ADDR); NWK_SetPanId(APP_PANID); PHY_SetChannel(APP_CHANNEL); 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 ledOn(LED_NETWORK); #endif #ifdef PHY_ENABLE_RANDOM_NUMBER_GENERATOR PHY_RandomReq(); #endif appState = APP_STATE_SEND; }
/*************************************************************************//** *****************************************************************************/ AppStatus_t appCommandReceived(uint8_t *buf, uint16_t size) { AppReceiveCommand_t *cmd = (AppReceiveCommand_t *)buf; switch (cmd->header.id) { case APP_COMMAND_DUMMY: { } break; case APP_COMMAND_RESET: { /* TODO: reset */ } break; case APP_COMMAND_RANDOMIZE: { srand(cmd->randomize.rnd); } break; #ifdef APP_ENABLE_EVENTS_BUFFER case APP_COMMAND_GET_EVENTS: { appCommandsSendEvents(); } break; #endif case APP_COMMAND_DATA_REQ: { return appProcessDataReq(&cmd->dataReq); } break; case APP_COMMAND_OPEN_ENDPOINT: { appOpenEndpoint(cmd->openEndpoint.index, cmd->openEndpoint.state); } break; case APP_COMMAND_SET_ACK_STATE: { appEndpointAckState[cmd->setAckState.index] = cmd->setAckState.state; } break; case APP_COMMAND_SET_ADDR: { NWK_SetAddr(cmd->setAddr.addr); } break; case APP_COMMAND_SET_PANID: { NWK_SetPanId(cmd->setPanId.panId); } break; case APP_COMMAND_SET_CHANNEL: { PHY_SetChannel(cmd->setChannel.channel); #ifdef PHY_AT86RF212 PHY_SetBand(cmd->setChannel.band); PHY_SetModulation(cmd->setChannel.modulation); #endif } break; case APP_COMMAND_SET_RX_STATE: { PHY_SetRxState(cmd->setRxState.rxState); } break; #ifdef NWK_ENABLE_SECURITY case APP_COMMAND_SET_SECURITY_KEY: { NWK_SetSecurityKey(cmd->setSecurityKey.securityKey); } break; #endif case APP_COMMAND_SET_TX_POWER: { PHY_SetTxPower(cmd->setTxPower.txPower); } break; #ifdef NWK_ENABLE_MULTICAST case APP_COMMAND_GROUP_ADD: { NWK_GroupAdd(cmd->groupAdd.group); } break; case APP_COMMAND_GROUP_REMOVE: { NWK_GroupRemove(cmd->groupRemove.group); } break; #endif #ifdef NWK_ENABLE_ROUTING case APP_COMMAND_ROUTE_ADD: { NWK_RouteTableEntry_t *entry; entry = NWK_RouteNewEntry(); entry->fixed = cmd->routeAdd.fixed; entry->multicast = cmd->routeAdd.multicast; entry->dstAddr = cmd->routeAdd.dstAddr; entry->nextHopAddr = cmd->routeAdd.nextHopAddr; entry->lqi = cmd->routeAdd.lqi; } break; case APP_COMMAND_ROUTE_REMOVE: { NWK_RouteTableEntry_t *entry; entry = NWK_RouteFindEntry(cmd->routeRemove.dstAddr, cmd->routeRemove.multicast); if (entry) { if (cmd->routeRemove.removeFixed) { entry->fixed = 0; } NWK_RouteFreeEntry(entry); } } break; case APP_COMMAND_ROUTE_FLUSH: { NWK_RouteTableEntry_t *entry = NWK_RouteTable(); for (uint16_t i = 0; i < NWK_ROUTE_TABLE_SIZE; i++, entry++) { if (NWK_ROUTE_UNKNOWN == entry->dstAddr) { continue; } if (cmd->routeFlush.removeFixed) { entry->fixed = 0; } NWK_RouteFreeEntry(entry); } } break; case APP_COMMAND_ROUTE_TABLE: { NWK_RouteTableEntry_t *entry = NWK_RouteTable(); for (uint16_t i = 0; i < NWK_ROUTE_TABLE_SIZE; i++, entry++) { if (NWK_ROUTE_UNKNOWN != entry->dstAddr) { appCommandsSendRouteEntry(i, entry); } } } break; #endif #ifdef NWK_ENABLE_ADDRESS_FILTER case APP_COMMAND_FILTER_ADD: { if (!appFilterAdd(cmd->filterAdd.addr, cmd->filterAdd.allow, cmd->filterAdd.setLqi, cmd->filterAdd.lqi)) { return APP_STATUS_TABLE_IS_FULL; } } break; case APP_COMMAND_FILTER_REMOVE: { if (!appFilterRemove(cmd->filterRemove.addr)) { return APP_STATUS_ENTRY_NOT_FOUND; } } break; #endif default: return APP_STATUS_UNKNOWN_COMMAND; } (void)size; return APP_STATUS_SUCESS; }