-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathLibrary.cs
64 lines (53 loc) · 1.77 KB
/
Library.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
// Copyright (C) 2024 - Nordic Space Link
using System;
using System.Collections.Generic;
namespace NordicSpaceLink.IIO
{
public struct LibraryVersion
{
public readonly int Major;
public readonly int Minor;
public readonly string GitTag;
public LibraryVersion(int major, int minor, string gitTag) : this()
{
Major = major;
Minor = minor;
GitTag = gitTag;
}
public override string ToString()
{
return $"{Major}.{Minor}-{GitTag}";
}
}
public static class Library
{
private static readonly List<string> backends = new();
/// <summary>
/// Get the version of the libiio library
/// </summary>
public static LibraryVersion Version { get; }
/// <summary>
/// List of supported IIO backends
/// </summary>
public static IEnumerable<string> Backends { get => backends; }
unsafe static Library()
{
nuint major, minor;
Span<byte> git_tag = stackalloc byte[8];
fixed (byte* git_tag_ptr = git_tag)
NativeMethods.iio_library_get_version(&major, &minor, git_tag_ptr);
Version = new LibraryVersion((int)major, (int)minor, git_tag.CString());
var count = NativeMethods.iio_get_backends_count();
for (int i = 0; i < (int)count; i++)
{
var name = Common.ConstCString(NativeMethods.iio_get_backend((nuint)i), 1024);
if (!string.IsNullOrWhiteSpace(name))
backends.Add(name);
}
}
public static bool HasBackend(string backend)
{
return NativeMethods.iio_has_backend(backend);
}
}
}