/// <summary> /// Attempts auto-detection of the currently installed Navio board. /// </summary> public void Detect() { // Detect model var model = NavioDeviceProvider.Detect(); if (model.HasValue && Board?.Model != model) { // Connect to hardware when found and not already connected Board = NavioDeviceProvider.Connect(model.Value); // Fire changed event DoPropertyChanged(nameof(Board)); } }
public void Run(IBackgroundTaskInstance taskInstance) { // Initialize task _taskDeferral = taskInstance.GetDeferral(); taskInstance.Canceled += OnTaskCancelled; // Connect to hardware Debug.WriteLine("Connecting to Navio board."); _board = NavioDeviceProvider.Connect(); Debug.WriteLine("Navio board was detected as a \"{0}\".", _board.Model); var rcInput = _board.RCInput; // Log start Debug.WriteLine("Navio RC input test start."); // Start receiving frames Debug.WriteLine("Waiting for valid PWM frames..."); rcInput.ChannelsChanged += OnChannelsChanged; }
/// <summary> /// Application start-up. /// </summary> /// <param name="taskInstance">Task instance.</param> public void Run(IBackgroundTaskInstance taskInstance) { // Initialize task _taskDeferral = taskInstance.GetDeferral(); taskInstance.Canceled += OnTaskCancelled; // Connect to hardware Debug.WriteLine("Connecting to Navio board."); _board = NavioDeviceProvider.Connect(); Debug.WriteLine("Navio board was detected as a \"{0}\".", _board.Model); var barometer = _board.Barometer; // Reset Debug.WriteLine("Resetting device."); barometer.Reset(); // Infinite update loop Debug.WriteLine("Starting infinite update loop..."); while (true) { var measurement = barometer.Update(); Debug.WriteLine(measurement); } }
/// <summary> /// Application start-up. /// </summary> /// <param name="taskInstance">Task instance.</param> public void Run(IBackgroundTaskInstance taskInstance) { // Initialize task _taskDeferral = taskInstance.GetDeferral(); taskInstance.Canceled += OnTaskCancelled; // Connect to hardware Debug.WriteLine("Connecting to Navio board."); _board = NavioDeviceProvider.Connect(); Debug.WriteLine("Navio board was detected as a \"{0}\".", _board.Model); var led = _board.Led; // Log start Debug.WriteLine("Navio LED test start."); // Enable oscillator and output if necessary if (!led.Enabled) { led.Enabled = true; } // Fade LEDs to blue Debug.WriteLine("Fading to blue."); var maximum = led.MaximumValue; bool fade; do { fade = false; if (led.Red > 0) { led.Red--; fade = true; } if (led.Green > 0) { led.Green--; fade = true; } if (led.Blue < maximum) { led.Blue++; fade = true; } }while (fade); // Cycle LED in infinite loop... Debug.WriteLine("Cycling in infinite loop..."); while (true) { // Red up via property... Debug.WriteLine("Red up via property..."); while (led.Red < maximum) { led.Red++; } // Wait a bit... Task.Delay(TimeSpan.FromSeconds(1)).Wait(); // Blue down via property... Debug.WriteLine("Blue down via property..."); while (led.Blue > 0) { led.Blue--; } // Wait a bit... Task.Delay(TimeSpan.FromSeconds(1)).Wait(); // Green up via property.. Debug.WriteLine("Green up via property..."); while (led.Green < maximum) { led.Green++; } // Wait a bit... Task.Delay(TimeSpan.FromSeconds(1)).Wait(); // Red down via set RGB method... Debug.WriteLine("Red down via set RGB method..."); var red = maximum; var green = maximum; var blue = 0; do { led.SetRgb(--red, green, blue); } while (red > 0); // Wait a bit... Task.Delay(TimeSpan.FromSeconds(1)).Wait(); // Blue up via set RGB method... Debug.WriteLine("Blue up via set RGB method..."); do { led.SetRgb(red, green, ++blue); } while (blue < maximum); // Wait a bit... Task.Delay(TimeSpan.FromSeconds(1)).Wait(); // Green down via set RGB method... Debug.WriteLine("Green down via set RGB method..."); do { led.SetRgb(red, --green, blue); } while (green > 0); // Wait a bit... Task.Delay(TimeSpan.FromSeconds(1)).Wait(); } }
/// <summary> /// Application start-up. /// </summary> /// <param name="taskInstance">Task instance.</param> public void Run(IBackgroundTaskInstance taskInstance) { // Initialize task _taskDeferral = taskInstance.GetDeferral(); taskInstance.Canceled += OnTaskCancelled; // Connect to hardware Debug.WriteLine("Connecting to Navio board."); _board = NavioDeviceProvider.Connect(); Debug.WriteLine("Navio board was detected as a \"{0}\".", _board.Model); var fram = _board.Fram; if (fram == null) { // No FRAM on this board! Debug.WriteLine("This board does not have a FRAM chip!"); throw new NotSupportedException(); } Debug.WriteLine("FRAM has {0} bytes of memory.", fram.Size); // Log start Debug.WriteLine("Navio FRAM memory test start."); // Write single bytes Debug.WriteLine("Writing single bytes (all 1s)..."); for (ushort address = 0; address < fram.Size; address++) { fram.WriteByte(address, 0xff); } // Read numbers Debug.WriteLine("Read single bytes (all 1s)..."); for (ushort address = 0; address < fram.Size; address++) { var test = (address == 0) ? fram.ReadByte(address) : // First call sets address to read from, fram.ReadByte(); // then following calls continue forwards if (test != 0xff) { // Data error! throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, "Invalid data, read {0:X2} but expected FF!", test)); } } // Write numbers Debug.WriteLine("Writing sequential numbers..."); for (ushort address = 0; address < fram.Size; address += 2) { var data = BitConverter.GetBytes(address); fram.WritePage(address, data); } // Read numbers Debug.WriteLine("Read of sequential numbers..."); for (ushort address = 0; address < fram.Size; address += 2) { var data = BitConverter.GetBytes(address); var test = fram.ReadPage(address, 2); if (test.Length != data.Length || test[0] != data[0] || test[1] != data[1]) { // Data error! throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, "Invalid data, read {0:X2}{1:X2} but expected {2:X2}{3:X2}!", test[0], test[1], data[0], data[1])); } } // Block erase Debug.WriteLine("Block erase (write pages of 0s)..."); var zeroBlock = new byte[fram.Size]; fram.WritePage(0, zeroBlock); // Check erased Debug.WriteLine("Checking memory has been erased..."); var testBlock = fram.ReadPage(0, zeroBlock.Length); for (var address = 0; address < zeroBlock.Length; address++) { var test = testBlock[address]; if (test != 0) { // Data error! throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, "Invalid data, read {0:X2} but expected 00!", address + address)); } } // End Debug.WriteLine("Tests complete."); _taskDeferral.Complete(); }