uint8 Process_Event() { uint8 current_event; current_event = Pop_T(); switch(current_event) { case EVENT_BEACON_SEND: SendBeacon(); break; case EVENT_JOINREQUEST_HANDLER: JoinRequestHandler(); break; case EVENT_JOINREQUESTACKOK_HANDLER: JoinRequestACKOKHandler(); break; case EVENT_DATA_HANDLER: DataHandler(); break; case EVENT_UPLOAD_DATA: Upload_Data(); break; case EVENT_REJOIN_SEND: SendReJoin(); break; } return current_event; }
void Mac::HandleBeginTransmit(void) { ThreadError error = kThreadError_None; if (otPlatRadioIdle() != kThreadError_None) { mBeginTransmit.Post(); ExitNow(); } switch (mState) { case kStateActiveScan: mSendFrame.SetChannel(mScanChannel); SendBeaconRequest(mSendFrame); mSendFrame.SetSequence(0); break; case kStateTransmitBeacon: mSendFrame.SetChannel(mChannel); SendBeacon(mSendFrame); mSendFrame.SetSequence(mBeaconSequence++); break; case kStateTransmitData: mSendFrame.SetChannel(mChannel); SuccessOrExit(error = mSendHead->HandleFrameRequest(mSendFrame)); mSendFrame.SetSequence(mDataSequence); break; default: assert(false); break; } // Security Processing ProcessTransmitSecurity(); SuccessOrExit(error = otPlatRadioTransmit(&mSendFrame)); if (mSendFrame.GetAckRequest() && !(otPlatRadioGetCaps() & kRadioCapsAckTimeout)) { mAckTimer.Start(kAckTimeout); otLogDebgMac("ack timer start\n"); } exit: if (error != kThreadError_None) { assert(false); } }
void BeaconTransmitter::Update(float deltaTime) { if (IsRunning()) { for (mTimeAccumulator += deltaTime; mTimeAccumulator > mDelayBetweenBeacons; mTimeAccumulator -= mDelayBetweenBeacons) { const bool success = SendBeacon(); if (!success) { //printf("failed to send broadcast packet\n"); } } } }