diff --git a/server/src/Controllers/DebuggerController.cs b/server/src/Controllers/DebuggerController.cs index f8de240..5f120fb 100644 --- a/server/src/Controllers/DebuggerController.cs +++ b/server/src/Controllers/DebuggerController.cs @@ -58,15 +58,20 @@ public class DebuggerController : ControllerBase [ProducesResponseType(StatusCodes.Status400BadRequest)] [ProducesResponseType(StatusCodes.Status500InternalServerError)] [ProducesResponseType(StatusCodes.Status401Unauthorized)] - public async Task SetMode([FromBody] CaptureMode mode) + public async Task SetMode(int channelNum, CaptureMode mode) { + if (channelNum > 0x0F) + { + return BadRequest($"最多只能建立16个通道"); + } + try { var debugger = GetDebugger(); if (debugger == null) return BadRequest("用户未绑定有效的实验板"); - var result = await debugger.SetMode(mode); + var result = await debugger.SetMode((byte)channelNum, mode); if (!result.IsSuccessful) { logger.Error($"设置捕获模式失败: {result.Error}"); diff --git a/server/src/Peripherals/DebuggerClient.cs b/server/src/Peripherals/DebuggerClient.cs index ba14728..b9f6be2 100644 --- a/server/src/Peripherals/DebuggerClient.cs +++ b/server/src/Peripherals/DebuggerClient.cs @@ -43,12 +43,12 @@ class DebuggerCmd /// 启动触发器命令 /// public const UInt32 Start = 0xFFFF_FFFF; - + /// /// 刷新命令 /// public const UInt32 Fresh = 0x0000_0000; - + /// /// 清除信号标志命令 /// @@ -119,12 +119,18 @@ public class DebuggerClient /// /// 设置信号捕获模式 /// + /// 要设置的通道 /// 要设置的捕获模式 /// 操作结果,成功返回true,失败返回错误信息 - public async ValueTask> SetMode(CaptureMode mode) + public async ValueTask> SetMode(byte channelNum, CaptureMode mode) { + if (channelNum > 0x0F) + { + return new(new ArgumentException($"Channel Num can't be over 16, but receive num: {channelNum}")); + } + UInt32 data = ((UInt32)mode); - var ret = await UDPClientPool.WriteAddr(this.ep, this.taskID, DebuggerAddr.Mode, data, this.timeout); + var ret = await UDPClientPool.WriteAddr(this.ep, this.taskID, DebuggerAddr.Mode + channelNum, data, this.timeout); if (!ret.IsSuccessful) { logger.Error($"Failed to set mode: {ret.Error}"); diff --git a/src/APIClient.ts b/src/APIClient.ts index b9c507e..8bd346c 100644 --- a/src/APIClient.ts +++ b/src/APIClient.ts @@ -1649,18 +1649,24 @@ export class DebuggerClient { /** * 设置捕获模式 + * @param channelNum (optional) + * @param mode (optional) */ - setMode(mode: string): Promise { - let url_ = this.baseUrl + "/api/Debugger/SetMode"; + setMode(channelNum: number | undefined, mode: CaptureMode | undefined): Promise { + let url_ = this.baseUrl + "/api/Debugger/SetMode?"; + if (channelNum === null) + throw new Error("The parameter 'channelNum' cannot be null."); + else if (channelNum !== undefined) + url_ += "channelNum=" + encodeURIComponent("" + channelNum) + "&"; + if (mode === null) + throw new Error("The parameter 'mode' cannot be null."); + else if (mode !== undefined) + url_ += "mode=" + encodeURIComponent("" + mode) + "&"; url_ = url_.replace(/[?&]$/, ""); - const content_ = JSON.stringify(mode); - let options_: RequestInit = { - body: content_, method: "POST", headers: { - "Content-Type": "application/json", "Accept": "application/json" } }; @@ -5508,6 +5514,15 @@ export interface IArgumentException extends ISystemException { paramName?: string | undefined; } +/** 信号捕获模式枚举 */ +export enum CaptureMode { + None = 0, + Logic0 = 1, + Logic1 = 2, + Rise = 3, + Fall = 4, +} + /** 逻辑分析仪运行状态枚举 */ export enum CaptureStatus { None = 0, diff --git a/src/utils/AuthManager.ts b/src/utils/AuthManager.ts index fd5b931..42ab7e9 100644 --- a/src/utils/AuthManager.ts +++ b/src/utils/AuthManager.ts @@ -12,6 +12,7 @@ import { LogicAnalyzerClient, NetConfigClient, OscilloscopeApiClient, + DebuggerClient, } from "@/APIClient"; // 支持的客户端类型联合类型 @@ -28,7 +29,8 @@ type SupportedClient = | LogicAnalyzerClient | UDPClient | NetConfigClient - | OscilloscopeApiClient; + | OscilloscopeApiClient + | DebuggerClient; export class AuthManager { // 存储token到localStorage @@ -168,6 +170,10 @@ export class AuthManager { public static createAuthenticatedOscilloscopeApiClient(): OscilloscopeApiClient { return AuthManager.createAuthenticatedClient(OscilloscopeApiClient); } + + public static createAuthenticatedDebuggerClient(): DebuggerClient { + return AuthManager.createAuthenticatedClient(DebuggerClient); + } // 登录函数 public static async login( diff --git a/src/views/Project/Debugger.vue b/src/views/Project/Debugger.vue index be6e578..02fd37c 100644 --- a/src/views/Project/Debugger.vue +++ b/src/views/Project/Debugger.vue @@ -1,11 +1,321 @@ - \ No newline at end of file +