深湾创新
Windows SDK

Windows SDK 集成指南

SDK接入示意图

SDK接入示意图

系统要求

操作系统:Windows 10 及以上版本

开发环境:Visual Studio 2019 及以上

框架支持:.NET Framework 4.7.2+ 或 .NET Core 3.1+

编程语言:C#, C++, VB.NET

硬件要求:支持蓝牙4.0或USB接口

SDK集成

1. NuGet包管理器安装

在Visual Studio中使用NuGet包管理器安装:

Install-Package ShenWan.BrainwaveSDK -Version 1.2.0

2. 手动引用DLL

下载SDK包,添加以下DLL引用:

ShenWan.BrainwaveSDK.dll
ShenWan.BrainwaveSDK.Core.dll
Newtonsoft.Json.dll

3. 配置app.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings>
    <add key="ShenWan.SDK.LogLevel" value="Info" />
    <add key="ShenWan.SDK.DataPath" value="./Data/" />
  </appSettings>
</configuration>

C# 基本使用

1. 初始化SDK

using ShenWan.BrainwaveSDK;
using ShenWan.BrainwaveSDK.Core;

public partial class MainWindow : Window
{
    private BrainwaveSDK sdk;
    private DeviceManager deviceManager;
    private DataManager dataManager;
    
    public MainWindow()
    {
        InitializeComponent();
        InitializeSDK();
    }
    
    private void InitializeSDK()
    {
        // 初始化SDK
        sdk = BrainwaveSDK.Instance;
        sdk.Initialize();
        
        // 获取管理器实例
        deviceManager = sdk.DeviceManager;
        dataManager = sdk.DataManager;
        
        // 注册事件
        RegisterEvents();
    }
}

2. 设备管理

private void RegisterEvents()
{
    // 设备发现事件
    deviceManager.DeviceDiscovered += OnDeviceDiscovered;
    deviceManager.DeviceConnected += OnDeviceConnected;
    deviceManager.DeviceDisconnected += OnDeviceDisconnected;
    
    // 数据接收事件
    dataManager.RawDataReceived += OnRawDataReceived;
    dataManager.ProcessedDataReceived += OnProcessedDataReceived;
}

private async void StartScan_Click(object sender, RoutedEventArgs e)
{
    try
    {
        await deviceManager.StartScanAsync();
        StatusLabel.Content = "正在扫描设备...";
    }
    catch (Exception ex)
    {
        MessageBox.Show($"扫描失败: {ex.Message}");
    }
}

private void OnDeviceDiscovered(object sender, DeviceDiscoveredEventArgs e)
{
    Dispatcher.Invoke(() =>
    {
        DeviceListBox.Items.Add(e.Device);
    });
}

private async void ConnectDevice_Click(object sender, RoutedEventArgs e)
{
    if (DeviceListBox.SelectedItem is BrainwaveDevice device)
    {
        try
        {
            await deviceManager.ConnectAsync(device);
        }
        catch (Exception ex)
        {
            MessageBox.Show($"连接失败: {ex.Message}");
        }
    }
}

3. 数据采集和处理

private void OnDeviceConnected(object sender, DeviceConnectedEventArgs e)
{
    Dispatcher.Invoke(() =>
    {
        StatusLabel.Content = "设备连接成功";
        StartCollectionButton.IsEnabled = true;
    });
}

private async void StartCollection_Click(object sender, RoutedEventArgs e)
{
    try
    {
        var config = new DataCollectionConfig
        {
            SamplingRate = 250,
            EnableRawData = true,
            EnableProcessedData = true,
            FilterSettings = new FilterSettings
            {
                EnableBandpassFilter = true,
                LowCutoff = 1.0f,
                HighCutoff = 50.0f
            }
        };
        
        await dataManager.StartCollectionAsync(config);
        StatusLabel.Content = "数据采集中...";
    }
    catch (Exception ex)
    {
        MessageBox.Show($"启动采集失败: {ex.Message}");
    }
}

private void OnRawDataReceived(object sender, RawDataEventArgs e)
{
    // 处理原始脑电数据
    var rawData = e.Data;
    
    Dispatcher.Invoke(() =>
    {
        // 更新实时波形图
        UpdateWaveformChart(rawData);
    });
}

private void OnProcessedDataReceived(object sender, ProcessedDataEventArgs e)
{
    var data = e.Data;
    
    Dispatcher.Invoke(() =>
    {
        // 更新指标显示
        AttentionLabel.Content = $"专注度: {data.Attention:F1}";
        RelaxationLabel.Content = $"放松度: {data.Relaxation:F1}";
        StressLabel.Content = $"压力值: {data.Stress:F1}";
        
        // 更新图表
        UpdateMetricsChart(data);
    });
}

高级功能

1. 数据存储和导出

private async void SaveData_Click(object sender, RoutedEventArgs e)
{
    var saveDialog = new SaveFileDialog
    {
        Filter = "CSV文件|*.csv|JSON文件|*.json|所有文件|*.*",
        DefaultExt = "csv"
    };
    
    if (saveDialog.ShowDialog() == true)
    {
        try
        {
            var exportConfig = new DataExportConfig
            {
                FilePath = saveDialog.FileName,
                Format = GetFormatFromExtension(saveDialog.FileName),
                IncludeRawData = true,
                IncludeProcessedData = true,
                TimeRange = new TimeRange
                {
                    Start = SessionStartTime,
                    End = DateTime.Now
                }
            };
            
            await dataManager.ExportDataAsync(exportConfig);
            MessageBox.Show("数据导出成功!");
        }
        catch (Exception ex)
        {
            MessageBox.Show($"导出失败: {ex.Message}");
        }
    }
}

2. 实时分析和算法配置

private void ConfigureAnalysis()
{
    var analysisConfig = new AnalysisConfig
    {
        WindowSize = 1000, // 1秒窗口
        OverlapRatio = 0.5f, // 50%重叠
        Algorithms = new List<AlgorithmConfig>
        {
            new AlgorithmConfig
            {
                Type = AlgorithmType.Attention,
                Parameters = new Dictionary<string, object>
                {
                    ["threshold"] = 0.7,
                    ["smoothing"] = true
                }
            },
            new AlgorithmConfig
            {
                Type = AlgorithmType.Relaxation,
                Parameters = new Dictionary<string, object>
                {
                    ["alpha_weight"] = 0.8,
                    ["theta_weight"] = 0.2
                }
            }
        }
    };
    
    dataManager.ConfigureAnalysis(analysisConfig);
}

3. 多线程和异步处理

private async Task ProcessDataAsync(RawData rawData)
{
    await Task.Run(() =>
    {
        // 在后台线程处理数据
        var processedData = AnalyzeData(rawData);
        
        // 回到UI线程更新界面
        Dispatcher.Invoke(() =>
        {
            UpdateUI(processedData);
        });
    });
}

private ProcessedData AnalyzeData(RawData rawData)
{
    // 自定义数据分析逻辑
    var analyzer = new CustomAnalyzer();
    return analyzer.Process(rawData);
}