using AIK.Common.Enum; using AIK.Common.Event; using AIK.Models.HidModels; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace AIK.Service.IService { public interface IHidCommunicationService { bool IsConnected { get; } TransferState State { get; } event EventHandler? ResponseReceived; event EventHandler? LogMessage; event EventHandler? ConnectionStateChanged; Task ConnectAsync(int vendorId = 0x28E9, int productId = 0xFFF0); Task ReconnectNowAsync(); Task DisconnectAsync(); /// /// 发送设备分包基础帧(头帧/数据帧/结束帧等) /// /// /// Task SendAsync(byte[] data); /// /// 根据本地路径烧录文件 /// /// /// /// /// Task<(bool, string)> SendFileAsync(string filePath, IProgress progress, CancellationToken ct); /// /// 根据文件名称和文件二进制数据烧录文件 /// /// /// /// /// /// Task<(bool, string)> SendFileAsync(string fileName, byte[] filebin, IProgress progress, CancellationToken ct); /// /// 附加烧录流程阶段(连接/生成/写入) /// /// /// /// /// /// Task<(bool, string)> SendFileProcessAsync(string fileName, byte[] filebin, IProgress progress, CancellationToken ct); /// /// 附加烧录流程阶段-固件升级(连接/生成/写入) /// /// /// /// /// /// Task<(bool, string)> SendFileProcessAsync(string fileName, byte[] filebin, HidOperationTypeEnum hidOperationType, IProgress progress, CancellationToken ct); Task<(bool, string)> GetDeviceVersion(HidOperationTypeEnum hidOperationType); /// /// K3Tool盘符获取 /// /// /// /// Task FindAssociatedUsbDisk(int vendorId = 0x28E9, int productId = 0xFFF0); /// /// 复制文件或文件夹到U盘 /// /// /// /// Task<(bool, string)> CopyToUdiskAsync(string sourcePath, bool isDirectory, IProgress progress, CancellationToken cts); /// /// 打开U盘并检测盘符 /// /// /// /// /// Task OpenUDiskAndDetectDriveAsync(int maxWaitSeconds = 15, int pollIntervalMs = 500, CancellationToken cancellationToken = default); /// /// 关闭U盘 /// /// /// Task CloseUDiskSafeDriveAsync(string targetDrive = ""); Task KeepDeviceAliveAsync(); public Task CopyDeltaDirectoryToUdiskAsync( string localRootDir, IProgress progress, CancellationToken ct); public Task> ScanUdiskFilesAsync(CancellationToken ct); public Dictionary ScanLocalFiles(string localRootDir); public List GetChangedFiles( Dictionary localFiles, Dictionary udiskFiles); public Task<(string zipPath, int count)> CreateDeltaZipAsync( string localRootDir, List changedRelativePaths, CancellationToken ct); } }