MathCore.HackRF 0.0.0

Requires NuGet 3.3.0 or higher.

dotnet add package MathCore.HackRF --version 0.0.0
                    
NuGet\Install-Package MathCore.HackRF -Version 0.0.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="MathCore.HackRF" Version="0.0.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="MathCore.HackRF" Version="0.0.0" />
                    
Directory.Packages.props
<PackageReference Include="MathCore.HackRF" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add MathCore.HackRF --version 0.0.0
                    
#r "nuget: MathCore.HackRF, 0.0.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package MathCore.HackRF@0.0.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=MathCore.HackRF&version=0.0.0
                    
Install as a Cake Addin
#tool nuget:?package=MathCore.HackRF&version=0.0.0
                    
Install as a Cake Tool

MathCore.HackRF

Высокоуровневая C# библиотека для управления SDR-устройством HackRF One.

🚀 Быстрый старт

Установка

dotnet add package MathCore.HackRF

Базовый пример

using MathCore.HackRF;

// Инициализация
HackRFLib.Initialize();

try
{
    // Открытие устройства
    var result = HackRFLib.Open(out var device);
    if (result != HackRfError.Success)
        throw new Exception($"Ошибка: {result}");

    // Настройка
    HackRFLib.SetFreq(device, 100_000_000);      // 100 МГц
    HackRFLib.SetSampleRate(device, 10_000_000); // 10 МГц
    HackRFLib.SetLnaGain(device, 16);            // 16 дБ
    HackRFLib.SetVgaGain(device, 20);            // 20 дБ

    // Приём данных
    HackRfDelegate callback = (ref TransferInfo transfer) =>
    {
        var data = transfer.RxBytes;
        // Обработка данных
        return 0;
    };

    HackRFLib.StartRx(device, callback);
    
    // Ваша логика обработки...
    
    HackRFLib.StopRx(device);
    HackRFLib.Close(device);
}
finally
{
    HackRFLib.Exit();
}

📋 Основные возможности

Управление устройством

  • Инициализация и подключение к HackRF One
  • Получение информации об устройстве
  • Поддержка нескольких устройств одновременно
  • Безопасное управление ресурсами

Настройка радиопараметров

  • Частота: 30 МГц - 6 ГГц
  • Частота дискретизации: 2-20 МГц
  • Полоса пропускания: 1.75-28 МГц
  • Усиление LNA: 0-40 дБ (шаг 8 дБ)
  • Усиление VGA: 0-62 дБ (шаг 2 дБ)
  • Усиление TX VGA: 0-47 дБ (шаг 1 дБ)

Режимы работы

  • Приём (RX): потоковый приём с callback-обработкой
  • Передача (TX): потоковая передача данных
  • Развёртка: автоматическое сканирование частот

🔧 API Reference

Основные методы

// Инициализация библиотеки
HackRfError Initialize()
void Exit()

// Управление устройствами
HackRfError Open(out IntPtr device)
HackRfError Close(IntPtr device)
DeviceListSafeHandle GetDeviceList()

// Настройка параметров
HackRfError SetFreq(IntPtr device, ulong freq_hz)
HackRfError SetSampleRate(IntPtr device, double freq_hz)
HackRfError SetLnaGain(IntPtr device, uint value)
HackRfError SetVgaGain(IntPtr device, uint value)
HackRfError SetBasebandFilterBandwidth(IntPtr device, uint bandwidth_hz)

// Приём и передача
HackRfError StartRx(IntPtr device, HackRfDelegate callback)
HackRfError StopRx(IntPtr device)
HackRfError StartTx(IntPtr device, HackRfDelegate callback)
HackRfError StopTx(IntPtr device)

// Развёртка частот
HackRfError InitSweep(IntPtr device, ushort[] frequency_list, int num_ranges, 
                      uint num_bytes, uint step_width, uint offset, int style)

Структуры и перечисления

// Информация о передаче данных
public struct TransferInfo
{
    public IntPtr Device { get; set; }
    public byte[] Buffer { get; set; }
    public int BufferLength { get; set; }
    public int ValidLength { get; set; }
    public byte[] RxBytes => Buffer[..ValidLength];
}

// Коды ошибок
public enum HackRfError
{
    Success = 0,
    InvalidParam = -2,
    NotFound = -5,
    Busy = -6,
    NoMem = -11,
    LibUsb = -1000,
    Thread = -1001,
    StreamingThreadErr = -1002,
    StreamingStopped = -1003,
    Other = -9999
}

// Типы плат
public enum BoardType : byte
{
    JawBreaker = 0,
    HackRfOne = 1,
    Rad1o = 2,
    Unknown = 0xFF
}

💻 Системные требования

  • .NET: 8.0 или 9.0
  • ОС: Windows x64
  • Оборудование: HackRF One или совместимое устройство
  • Драйверы: установленные драйверы HackRF
  • Библиотеки: hackrf.dll, libusb-1.0.dll, pthreadVC2.dll (включены в пакет)

📚 Дополнительные примеры

Получение информации об устройстве

// Получение списка устройств
using var device_list = HackRFLib.GetDeviceList();
var serials = HackRFLib.GetSerialNumbers(device_list);

Console.WriteLine($"Найдено устройств: {serials.Length}");
foreach (var serial in serials)
    Console.WriteLine($"Серийный номер: {serial}");

// Информация о плате
if (HackRFLib.Open(out var device) == HackRfError.Success)
{
    var board_id = HackRFLib.GetBoardId(device);
    var version = HackRFLib.GetVersion(device);
    Console.WriteLine($"Плата: {board_id}, Версия: {version}");
    
    HackRFLib.Close(device);
}

Развёртка частот

// Настройка сканирования
ushort[] frequencies = [100, 200, 300, 400, 500]; // МГц
uint bytes_per_step = 8192;
uint step_width = 1000; // мкс

HackRFLib.InitSweep(device, frequencies, frequencies.Length,
                    bytes_per_step, step_width, 0, 0);

// Запуск развёртки
HackRfDelegate sweep_callback = (ref TransferInfo transfer) =>
{
    // Обработка данных развёртки
    return 0;
};

HackRFLib.StartRx(device, sweep_callback);

🔗 Полезные ссылки

📝 Лицензия

MIT License - Шмачилин Павел (shmachilin@yandex.ru)

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net8.0

    • No dependencies.
  • net9.0

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.0.0 11 8/10/2025

Старт проекта