From 8c649f1ad3dc527c0ba8b77e570e94e391a6415b Mon Sep 17 00:00:00 2001 From: Patrick Chuong Date: Thu, 30 Jul 2026 10:00:21 -0400 Subject: [PATCH] Add API to allow registering debug type. --- src/extension.ts | 12 ++++++++-- src/rtos/rtos.ts | 62 ++++++++++++++++++++++++++++++++---------------- 2 files changed, 51 insertions(+), 23 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index f04d4d6..6072fb2 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -1,13 +1,21 @@ import * as vscode from 'vscode'; import { RTOSTracker } from './rtos/rtos'; -export function activate(context: vscode.ExtensionContext) { +export interface RTOSViewsAPI { + /** Register an additional debug adapter type to be tracked by RTOS Views. */ + addDebugType(debugType: string): void; +} + +export function activate(context: vscode.ExtensionContext): RTOSViewsAPI { context.subscriptions.push( vscode.commands.registerCommand('mcu-debug.rtos-views.helloWorld', () => { vscode.window.showInformationMessage('Hello from rtos-views!'); }) ); - const rtosTracker = new RTOSTracker(context); // eslint-disable-line @typescript-eslint/no-unused-vars + const rtosTracker = new RTOSTracker(context); + return { + addDebugType: (debugType: string) => rtosTracker.addDebugType(debugType), + }; } export function deactivate() { } // eslint-disable-line @typescript-eslint/no-empty-function diff --git a/src/rtos/rtos.ts b/src/rtos/rtos.ts index 82ff80c..510921f 100644 --- a/src/rtos/rtos.ts +++ b/src/rtos/rtos.ts @@ -192,32 +192,45 @@ class MyDebugTracker { resolve(false); } else { trackerApi = ret; - const arg: IDebuggerTrackerSubscribeArg = { - version: 1, - body: { - debuggers: TrackedDebuggers, - handler: this.debugTrackerEventHandler.bind(this), - wantCurrentStatus: true, - notifyAllEvents: false, - // Make sure you set debugLevel to zero for production - debugLevel: 0, - }, - }; - const result = trackerApi.subscribe(arg); - if (typeof result === 'string') { - vscode.window.showErrorMessage( - `Subscription failed with extension 'debug-tracker-vscode' : ${result}` - ); - resolve(false); - } else { - trackerApiClientInfo = result; - resolve(true); - } + resolve(this.doSubscribe()); } }); }); } + public resubscribe(): boolean { + if (!trackerApi) { + return false; + } + if (trackerApiClientInfo) { + trackerApi.unsubscribe(trackerApiClientInfo.clientId); + } + return this.doSubscribe(); + } + + private doSubscribe(): boolean { + const arg: IDebuggerTrackerSubscribeArg = { + version: 1, + body: { + debuggers: TrackedDebuggers, + handler: this.debugTrackerEventHandler.bind(this), + wantCurrentStatus: true, + notifyAllEvents: false, + // Make sure you set debugLevel to zero for production + debugLevel: 0, + }, + }; + const result = trackerApi.subscribe(arg); + if (typeof result === 'string') { + vscode.window.showErrorMessage( + `Subscription failed with extension 'debug-tracker-vscode' : ${result}` + ); + return false; + } + trackerApiClientInfo = result; + return true; + } + private settingsChanged(e: vscode.ConfigurationChangeEvent) { if (e.affectsConfiguration('mcu-debug.rtos-views.trackDebuggers')) { this.updateTrackedDebuggersFromSettings(true); @@ -408,6 +421,13 @@ export class RTOSTracker implements DebugEventHandler { this.update(); } + public addDebugType(debugType: string): void { + if (!TrackedDebuggers.includes(debugType)) { + TrackedDebuggers.push(debugType); + this.theTracker.resubscribe(); + } + } + public notifyPanelDisposed() { this.visible = false; }