void platformAlarmProcess(otInstance *aInstance) { int32_t remaining; if (sIsMsRunning) { remaining = (int32_t)(sMsAlarm - otPlatAlarmMilliGetNow()); if (remaining <= 0) { sIsMsRunning = false; #if OPENTHREAD_ENABLE_DIAG if (otPlatDiagModeGet()) { otPlatDiagAlarmFired(aInstance); } else #endif { otPlatAlarmMilliFired(aInstance); } } } #if OPENTHREAD_CONFIG_ENABLE_PLATFORM_USEC_TIMER if (sIsUsRunning) { remaining = (int32_t)(sUsAlarm - otPlatAlarmMicroGetNow()); if (remaining <= 0) { sIsUsRunning = false; otPlatAlarmMicroFired(aInstance); } } #endif // OPENTHREAD_CONFIG_ENABLE_PLATFORM_USEC_TIMER }
void nrf_802154_received_raw(uint8_t *p_data, int8_t power, uint8_t lqi) #endif { otRadioFrame *receivedFrame = NULL; for (uint32_t i = 0; i < NRF_802154_RX_BUFFERS; i++) { if (sReceivedFrames[i].mPsdu == NULL) { receivedFrame = &sReceivedFrames[i]; memset(receivedFrame, 0, sizeof(*receivedFrame)); #if OPENTHREAD_CONFIG_HEADER_IE_SUPPORT receivedFrame->mIeInfo = &sReceivedIeInfos[i]; #endif break; } } assert(receivedFrame != NULL); receivedFrame->mPsdu = &p_data[1]; receivedFrame->mLength = p_data[0]; receivedFrame->mInfo.mRxInfo.mRssi = power; receivedFrame->mInfo.mRxInfo.mLqi = lqi; receivedFrame->mChannel = nrf_802154_channel_get(); if (otPlatRadioGetPromiscuous(sInstance)) { uint64_t timestamp = nrf5AlarmGetCurrentTime(); receivedFrame->mInfo.mRxInfo.mMsec = timestamp / US_PER_MS; receivedFrame->mInfo.mRxInfo.mUsec = timestamp - receivedFrame->mInfo.mRxInfo.mMsec * US_PER_MS; } #if OPENTHREAD_CONFIG_ENABLE_TIME_SYNC // Get the timestamp when the SFD was received. uint32_t offset = (int32_t)otPlatAlarmMicroGetNow() - (int32_t)nrf_802154_first_symbol_timestamp_get(time, p_data[0]); receivedFrame->mIeInfo->mTimestamp = otPlatTimeGet() - offset; #endif otSysEventSignalPending(); }