/// <summary> /// Helper method to resolve FcntDown in case one was not yet acquired /// </summary> /// <returns>0 if the resolution failed or > 0 if a valid frame count was acquired</returns> async ValueTask <uint> EnsureHasFcntDownAsync( LoRaDevice loRaDevice, uint?fcntDown, uint payloadFcnt, ILoRaDeviceFrameCounterUpdateStrategy frameCounterStrategy) { if (fcntDown > 0) { return(fcntDown.Value); } var newFcntDown = await frameCounterStrategy.NextFcntDown(loRaDevice, payloadFcnt); // Failed to update the fcnt down // In multi gateway scenarios it means the another gateway was faster than using, can stop now if (newFcntDown <= 0) { Logger.Log(loRaDevice.DevEUI, "another gateway has already sent ack or downlink msg", LogLevel.Debug); } else { Logger.Log(loRaDevice.DevEUI, $"down frame counter: {loRaDevice.FCntDown}", LogLevel.Debug); } return(newFcntDown); }
/// <summary> /// Helper method to resolve FcntDown in case one was not yet acquired /// </summary> /// <returns>0 if the resolution failed or > 0 if a valid frame count was acquired</returns> async ValueTask <uint> EnsureHasFcntDownAsync( LoRaDevice loRaDevice, uint?fcntDown, uint payloadFcnt, ILoRaDeviceFrameCounterUpdateStrategy frameCounterStrategy) { if (fcntDown.HasValue) { return(fcntDown.Value); } var newFcntDown = await frameCounterStrategy.NextFcntDown(loRaDevice, payloadFcnt); // Failed to update the fcnt down // In multi gateway scenarios it means the another gateway was faster than using, can stop now LogFrameCounterDownState(loRaDevice, newFcntDown); return(newFcntDown); }