/// <summary> /// Initialization of slave. /// </summary> /// <param name="address"></param> /// <param name="timeout"></param> /// <returns></returns> public async Task <bool> Ping(byte address, TimeSpan timeout) { var resetEvent = new AutoResetEvent(false); _binding.PacketReceived += (sender, e) => { switch (e.Packet) { case AckFrame frame: { resetEvent.Set(); } break; } }; try { await _binding.ConnectAsync(); await _binding.SendAsync(new ShortFrame((byte)ControlMask.SND_NKE, address)); return(resetEvent.WaitOne(timeout)); } finally { await _binding.DisconnectAsync(); } }
private void Handle(PushDataPacket packet, IEndPointBinding deviceBinding) { _logger.Info($"PushData packet received from {deviceBinding.ToString()}", GetType().Name); _logger.Info($"Sending PushAck packet to {deviceBinding.ToString()}", GetType().Name); _gatewayChannels .AddOrUpdate(Direction.Upstream, new GatewayChannel(deviceBinding, _logger), (key, channel) => { //Update binding with new values eg. ports. channel.Binding = deviceBinding; return(channel); }) .Binding .SendAsync(new PushAckPacket { ProtocolVersion = packet.ProtocolVersion, Token = packet.Token, }); _logger.Info($"Sending PushData packet to {_cloudBinding.ToString()}", GetType().Name); _cloudBinding.SendAsync(packet); }
/// <summary> /// Initialization of slave with SND_NKE /// </summary> /// <param name="address">Primary address</param> /// <returns>true if </returns> public async Task <bool> Ping(byte address) { await _binding.SendAsync(new ShortFrame((byte)ControlMask.SND_NKE, address)); return(true); }