Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
80 changes: 77 additions & 3 deletions DotnetBleServer.sln
Original file line number Diff line number Diff line change
@@ -1,26 +1,100 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.29418.71
# Visual Studio Version 17
VisualStudioVersion = 17.8.34316.72
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Examples", "Examples\Examples.csproj", "{AE3AAA32-DFE6-4CAD-BE3D-0CFBA5C75EC4}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sample.Server", "Examples\Sample.Server.csproj", "{AE3AAA32-DFE6-4CAD-BE3D-0CFBA5C75EC4}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DotnetBleServer", "DotnetBleServer\DotnetBleServer.csproj", "{0D775919-ECF4-4C71-92ED-D7D70D9BF59F}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sample.Common", "Sample.Client\Sample.Common.csproj", "{8A7F5783-4ADB-4BE2-8D48-4FA383F166CE}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sample.Client.Win", "Sample.Client.Win\Sample.Client.Win.csproj", "{6D2973EE-F461-4A6A-990C-54F191FFD19C}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|ARM64 = Debug|ARM64
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU
Release|ARM64 = Release|ARM64
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{AE3AAA32-DFE6-4CAD-BE3D-0CFBA5C75EC4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{AE3AAA32-DFE6-4CAD-BE3D-0CFBA5C75EC4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{AE3AAA32-DFE6-4CAD-BE3D-0CFBA5C75EC4}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{AE3AAA32-DFE6-4CAD-BE3D-0CFBA5C75EC4}.Debug|ARM64.Build.0 = Debug|Any CPU
{AE3AAA32-DFE6-4CAD-BE3D-0CFBA5C75EC4}.Debug|x64.ActiveCfg = Debug|Any CPU
{AE3AAA32-DFE6-4CAD-BE3D-0CFBA5C75EC4}.Debug|x64.Build.0 = Debug|Any CPU
{AE3AAA32-DFE6-4CAD-BE3D-0CFBA5C75EC4}.Debug|x86.ActiveCfg = Debug|Any CPU
{AE3AAA32-DFE6-4CAD-BE3D-0CFBA5C75EC4}.Debug|x86.Build.0 = Debug|Any CPU
{AE3AAA32-DFE6-4CAD-BE3D-0CFBA5C75EC4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{AE3AAA32-DFE6-4CAD-BE3D-0CFBA5C75EC4}.Release|Any CPU.Build.0 = Release|Any CPU
{AE3AAA32-DFE6-4CAD-BE3D-0CFBA5C75EC4}.Release|ARM64.ActiveCfg = Release|Any CPU
{AE3AAA32-DFE6-4CAD-BE3D-0CFBA5C75EC4}.Release|ARM64.Build.0 = Release|Any CPU
{AE3AAA32-DFE6-4CAD-BE3D-0CFBA5C75EC4}.Release|x64.ActiveCfg = Release|Any CPU
{AE3AAA32-DFE6-4CAD-BE3D-0CFBA5C75EC4}.Release|x64.Build.0 = Release|Any CPU
{AE3AAA32-DFE6-4CAD-BE3D-0CFBA5C75EC4}.Release|x86.ActiveCfg = Release|Any CPU
{AE3AAA32-DFE6-4CAD-BE3D-0CFBA5C75EC4}.Release|x86.Build.0 = Release|Any CPU
{0D775919-ECF4-4C71-92ED-D7D70D9BF59F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0D775919-ECF4-4C71-92ED-D7D70D9BF59F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0D775919-ECF4-4C71-92ED-D7D70D9BF59F}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{0D775919-ECF4-4C71-92ED-D7D70D9BF59F}.Debug|ARM64.Build.0 = Debug|Any CPU
{0D775919-ECF4-4C71-92ED-D7D70D9BF59F}.Debug|x64.ActiveCfg = Debug|Any CPU
{0D775919-ECF4-4C71-92ED-D7D70D9BF59F}.Debug|x64.Build.0 = Debug|Any CPU
{0D775919-ECF4-4C71-92ED-D7D70D9BF59F}.Debug|x86.ActiveCfg = Debug|Any CPU
{0D775919-ECF4-4C71-92ED-D7D70D9BF59F}.Debug|x86.Build.0 = Debug|Any CPU
{0D775919-ECF4-4C71-92ED-D7D70D9BF59F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0D775919-ECF4-4C71-92ED-D7D70D9BF59F}.Release|Any CPU.Build.0 = Release|Any CPU
{0D775919-ECF4-4C71-92ED-D7D70D9BF59F}.Release|ARM64.ActiveCfg = Release|Any CPU
{0D775919-ECF4-4C71-92ED-D7D70D9BF59F}.Release|ARM64.Build.0 = Release|Any CPU
{0D775919-ECF4-4C71-92ED-D7D70D9BF59F}.Release|x64.ActiveCfg = Release|Any CPU
{0D775919-ECF4-4C71-92ED-D7D70D9BF59F}.Release|x64.Build.0 = Release|Any CPU
{0D775919-ECF4-4C71-92ED-D7D70D9BF59F}.Release|x86.ActiveCfg = Release|Any CPU
{0D775919-ECF4-4C71-92ED-D7D70D9BF59F}.Release|x86.Build.0 = Release|Any CPU
{8A7F5783-4ADB-4BE2-8D48-4FA383F166CE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8A7F5783-4ADB-4BE2-8D48-4FA383F166CE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8A7F5783-4ADB-4BE2-8D48-4FA383F166CE}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{8A7F5783-4ADB-4BE2-8D48-4FA383F166CE}.Debug|ARM64.Build.0 = Debug|Any CPU
{8A7F5783-4ADB-4BE2-8D48-4FA383F166CE}.Debug|x64.ActiveCfg = Debug|Any CPU
{8A7F5783-4ADB-4BE2-8D48-4FA383F166CE}.Debug|x64.Build.0 = Debug|Any CPU
{8A7F5783-4ADB-4BE2-8D48-4FA383F166CE}.Debug|x86.ActiveCfg = Debug|Any CPU
{8A7F5783-4ADB-4BE2-8D48-4FA383F166CE}.Debug|x86.Build.0 = Debug|Any CPU
{8A7F5783-4ADB-4BE2-8D48-4FA383F166CE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8A7F5783-4ADB-4BE2-8D48-4FA383F166CE}.Release|Any CPU.Build.0 = Release|Any CPU
{8A7F5783-4ADB-4BE2-8D48-4FA383F166CE}.Release|ARM64.ActiveCfg = Release|Any CPU
{8A7F5783-4ADB-4BE2-8D48-4FA383F166CE}.Release|ARM64.Build.0 = Release|Any CPU
{8A7F5783-4ADB-4BE2-8D48-4FA383F166CE}.Release|x64.ActiveCfg = Release|Any CPU
{8A7F5783-4ADB-4BE2-8D48-4FA383F166CE}.Release|x64.Build.0 = Release|Any CPU
{8A7F5783-4ADB-4BE2-8D48-4FA383F166CE}.Release|x86.ActiveCfg = Release|Any CPU
{8A7F5783-4ADB-4BE2-8D48-4FA383F166CE}.Release|x86.Build.0 = Release|Any CPU
{6D2973EE-F461-4A6A-990C-54F191FFD19C}.Debug|Any CPU.ActiveCfg = Debug|x64
{6D2973EE-F461-4A6A-990C-54F191FFD19C}.Debug|Any CPU.Build.0 = Debug|x64
{6D2973EE-F461-4A6A-990C-54F191FFD19C}.Debug|Any CPU.Deploy.0 = Debug|x64
{6D2973EE-F461-4A6A-990C-54F191FFD19C}.Debug|ARM64.ActiveCfg = Debug|ARM64
{6D2973EE-F461-4A6A-990C-54F191FFD19C}.Debug|ARM64.Build.0 = Debug|ARM64
{6D2973EE-F461-4A6A-990C-54F191FFD19C}.Debug|ARM64.Deploy.0 = Debug|ARM64
{6D2973EE-F461-4A6A-990C-54F191FFD19C}.Debug|x64.ActiveCfg = Debug|x64
{6D2973EE-F461-4A6A-990C-54F191FFD19C}.Debug|x64.Build.0 = Debug|x64
{6D2973EE-F461-4A6A-990C-54F191FFD19C}.Debug|x64.Deploy.0 = Debug|x64
{6D2973EE-F461-4A6A-990C-54F191FFD19C}.Debug|x86.ActiveCfg = Debug|x86
{6D2973EE-F461-4A6A-990C-54F191FFD19C}.Debug|x86.Build.0 = Debug|x86
{6D2973EE-F461-4A6A-990C-54F191FFD19C}.Debug|x86.Deploy.0 = Debug|x86
{6D2973EE-F461-4A6A-990C-54F191FFD19C}.Release|Any CPU.ActiveCfg = Release|x64
{6D2973EE-F461-4A6A-990C-54F191FFD19C}.Release|Any CPU.Build.0 = Release|x64
{6D2973EE-F461-4A6A-990C-54F191FFD19C}.Release|Any CPU.Deploy.0 = Release|x64
{6D2973EE-F461-4A6A-990C-54F191FFD19C}.Release|ARM64.ActiveCfg = Release|ARM64
{6D2973EE-F461-4A6A-990C-54F191FFD19C}.Release|ARM64.Build.0 = Release|ARM64
{6D2973EE-F461-4A6A-990C-54F191FFD19C}.Release|ARM64.Deploy.0 = Release|ARM64
{6D2973EE-F461-4A6A-990C-54F191FFD19C}.Release|x64.ActiveCfg = Release|x64
{6D2973EE-F461-4A6A-990C-54F191FFD19C}.Release|x64.Build.0 = Release|x64
{6D2973EE-F461-4A6A-990C-54F191FFD19C}.Release|x64.Deploy.0 = Release|x64
{6D2973EE-F461-4A6A-990C-54F191FFD19C}.Release|x86.ActiveCfg = Release|x86
{6D2973EE-F461-4A6A-990C-54F191FFD19C}.Release|x86.Build.0 = Release|x86
{6D2973EE-F461-4A6A-990C-54F191FFD19C}.Release|x86.Deploy.0 = Release|x86
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand Down
32 changes: 28 additions & 4 deletions DotnetBleServer/Advertisements/Advertisement.cs
Original file line number Diff line number Diff line change
@@ -1,15 +1,39 @@
using System;
using DotnetBleServer.Core;
using DotnetBleServer.Gatt.BlueZModel;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using DotnetBleServer.Core;

namespace DotnetBleServer.Advertisements
{
public class Advertisement : PropertiesBase<AdvertisementProperties>, ILEAdvertisement1
public class Advertisement : PropertiesBase<LEAdvertisement1Properties>, ILEAdvertisement1, IObjectManagerProperties
{
public Advertisement(string objectPath, AdvertisementProperties properties) : base(objectPath, properties)
public Advertisement(string objectPath, LEAdvertisement1Properties properties) : base(objectPath, properties)
{
}

/// <summary>
/// TODO: Keep or remove ?
/// Not sure it is mandatory for LEAdvertisement1
/// Should try setting properties without implementing IObjectManagerProperties
/// </summary>
/// <returns></returns>
public IDictionary<string, IDictionary<string, object>> GetProperties()
{
return new Dictionary<string, IDictionary<string, object>>
{
{
"org.bluez.LEAdvertisement1", new Dictionary<string, object>
{
{"LocalName", Properties.LocalName},
{"Type", Properties.Type},
{"ServiceUUIDs", Properties.ServiceUUIDs},
{"Appearance", Properties.Appearance}
}
}
};
}

public Task ReleaseAsync()
{
throw new NotImplementedException();
Expand Down
62 changes: 0 additions & 62 deletions DotnetBleServer/Advertisements/AdvertisementProperties.cs

This file was deleted.

23 changes: 11 additions & 12 deletions DotnetBleServer/Advertisements/AdvertisingManager.cs
Original file line number Diff line number Diff line change
@@ -1,40 +1,39 @@
using System;
using DotnetBleServer.Core;
using DotnetBleServer.Gatt.BlueZModel;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using DotnetBleServer.Core;
using Tmds.DBus;

namespace DotnetBleServer.Advertisements
{
public class AdvertisingManager
{
private readonly ServerContext _Context;
private readonly ServerContext _context;

public AdvertisingManager(ServerContext context)
{
_Context = context;
_context = context;
}

public async Task RegisterAdvertisement(Advertisement advertisement)
{
await _Context.Connection.RegisterObjectAsync(advertisement);
await _context.Connection.RegisterObjectAsync(advertisement);
Console.WriteLine($"advertisement object {advertisement.ObjectPath} created");

await GetAdvertisingManager().RegisterAdvertisementAsync(((IDBusObject) advertisement).ObjectPath,
new Dictionary<string, object>());

await GetAdvertisingManager().RegisterAdvertisementAsync(((IDBusObject)advertisement).ObjectPath, new Dictionary<string, object>());
Console.WriteLine($"advertisement {advertisement.ObjectPath} registered in BlueZ advertising manager");
}

private ILEAdvertisingManager1 GetAdvertisingManager()
{
return _Context.Connection.CreateProxy<ILEAdvertisingManager1>("org.bluez", "/org/bluez/hci0");
return _context.Connection.CreateProxy<ILEAdvertisingManager1>(Constants.DbusServicePath, _context.Adapter.ObjectPath);
}

public async Task CreateAdvertisement(AdvertisementProperties advertisementProperties)
public async Task CreateAdvertisement(LEAdvertisement1Properties advertisementProperties)
{
var advertisement = new Advertisement("/org/bluez/example/advertisement0", advertisementProperties);
await new AdvertisingManager(_Context).RegisterAdvertisement(advertisement);
var advertisement = new Advertisement($"{_context.Adapter.ObjectPath}/advertisement0", advertisementProperties);
await new AdvertisingManager(_context).RegisterAdvertisement(advertisement);
}
}
}
16 changes: 0 additions & 16 deletions DotnetBleServer/Advertisements/ILEAdvertisement1.cs

This file was deleted.

10 changes: 5 additions & 5 deletions DotnetBleServer/Core/BlueZ.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ interface IHealthManager1 : IDBusObject
}

[DBusInterface("org.bluez.Adapter1")]
interface IAdapter1 : IDBusObject
public interface IAdapter1 : IDBusObject
{
Task StartDiscoveryAsync();
Task SetDiscoveryFilterAsync(IDictionary<string, object> Properties);
Expand All @@ -50,7 +50,7 @@ interface IAdapter1 : IDBusObject
}

[Dictionary]
class Adapter1Properties
public class Adapter1Properties
{
private string _Address = default (string);
public string Address
Expand Down Expand Up @@ -235,7 +235,7 @@ public string Modalias
}
}

static class Adapter1Extensions
public static class Adapter1Extensions
{
public static Task<string> GetAddressAsync(this IAdapter1 o) => o.GetAsync<string>("Address");
public static Task<string> GetAddressTypeAsync(this IAdapter1 o) => o.GetAsync<string>("AddressType");
Expand Down Expand Up @@ -266,7 +266,7 @@ interface IGattManager1 : IDBusObject
}

[DBusInterface("org.bluez.LEAdvertisingManager1")]
interface ILEAdvertisingManager1 : IDBusObject
public interface ILEAdvertisingManager1 : IDBusObject
{
Task RegisterAdvertisementAsync(ObjectPath Advertisement, IDictionary<string, object> Options);
Task UnregisterAdvertisementAsync(ObjectPath Service);
Expand All @@ -277,7 +277,7 @@ interface ILEAdvertisingManager1 : IDBusObject
}

[Dictionary]
class LEAdvertisingManager1Properties
public class LEAdvertisingManager1Properties
{
private byte _ActiveInstances = default (byte);
public byte ActiveInstances
Expand Down
8 changes: 8 additions & 0 deletions DotnetBleServer/Core/Constants.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
namespace DotnetBleServer.Core
{
public static class Constants
{
public const string DbusServicePath = "org.bluez";
public const string AdapterInterfacePath = "org.bluez.Adapter1";
}
}
Loading