Skip to content
Snippets Groups Projects
Commit a2f655a2 authored by Paul-Winpenny's avatar Paul-Winpenny
Browse files

okay so it looks like the problem with the "ObjectDisposed" exception is...

okay so it looks like the problem with  the "ObjectDisposed" exception is related to accessing characteristics after they have been discarded, solution might be to have the "SCAN" be sent dring the scan wifi networks method, and just use the service saved instead of saving charactersitics.
parent d55c6826
No related branches found
No related tags found
No related merge requests found
using Microsoft.Extensions.Logging;
using Plugin.BLE;
using Plugin.BLE.Abstractions.Contracts;
namespace RobobinApp;
public partial class App : Application
{
public static IBluetoothLE BluetoothLE { get; private set; }
public static IAdapter BluetoothAdapter { get; private set; }
public App()
{
InitializeComponent();
ConfigureLogging();
// Initialize the Bluetooth adapter
InitializeBluetoothAdapter();
MainPage = new AppShell();
}
private void ConfigureLogging()
private void ConfigureLogging()
{
var loggerFactory = LoggerFactory.Create(builder =>
{
// Create a LoggerFactory
var loggerFactory = LoggerFactory.Create(builder =>
{
builder
.AddConsole()
.AddDebug();
});
// Store the logger factory for later use
Logger = loggerFactory.CreateLogger<App>();
}
public ILogger<App> Logger { get; private set; }
}
builder
.AddConsole()
.AddDebug();
});
Logger = loggerFactory.CreateLogger<App>();
}
private void InitializeBluetoothAdapter()
{
BluetoothLE = CrossBluetoothLE.Current;
BluetoothAdapter = BluetoothLE.Adapter;
}
public ILogger<App> Logger { get; private set; }
}
......@@ -72,6 +72,17 @@ namespace RobobinApp.ViewModels
OnPropertyChanged();
}
}
private IService _readWriteService;
public IService ReadWriteService
{
get => _readWriteService;
set
{
_readWriteService = value;
OnPropertyChanged();
}
}
public ICharacteristic WriteCharacteristic
{
......@@ -115,8 +126,9 @@ namespace RobobinApp.ViewModels
public ConnectionPageViewModel()
{
_bluetoothLE = CrossBluetoothLE.Current;
_adapter = CrossBluetoothLE.Current.Adapter;
_bluetoothLE = App.BluetoothLE;
_adapter = App.BluetoothAdapter;
BluetoothDevices = new ObservableCollection<BluetoothDevice>();
......@@ -140,9 +152,17 @@ namespace RobobinApp.ViewModels
private void OnSendWifiInfo(object obj)
{
var SSID = SelectedWifiNetwork.SSID;
var result = WriteOperationAsync("CONNECT", SSID + "," + password);
Debug.WriteLine($"Result: {result}");
try
{
var SSID = SelectedWifiNetwork.SSID;
var result = WriteOperationAsync("CONNECT", SSID + "," + password);
Debug.WriteLine($"Result: {result}");
}
catch (Exception e)
{
Debug.WriteLine("There is a problem sending wifi info ", e.Message);
}
}
private async Task PingPiASync()
......@@ -163,8 +183,7 @@ namespace RobobinApp.ViewModels
WifiNetworks.Clear();
Debug.WriteLine("Retrieving Wifi networks from readCharacteristic");
//Delay 5 seconds
await Task.Delay(2500);
var networks = await ReadOperationAsync();
//var networks = "Network1\nNetwork2\nNetwork3"; // For testing
......@@ -350,7 +369,7 @@ namespace RobobinApp.ViewModels
try
{
await _adapter.StopScanningForDevicesAsync();
//await _adapter.StopScanningForDevicesAsync();
IsConnected = true;
_connectedDevice = await TryConnectAsync(Guid.Parse(SelectedDevice.MacAddress));
......@@ -364,6 +383,8 @@ namespace RobobinApp.ViewModels
IsWifiNetworkSelectionVisible = true;
// Iterate through the discovered services
//var service = await _connectedDevice.GetServiceAsync(Guid.Parse("00000001-710e-4a5b-8d75-3e5b444bc3cf"));
await Task.Delay(2000);
foreach (var service in services)
{
......@@ -372,7 +393,10 @@ namespace RobobinApp.ViewModels
if (service.Id.Equals(Guid.Parse("00000001-710e-4a5b-8d75-3e5b444bc3cf")) )
{
Debug.WriteLine("Found RW service");
var characteristics = await service.GetCharacteristicsAsync();
ReadWriteService = service;
ScanForWifiNetworks();
return;
/***var characteristics = await service.GetCharacteristicsAsync();
foreach (var characteristic in characteristics)
{
......@@ -400,13 +424,10 @@ namespace RobobinApp.ViewModels
ScanForWifiNetworks();
}
}
}**/
}
}
var transmissionService = services.FirstOrDefault(s => s.Id == Guid.Parse(SendReceiveServiceUUID));
var readCharacteristic = await transmissionService.GetCharacteristicAsync(Guid.Parse(rxUUID));
var result2 = await ReadOperationAsync();
}
else
......@@ -441,9 +462,9 @@ namespace RobobinApp.ViewModels
private async Task<string> ReadOperationAsync(int retryCount = 3)
{
if (ReadCharacteristic == null)
if (ReadCharacteristic == null || !IsConnected)
{
Debug.WriteLine("Read characteristic is not set.");
Debug.WriteLine("Read characteristic is not set or device is not connected.");
return "Failure";
}
Debug.WriteLine($"READ COMMAND : {ReadCharacteristic.Uuid}");
......@@ -517,13 +538,11 @@ namespace RobobinApp.ViewModels
try
{
Debug.WriteLine($"Attempting to disconnect from {_connectedDevice.Name}");
ResetState();
await _adapter.DisconnectDeviceAsync(_connectedDevice);
Debug.WriteLine("Disconnected successfully.");
IsWifiNetworkSelectionVisible = false;
// Dispose of the device reference
if (_connectedDevice != null)
// _connectedDevice.Dispose();
_connectedDevice = null;
ResetState();
IsConnected = false;
ScanDevices();
await Application.Current.MainPage.DisplayAlert("Disconnected", "Device disconnected successfully.", "OK");
......@@ -539,8 +558,21 @@ namespace RobobinApp.ViewModels
Debug.WriteLine("No device to disconnect.");
}
}
private void ResetState()
{
IsConnected = false;
SelectedDevice = null;
SelectedWifiNetwork = null;
WifiNetworks.Clear();
BluetoothDevices.Clear();
ReadCharacteristic = null;
WriteCharacteristic = null;
IsWifiNetworkSelectionVisible = false;
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment