Node_SampleReceived still not being called
Closed this issue · 2 comments
Hi Jeff,
I just tried 1.5.4 and it works for your proactive DiscoverNetworkAsync() to call Node_SampleReceived() on a Router. However, naturally , it will not find sleeping nodes.
I tried it on my reactive code that does find all nodes even if they are sleeping. However, it will not call Node_SampleReceived() on the same router that works above. I'm including the code that works, the code that doesn't work, and the packages that NuGet added for the code that doesn't work.
I can't thank you enough for all the effort your putting into this.
This code works and calls Node_SampleReceived() <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
using System;
using System.Windows;
using XBee;
namespace WpfApp2 {
///
/// Interaction logic for MainWindow.xaml
///
public partial class MainWindow : Window {
private XBeeController controller = null;
public MainWindow() {
InitializeComponent();
controller = new XBeeController();
controller.NodeDiscovered += NodeDiscovered;
Await_DiscoverController();
}
//----------------------------------------------------------
private async void Await_DiscoverController() {
try {
await controller.OpenAsync( "COM3", 115200 );
// NOTE: DiscoverNetworkAsync does not discover Sleeping Nodes < < < < < < < < < < < <
await controller.DiscoverNetworkAsync();
}
catch ( Exception e ) {
string s = e.Message;
}
}
//----------------------------------------------------------
private void NodeDiscovered( object sender, NodeDiscoveredEventArgs args ) {
string s = args.Name;
if ( args.Node.Address.LongAddress.Value == 0x0013A20040F4F731 ) {
args.Node.SampleReceived += Node_SampleReceived;
}
}
//---------------------------------------------------------------------------
private int _sampleReceived_Cntr = 0;
private void Node_SampleReceived( object sender, SampleReceivedEventArgs e ) {
_sampleReceived_Cntr++;
}
}
}
This code DOES NOT CALL Node_SampleReceived() <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
using System;
using System.IO.Ports;
using System.Threading.Tasks;
using System.Windows;
using XBee;
namespace WpfApp3 {
///
/// Interaction logic for MainWindow.xaml
///
public partial class MainWindow : Window {
private XBeeController controller = null;
private XBeeNode _xBeeNode = null;
public MainWindow() {
InitializeComponent();
Await_DiscoverController();
}
private async void Await_DiscoverController() {
await DiscoverController();
}
//---------------------------------------------------------------------------
private async Task DiscoverController() {
// NOTE: Sometimes the controller will take several tries before it is discovered
var ports = SerialPort.GetPortNames();
if ( ports.Length == 0 ) {
//historyLog.Add( new HistoryLog_Item( false, "Can't find XBee Controller on any USB Serial Port", HistoryLog_Item_Types.error ) );
return;
}
//historyLog.Add( new HistoryLog_Item( false, "Initializing XBee Controller", HistoryLog_Item_Types.info ) );
//historyLog.Add( new HistoryLog_Item( false, string.Format( "Checking serial ports: {0}", string.Join( ", ", ports ) ), HistoryLog_Item_Types.info ) );
int pass = 1;
do {
foreach ( var port in ports ) {
try {
controller = new XBeeController();
await controller.OpenAsync( port, 115200 );
//historyLog.Add( new HistoryLog_Item( false, string.Format( "Opened {0}", port ), HistoryLog_Item_Types.info ) );
controller.SampleReceived += Controller_SampleReceived;
pass = 0; // Finished initializing controller
}
catch ( Exception e ) {
controller?.Dispose();
controller = null;
//historyLog.Add( new HistoryLog_Item( false, string.Format( "Pass {0}: Failed to open {1} with {2}", pass, port, e.Message ), HistoryLog_Item_Types.error ) );
pass++;
}
if ( pass >= 30 ) {
//historyLog.Add( new HistoryLog_Item( false, string.Format( "Can't initialize XBee Controller on USB Serial Port {0}", port ), HistoryLog_Item_Types.error ) );
return;
}
}
} while ( pass != 0 );
//historyLog.Add( new HistoryLog_Item( false, "Finished Initializing XBee Controller", HistoryLog_Item_Types.info ) );
}
//---------------------------------------------------------------------------
public async void GetXBeeAsync( string hexAddressString ) {
try {
// I think somehow this is the problem.
_xBeeNode = await controller.GetNodeAsync( new NodeAddress( new LongAddress( ulong.Parse( hexAddressString, System.Globalization.NumberStyles.HexNumber ) ) ) );
}
catch {
return;
}
}
//---------------------------------------------------------------------------
ulong _test_XBeeNodeAddress_ULong = 5526146530998065;
string _test_XBeeNodeAddress_HexString = "13A20040F4F731";
bool _sampleHandlerSet = false;
/// <summary>
/// This is the incomming Method of the Controller XBee, every incomming communication hits this before the data is sent to the actual XBee Node object (if one exists).
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Controller_SampleReceived( object sender, SourcedSampleReceivedEventArgs e ) {
ulong nodeAddressULong = e.Address.LongAddress.Value;
if ( nodeAddressULong == _test_XBeeNodeAddress_ULong ) {
// Pass #1 Create Node
if ( _xBeeNode == null ) {
GetXBeeAsync( _test_XBeeNodeAddress_HexString );
return;
}
// Pass #2 Set Handler
if ( !_sampleHandlerSet ) {
_xBeeNode.SampleReceived += Node_SampleReceived;
_sampleHandlerSet = true;
return;
} else {
// Pass #3 For some reason the debugger won't show me the method, the Node's SampleReceived handler is set to, when I inspect the node on the third pass
// Pass #4 or more will let me inspect what method the Node's SampleReceived handler is set to. WEIRD!
XBeeNode node = _xBeeNode;
return; // Set Break Point Here to inspect fully initialized Node
}
}
}// END Controller_SampleReceived()
//---------------------------------------------------------------------------
private int _sampleReceived_Cntr = 0;
private void Node_SampleReceived( object sender, SampleReceivedEventArgs e ) {
_sampleReceived_Cntr++; // This Break Point never happens
}
}
}
These are the packages that NuGet added <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
package id="BinarySerializer" version="7.5.7" targetFramework="net47" />
package id="Microsoft.NETCore.Platforms" version="2.0.0" targetFramework="net47" />
package id="Microsoft.Win32.Primitives" version="4.3.0" targetFramework="net47" />
package id="NETStandard.Library" version="2.0.0" targetFramework="net47" />
package id="System.AppContext" version="4.3.0" targetFramework="net47" />
package id="System.Collections" version="4.3.0" targetFramework="net47" />
package id="System.Collections.Concurrent" version="4.3.0" targetFramework="net47" />
package id="System.Console" version="4.3.0" targetFramework="net47" />
package id="System.Diagnostics.Debug" version="4.3.0" targetFramework="net47" />
package id="System.Diagnostics.DiagnosticSource" version="4.4.1" targetFramework="net47" />
package id="System.Diagnostics.Tools" version="4.3.0" targetFramework="net47" />
package id="System.Diagnostics.Tracing" version="4.3.0" targetFramework="net47" />
package id="System.Globalization" version="4.3.0" targetFramework="net47" />
package id="System.Globalization.Calendars" version="4.3.0" targetFramework="net47" />
package id="System.IO" version="4.3.0" targetFramework="net47" />
package id="System.IO.Compression" version="4.3.0" targetFramework="net47" />
package id="System.IO.Compression.ZipFile" version="4.3.0" targetFramework="net47" />
package id="System.IO.FileSystem" version="4.3.0" targetFramework="net47" />
package id="System.IO.FileSystem.Primitives" version="4.3.0" targetFramework="net47" />
package id="System.Linq" version="4.3.0" targetFramework="net47" />
package id="System.Linq.Expressions" version="4.3.0" targetFramework="net47" />
package id="System.Net.Http" version="4.3.2" targetFramework="net47" />
package id="System.Net.Primitives" version="4.3.0" targetFramework="net47" />
package id="System.Net.Sockets" version="4.3.0" targetFramework="net47" />
package id="System.ObjectModel" version="4.3.0" targetFramework="net47" />
package id="System.Reflection" version="4.3.0" targetFramework="net47" />
package id="System.Reflection.Extensions" version="4.3.0" targetFramework="net47" />
package id="System.Reflection.Primitives" version="4.3.0" targetFramework="net47" />
package id="System.Reflection.TypeExtensions" version="4.4.0" targetFramework="net47" />
package id="System.Resources.ResourceManager" version="4.3.0" targetFramework="net47" />
package id="System.Runtime" version="4.3.0" targetFramework="net47" />
package id="System.Runtime.Extensions" version="4.3.0" targetFramework="net47" />
package id="System.Runtime.Handles" version="4.3.0" targetFramework="net47" />
package id="System.Runtime.InteropServices" version="4.3.0" targetFramework="net47" />
package id="System.Runtime.InteropServices.RuntimeInformation" version="4.3.0" targetFramework="net47" />
package id="System.Runtime.Numerics" version="4.3.0" targetFramework="net47" />
package id="System.Security.Cryptography.Algorithms" version="4.3.0" targetFramework="net47" />
package id="System.Security.Cryptography.Encoding" version="4.3.0" targetFramework="net47" />
package id="System.Security.Cryptography.Primitives" version="4.3.0" targetFramework="net47" />
package id="System.Security.Cryptography.X509Certificates" version="4.3.0" targetFramework="net47" />
package id="System.Text.Encoding" version="4.3.0" targetFramework="net47" />
package id="System.Text.Encoding.Extensions" version="4.3.0" targetFramework="net47" />
package id="System.Text.RegularExpressions" version="4.3.0" targetFramework="net47" />
package id="System.Threading" version="4.3.0" targetFramework="net47" />
package id="System.Threading.Tasks" version="4.3.0" targetFramework="net47" />
package id="System.Threading.Timer" version="4.3.0" targetFramework="net47" />
package id="System.Xml.ReaderWriter" version="4.3.0" targetFramework="net47" />
package id="System.Xml.XDocument" version="4.3.0" targetFramework="net47" />
package id="XBee" version="5.3.3" targetFramework="net47" />
package id="XBee.Core" version="1.5.4" targetFramework="net47" />
So there was a minor bug in discovery although I don't think that was the issue. I noticed that sometimes this series of device doesn't respond very quickly after discovery so I increased the guard time after discover. Your code is working for me now but give it a try.