From a1f7302b6e663c1bfa773642425baa331bd268cc Mon Sep 17 00:00:00 2001 From: TheZoq2 Date: Fri, 6 Dec 2024 13:22:48 +0100 Subject: [PATCH 01/11] [WIP]: Surfer message handling --- src/extension.ts | 9 ++++- src/surfer/embed.ts | 30 ++++++++++++-- src/ui/waveform.ts | 99 ++++++++++++++++++++++++++++++--------------- vendor/surfer | 2 +- 4 files changed, 101 insertions(+), 39 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index 22b8e36..4f9f429 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -12,6 +12,8 @@ import { WaveformProvider } from './ui/waveform'; export function activate(context: vscode.ExtensionContext) { const rtlDebugger = new CXXRTLDebugger(); + console.log('Attached'); + const sidebarTreeDataProvider = new sidebar.TreeDataProvider(rtlDebugger); const sidebarTreeView = vscode.window.createTreeView('rtlDebugger.sidebar', { treeDataProvider: sidebarTreeDataProvider @@ -60,8 +62,8 @@ export function activate(context: vscode.ExtensionContext) { })); context.subscriptions.push(vscode.commands.registerCommand('rtlDebugger.stepBackward', () => rtlDebugger.session!.stepBackward())); - context.subscriptions.push(vscode.commands.registerCommand('rtlDebugger.stepForward', () => - rtlDebugger.session!.stepForward())); + // context.subscriptions.push(vscode.commands.registerCommand('rtlDebugger.stepForward', () => + // rtlDebugger.session!.stepForward())); context.subscriptions.push(vscode.commands.registerCommand('rtlDebugger.continueForward', () => rtlDebugger.session!.continueForward())); context.subscriptions.push(vscode.commands.registerCommand('rtlDebugger.goToTime', async () => { @@ -89,7 +91,10 @@ export function activate(context: vscode.ExtensionContext) { context.subscriptions.push(vscode.commands.registerCommand('rtlDebugger.unWatchVariable', (treeItem) => globalWatchList.remove(treeItem.metadata.index))); + + console.log('Registering rtlDebugger.browseWaveforms'); context.subscriptions.push(vscode.commands.registerCommand('rtlDebugger.browseWaveforms', () => { + console.log('Running browseWaveforms'); const webviewPanel = vscode.window.createWebviewPanel( 'rtlDebugger.waveforms', 'Waveforms', { diff --git a/src/surfer/embed.ts b/src/surfer/embed.ts index 7f1fd3e..73763b1 100644 --- a/src/surfer/embed.ts +++ b/src/surfer/embed.ts @@ -1,11 +1,13 @@ import libsurferInit, * as libsurfer from 'libsurfer'; -import type { ExtensionToWebviewMessage, WebviewToExtensionMessage } from '../ui/waveform'; +import { ClientPacketString, type ExtensionToWebviewMessage, type WebviewToExtensionMessage } from '../ui/waveform'; +import { Packet } from '../cxxrtl/link'; function libsurferInjectMessage(message: any) { libsurfer.inject_message(JSON.stringify(message)); } + document.addEventListener('DOMContentLoaded', async () => { const vscode = acquireVsCodeApi(); const canvas = document.getElementById('canvas'); @@ -19,15 +21,37 @@ document.addEventListener('DOMContentLoaded', async () => { }); const postMessage = <(message: WebviewToExtensionMessage) => void>vscode.postMessage; - window.addEventListener('message', (event: MessageEvent) => { + window.addEventListener('message', async (event: MessageEvent) => { const message = event.data; - console.error('[RTL Debugger] [surferEmbed] Unhandled extension to webview message', message); + if (message.type == "cxxrtl_scmessage") { + console.log("Sending response message to Surfer") + await libsurfer.on_cxxrtl_sc_message(message.message.inner) + } + else { + console.error('[RTL Debugger] [surferEmbed] Unhandled extension to webview message', message); + } }); + const handle_cs_messages = async () => { + while (true) { + const message = await libsurfer.cxxrtl_cs_message() + if (message) { + console.log("Posting message from surfer: ", message); + postMessage({type: 'cxxrtl_csmessage', message: new ClientPacketString(message)}) + } else { + throw Error("Got an undefined message from Surfer. Its client probably disconnected") + } + } + } + try { await libsurferInit(); await new libsurfer.WebHandle().start(canvas); + handle_cs_messages(); + + await libsurfer.start_cxxrtl(); + libsurferInjectMessage('ToggleMenu'); // turn off menu libsurferInjectMessage('ToggleStatusBar'); // turn off status bar libsurferInjectMessage('ToggleSidePanel'); diff --git a/src/ui/waveform.ts b/src/ui/waveform.ts index 24a3746..0d3193e 100644 --- a/src/ui/waveform.ts +++ b/src/ui/waveform.ts @@ -3,50 +3,83 @@ import * as vscode from 'vscode'; import { CXXRTLDebugger } from '../debugger'; // @ts-ignore import embedHtml from '../surfer/embed.html'; +import { ILink, Packet } from '../cxxrtl/link'; +import { ClientPacket, ServerPacket } from '../cxxrtl/proto'; + +export class ClientPacketString { + constructor(public inner: string) { } +} +export class ServerPacketString { + constructor(public inner: string) { } +} + export type ExtensionToWebviewMessage = -| { type: 'restore', state: any } -; + | { type: 'restore', state: any } + // TODO: Proper type here + | { type: 'cxxrtl_scmessage', message: ServerPacketString } + ; export type WebviewToExtensionMessage = -| { type: 'ready' } -| { type: 'crash', error: any } -; + | { type: 'ready' } + | { type: 'crash', error: any } + // TODO: Proper type here + | { type: 'cxxrtl_csmessage', message: ClientPacketString } + ; export class WaveformProvider { - constructor( - private rtlDebugger: CXXRTLDebugger, - private webviewPanel: vscode.WebviewPanel, - bundleRoot: vscode.Uri, - ) { - const webviewHtml = embedHtml.replace(/__base_href__/, - this.webview.asWebviewUri(bundleRoot).toString()); - this.webview.onDidReceiveMessage(this.processMessage.bind(this)); - this.webview.html = webviewHtml; - } + constructor( + private rtlDebugger: CXXRTLDebugger, + private webviewPanel: vscode.WebviewPanel, + bundleRoot: vscode.Uri, + ) { + const webviewHtml = embedHtml.replace(/__base_href__/, + this.webview.asWebviewUri(bundleRoot).toString()); + this.webview.onDidReceiveMessage(this.processMessage.bind(this)); + this.webview.html = webviewHtml; + const debuggerLink = rtlDebugger.session?.createSecondaryLink() - dispose() { - this.webviewPanel.dispose(); + // TODO: Correct way to handle errors? + if (debuggerLink) { + this.debuggerLink = debuggerLink + this.debuggerLink.onRecv = async (message) => { + console.log("Running on recv for ", message) + // await this.sendMessage({ type: "cxxrtl_scmessage", message: new ServerPacketString(message.asString()) }) + } + } else { + throw new Error("Failed to create secondary debugger link") } + } - get webview() { - return this.webviewPanel.webview; - } + dispose() { + this.webviewPanel.dispose(); + } - private async sendMessage(message: ExtensionToWebviewMessage) { - const messagePosted = await this.webview.postMessage(message); - if (!messagePosted) { - console.warn('[RTL Debugger] [WaveformProvider] Dropping extension to webview message:', message); - } + get webview() { + return this.webviewPanel.webview; + } + + private async sendMessage(message: ExtensionToWebviewMessage) { + const messagePosted = await this.webview.postMessage(message); + if (!messagePosted) { + console.warn('[RTL Debugger] [WaveformProvider] Dropping extension to webview message:', message); } + } - private async processMessage(message: WebviewToExtensionMessage) { - if (message.type === 'ready') { - console.log('[RTL Debugger] [WaveformProvider] Ready'); - } else if (message.type === 'crash') { - console.log('[RTL Debugger] [WaveformProvider] Crash:', message.error); - } else { - console.error('[RTL Debugger] [WaveformProvider] Unhandled webview to extension message:', message); - } + private async processMessage(message: WebviewToExtensionMessage) { + if (message.type === 'ready') { + console.log('[RTL Debugger] [WaveformProvider] Ready'); + } else if (message.type === 'crash') { + console.log('[RTL Debugger] [WaveformProvider] Crash:', message.error); + } else if (message.type == 'cxxrtl_csmessage') { + console.log(`[RTL Debugger] [WaveformProvider] Got CSMessage`, message.message); + const packet: Packet = Packet.fromString(message.message.inner); + console.log("Handing ", packet.asString(), " off to debugger link") + await this.debuggerLink.send(packet) + } else { + console.error('[RTL Debugger] [WaveformProvider] Unhandled webview to extension message:', message); } + } + + private debuggerLink: ILink; } diff --git a/vendor/surfer b/vendor/surfer index d799765..880ab29 160000 --- a/vendor/surfer +++ b/vendor/surfer @@ -1 +1 @@ -Subproject commit d799765996895b10c6ab6b70dbb5ae6f5501c579 +Subproject commit 880ab29a08c9b78de9cc09c9b6913a5c2cdc04c4 From 54eb5ef81c3397ad18ce23c6d61dcc6f9f210c04 Mon Sep 17 00:00:00 2001 From: TheZoq2 Date: Fri, 6 Dec 2024 17:29:19 +0100 Subject: [PATCH 02/11] [WIP] Initial wasm connection to surfer --- example/.vscode/settings.json | 3 ++ src/extension.ts | 4 +- src/surfer/embed.ts | 25 ++++----- src/ui/waveform.ts | 95 +++++++++++++++++------------------ vendor/surfer | 2 +- 5 files changed, 64 insertions(+), 65 deletions(-) diff --git a/example/.vscode/settings.json b/example/.vscode/settings.json index 140d170..42c343d 100644 --- a/example/.vscode/settings.json +++ b/example/.vscode/settings.json @@ -3,6 +3,9 @@ "${workspaceFolder}/design_sim" ], "rtlDebugger.watchList": [ + { + "id": "top data" + }, { "id": "top data" } diff --git a/src/extension.ts b/src/extension.ts index 4f9f429..87440b1 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -62,8 +62,8 @@ export function activate(context: vscode.ExtensionContext) { })); context.subscriptions.push(vscode.commands.registerCommand('rtlDebugger.stepBackward', () => rtlDebugger.session!.stepBackward())); - // context.subscriptions.push(vscode.commands.registerCommand('rtlDebugger.stepForward', () => - // rtlDebugger.session!.stepForward())); + context.subscriptions.push(vscode.commands.registerCommand('rtlDebugger.stepForward', () => + rtlDebugger.session!.stepForward())); context.subscriptions.push(vscode.commands.registerCommand('rtlDebugger.continueForward', () => rtlDebugger.session!.continueForward())); context.subscriptions.push(vscode.commands.registerCommand('rtlDebugger.goToTime', async () => { diff --git a/src/surfer/embed.ts b/src/surfer/embed.ts index 73763b1..b54eec5 100644 --- a/src/surfer/embed.ts +++ b/src/surfer/embed.ts @@ -1,7 +1,6 @@ import libsurferInit, * as libsurfer from 'libsurfer'; import { ClientPacketString, type ExtensionToWebviewMessage, type WebviewToExtensionMessage } from '../ui/waveform'; -import { Packet } from '../cxxrtl/link'; function libsurferInjectMessage(message: any) { libsurfer.inject_message(JSON.stringify(message)); @@ -23,26 +22,24 @@ document.addEventListener('DOMContentLoaded', async () => { const postMessage = <(message: WebviewToExtensionMessage) => void>vscode.postMessage; window.addEventListener('message', async (event: MessageEvent) => { const message = event.data; - if (message.type == "cxxrtl_scmessage") { - console.log("Sending response message to Surfer") - await libsurfer.on_cxxrtl_sc_message(message.message.inner) - } - else { - console.error('[RTL Debugger] [surferEmbed] Unhandled extension to webview message', message); + if (message.type === 'cxxrtl_scmessage') { + console.log("Handing off ", message.message.inner, " to Surfer") + await libsurfer.on_cxxrtl_sc_message(message.message.inner); + } else { + console.error('[RTL Debugger] [surferEmbed] Unhandled extension to webview message', message); } }); const handle_cs_messages = async () => { while (true) { - const message = await libsurfer.cxxrtl_cs_message() + const message = await libsurfer.cxxrtl_cs_message(); if (message) { - console.log("Posting message from surfer: ", message); - postMessage({type: 'cxxrtl_csmessage', message: new ClientPacketString(message)}) + postMessage({type: 'cxxrtl_csmessage', message: new ClientPacketString(message)}); } else { - throw Error("Got an undefined message from Surfer. Its client probably disconnected") + throw Error('Got an undefined message from Surfer. Its client probably disconnected'); } } - } + }; try { await libsurferInit(); @@ -53,8 +50,8 @@ document.addEventListener('DOMContentLoaded', async () => { await libsurfer.start_cxxrtl(); libsurferInjectMessage('ToggleMenu'); // turn off menu - libsurferInjectMessage('ToggleStatusBar'); // turn off status bar - libsurferInjectMessage('ToggleSidePanel'); + // libsurferInjectMessage('ToggleStatusBar'); // turn off status bar + // libsurferInjectMessage('ToggleSidePanel'); libsurferInjectMessage({ SelectTheme: 'dark+' }); // pick VS Code like theme overlay.style.display = 'none'; diff --git a/src/ui/waveform.ts b/src/ui/waveform.ts index 0d3193e..9c5f1a8 100644 --- a/src/ui/waveform.ts +++ b/src/ui/waveform.ts @@ -4,13 +4,13 @@ import { CXXRTLDebugger } from '../debugger'; // @ts-ignore import embedHtml from '../surfer/embed.html'; import { ILink, Packet } from '../cxxrtl/link'; -import { ClientPacket, ServerPacket } from '../cxxrtl/proto'; +import { ClientPacket } from '../cxxrtl/proto'; export class ClientPacketString { - constructor(public inner: string) { } + constructor(public inner: string) { } } export class ServerPacketString { - constructor(public inner: string) { } + constructor(public inner: string) { } } @@ -28,58 +28,57 @@ export type WebviewToExtensionMessage = ; export class WaveformProvider { - constructor( - private rtlDebugger: CXXRTLDebugger, - private webviewPanel: vscode.WebviewPanel, - bundleRoot: vscode.Uri, - ) { - const webviewHtml = embedHtml.replace(/__base_href__/, - this.webview.asWebviewUri(bundleRoot).toString()); - this.webview.onDidReceiveMessage(this.processMessage.bind(this)); - this.webview.html = webviewHtml; - const debuggerLink = rtlDebugger.session?.createSecondaryLink() + constructor( + private rtlDebugger: CXXRTLDebugger, + private webviewPanel: vscode.WebviewPanel, + bundleRoot: vscode.Uri, + ) { + const webviewHtml = embedHtml.replace(/__base_href__/, + this.webview.asWebviewUri(bundleRoot).toString()); + this.webview.onDidReceiveMessage(this.processMessage.bind(this)); + this.webview.html = webviewHtml; + const debuggerLink = rtlDebugger.session?.createSecondaryLink(); - // TODO: Correct way to handle errors? - if (debuggerLink) { - this.debuggerLink = debuggerLink - this.debuggerLink.onRecv = async (message) => { - console.log("Running on recv for ", message) - // await this.sendMessage({ type: "cxxrtl_scmessage", message: new ServerPacketString(message.asString()) }) - } - } else { - throw new Error("Failed to create secondary debugger link") + // TODO: Correct way to handle errors? + if (debuggerLink) { + this.debuggerLink = debuggerLink; + this.debuggerLink.onRecv = async (message) => { + // console.log("Running on recv for ", message) + await this.sendMessage({ type: "cxxrtl_scmessage", message: new ServerPacketString(message.asString()) }) + }; + } else { + throw new Error('Failed to create secondary debugger link'); + } } - } - dispose() { - this.webviewPanel.dispose(); - } + dispose() { + this.webviewPanel.dispose(); + } - get webview() { - return this.webviewPanel.webview; - } + get webview() { + return this.webviewPanel.webview; + } - private async sendMessage(message: ExtensionToWebviewMessage) { - const messagePosted = await this.webview.postMessage(message); - if (!messagePosted) { - console.warn('[RTL Debugger] [WaveformProvider] Dropping extension to webview message:', message); + private async sendMessage(message: ExtensionToWebviewMessage) { + const messagePosted = await this.webview.postMessage(message); + if (!messagePosted) { + console.warn('[RTL Debugger] [WaveformProvider] Dropping extension to webview message:', message); + } } - } - private async processMessage(message: WebviewToExtensionMessage) { - if (message.type === 'ready') { - console.log('[RTL Debugger] [WaveformProvider] Ready'); - } else if (message.type === 'crash') { - console.log('[RTL Debugger] [WaveformProvider] Crash:', message.error); - } else if (message.type == 'cxxrtl_csmessage') { - console.log(`[RTL Debugger] [WaveformProvider] Got CSMessage`, message.message); - const packet: Packet = Packet.fromString(message.message.inner); - console.log("Handing ", packet.asString(), " off to debugger link") - await this.debuggerLink.send(packet) - } else { - console.error('[RTL Debugger] [WaveformProvider] Unhandled webview to extension message:', message); + private async processMessage(message: WebviewToExtensionMessage) { + if (message.type === 'ready') { + console.log('[RTL Debugger] [WaveformProvider] Ready'); + } else if (message.type === 'crash') { + console.log('[RTL Debugger] [WaveformProvider] Crash:', message.error); + } else if (message.type == 'cxxrtl_csmessage') { + console.log('[RTL Debugger] [WaveformProvider] Got CSMessage', message.message); + const packet: Packet = Packet.fromString(message.message.inner); + await this.debuggerLink.send(packet); + } else { + console.error('[RTL Debugger] [WaveformProvider] Unhandled webview to extension message:', message); + } } - } - private debuggerLink: ILink; + private debuggerLink: ILink; } diff --git a/vendor/surfer b/vendor/surfer index 880ab29..e0c704b 160000 --- a/vendor/surfer +++ b/vendor/surfer @@ -1 +1 @@ -Subproject commit 880ab29a08c9b78de9cc09c9b6913a5c2cdc04c4 +Subproject commit e0c704b53fbb501fe05e233e2673a9d5522d3daa From a2d8d0dc45fb4c95050bb8350bf2d07e0fddc02b Mon Sep 17 00:00:00 2001 From: TheZoq2 Date: Tue, 10 Dec 2024 16:01:33 +0100 Subject: [PATCH 03/11] Ensure that display is refreshed on events --- src/debug/session.ts | 1 + src/ui/waveform.ts | 19 ++++++++++--------- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/debug/session.ts b/src/debug/session.ts index 1156019..3f955a3 100644 --- a/src/debug/session.ts +++ b/src/debug/session.ts @@ -99,6 +99,7 @@ export class Session { onRecv: async (serverPacket) => {}, onDone: async () => {}, }; + this.secondaryLinks.push(secondaryLink) return secondaryLink; } diff --git a/src/ui/waveform.ts b/src/ui/waveform.ts index 9c5f1a8..01f2247 100644 --- a/src/ui/waveform.ts +++ b/src/ui/waveform.ts @@ -15,17 +15,17 @@ export class ServerPacketString { export type ExtensionToWebviewMessage = - | { type: 'restore', state: any } - // TODO: Proper type here - | { type: 'cxxrtl_scmessage', message: ServerPacketString } - ; + | { type: 'restore', state: any } + // TODO: Proper type here + | { type: 'cxxrtl_scmessage', message: ServerPacketString } + ; export type WebviewToExtensionMessage = - | { type: 'ready' } - | { type: 'crash', error: any } - // TODO: Proper type here - | { type: 'cxxrtl_csmessage', message: ClientPacketString } - ; + | { type: 'ready' } + | { type: 'crash', error: any } + // TODO: Proper type here + | { type: 'cxxrtl_csmessage', message: ClientPacketString } + ; export class WaveformProvider { constructor( @@ -43,6 +43,7 @@ export class WaveformProvider { if (debuggerLink) { this.debuggerLink = debuggerLink; this.debuggerLink.onRecv = async (message) => { + console.log("Receving scmessage ", message.asString()); // console.log("Running on recv for ", message) await this.sendMessage({ type: "cxxrtl_scmessage", message: new ServerPacketString(message.asString()) }) }; From cd83374a17e2078f1bbb62f9b2dfbe13e896d7bc Mon Sep 17 00:00:00 2001 From: TheZoq2 Date: Fri, 20 Dec 2024 18:09:33 +0100 Subject: [PATCH 04/11] WIP: Start working on wcp --- src/surfer/embed.ts | 21 ++++++++++++++++++--- src/ui/waveform.ts | 4 ++++ vendor/surfer | 2 +- 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/src/surfer/embed.ts b/src/surfer/embed.ts index b54eec5..f272003 100644 --- a/src/surfer/embed.ts +++ b/src/surfer/embed.ts @@ -23,14 +23,15 @@ document.addEventListener('DOMContentLoaded', async () => { window.addEventListener('message', async (event: MessageEvent) => { const message = event.data; if (message.type === 'cxxrtl_scmessage') { - console.log("Handing off ", message.message.inner, " to Surfer") await libsurfer.on_cxxrtl_sc_message(message.message.inner); + } else if (message.type === 'wcp_cs_message') { + await libsurfer.send_wcp_sc_message(message.message); } else { console.error('[RTL Debugger] [surferEmbed] Unhandled extension to webview message', message); } }); - const handle_cs_messages = async () => { + const handle_cxxrtl_cs_messages = async () => { while (true) { const message = await libsurfer.cxxrtl_cs_message(); if (message) { @@ -41,13 +42,27 @@ document.addEventListener('DOMContentLoaded', async () => { } }; + const handle_wcp_sc_messages = async () => { + while (true) { + const message = await libsurfer.next_wcp_sc_message(); + if (message) { + console.log("[WCP] Receiving wcp sc message: {message}") + postMessage({type: 'wcp_sc_message', message: message}); + } else { + throw Error('Got an undefined message from Surfer. Its client probably disconnected'); + } + } + }; + try { await libsurferInit(); await new libsurfer.WebHandle().start(canvas); - handle_cs_messages(); + handle_cxxrtl_cs_messages(); + handle_wcp_sc_messages(); await libsurfer.start_cxxrtl(); + await libsurfer.start_wcp(); libsurferInjectMessage('ToggleMenu'); // turn off menu // libsurferInjectMessage('ToggleStatusBar'); // turn off status bar diff --git a/src/ui/waveform.ts b/src/ui/waveform.ts index 01f2247..584baea 100644 --- a/src/ui/waveform.ts +++ b/src/ui/waveform.ts @@ -18,6 +18,7 @@ export type ExtensionToWebviewMessage = | { type: 'restore', state: any } // TODO: Proper type here | { type: 'cxxrtl_scmessage', message: ServerPacketString } + | { type: 'wcp_cs_message', message: string } ; export type WebviewToExtensionMessage = @@ -25,6 +26,7 @@ export type WebviewToExtensionMessage = | { type: 'crash', error: any } // TODO: Proper type here | { type: 'cxxrtl_csmessage', message: ClientPacketString } + | { type: 'wcp_sc_message', message: string } ; export class WaveformProvider { @@ -76,6 +78,8 @@ export class WaveformProvider { console.log('[RTL Debugger] [WaveformProvider] Got CSMessage', message.message); const packet: Packet = Packet.fromString(message.message.inner); await this.debuggerLink.send(packet); + } else if (message.type == 'wcp_sc_message') { + console.log('[RTL Debugger] [WaveformProvider] Got WCP SC message', message.message); } else { console.error('[RTL Debugger] [WaveformProvider] Unhandled webview to extension message:', message); } diff --git a/vendor/surfer b/vendor/surfer index e0c704b..1a6b34c 160000 --- a/vendor/surfer +++ b/vendor/surfer @@ -1 +1 @@ -Subproject commit e0c704b53fbb501fe05e233e2673a9d5522d3daa +Subproject commit 1a6b34c44ea0e5089bd55d0bce1297aa1a02e6ef From bb37e0261328c243230c0acef7ea609cf94d8b21 Mon Sep 17 00:00:00 2001 From: TheZoq2 Date: Mon, 6 Jan 2025 14:37:31 +0100 Subject: [PATCH 05/11] Allow adding variables from the CXXRTL sidebar --- package.json | 11 +++++++++++ src/extension.ts | 11 ++++++++++- src/model/variable.ts | 4 ++++ src/surfer/embed.ts | 2 +- src/ui/waveform.ts | 11 +++++++++++ vendor/surfer | 2 +- 6 files changed, 38 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 7c2e11e..5289c3b 100644 --- a/package.json +++ b/package.json @@ -175,6 +175,12 @@ "command": "rtlDebugger.browseWaveforms", "category": "RTL Debugger", "title": "Browse Waveforms" + }, + { + "command": "rtlDebugger.addToWaveform", + "category": "RTL Debugger", + "title": "Add to Waveform", + "icon": "$(keybindings-add)" } ], "viewsContainers": { @@ -319,6 +325,11 @@ "command": "rtlDebugger.unWatchVariable", "when": "view == rtlDebugger.sidebar && viewItem =~ /inWatchList/", "group": "inline" + }, + { + "command": "rtlDebugger.addToWaveform", + "when": "view == rtlDebugger.sidebar", + "group": "inline" } ], "rtlDebugger.setRadix": [ diff --git a/src/extension.ts b/src/extension.ts index 87440b1..0f681bc 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -11,6 +11,9 @@ import { WaveformProvider } from './ui/waveform'; export function activate(context: vscode.ExtensionContext) { const rtlDebugger = new CXXRTLDebugger(); + // TODO This is presumably not the right way to do it, but I'll do it like this for + // now in order to test the WCP stuff + var waveformProvider: WaveformProvider; console.log('Attached'); @@ -77,6 +80,11 @@ export function activate(context: vscode.ExtensionContext) { } })); + context.subscriptions.push(vscode.commands.registerCommand('rtlDebugger.addToWaveform', (treeItem) => { + console.log("Adding to waveform", waveformProvider) + waveformProvider.addVariable(treeItem.designation.variable.cxxrtlIdentifier) + })); + context.subscriptions.push(vscode.commands.registerCommand('rtlDebugger.setRadix.2', (treeItem) => globalVariableOptions.update(treeItem.designation.variable.cxxrtlIdentifier, { radix: 2 }))); context.subscriptions.push(vscode.commands.registerCommand('rtlDebugger.setRadix.8', (treeItem) => @@ -104,7 +112,8 @@ export function activate(context: vscode.ExtensionContext) { retainContextWhenHidden: true, }); const bundleRoot = vscode.Uri.joinPath(context.extensionUri, 'out/'); - context.subscriptions.push(new WaveformProvider(rtlDebugger, webviewPanel, bundleRoot)); + waveformProvider = new WaveformProvider(rtlDebugger, webviewPanel, bundleRoot) + context.subscriptions.push(waveformProvider); })); // For an unknown reason, the `vscode.open` command (which does the exact same thing) ignores the options. diff --git a/src/model/variable.ts b/src/model/variable.ts index c873887..55a529c 100644 --- a/src/model/variable.ts +++ b/src/model/variable.ts @@ -44,6 +44,10 @@ export abstract class Variable { get cxxrtlIdentifier(): string { return this.fullName.join(' '); } + + get wcpIdentifier(): string { + return this.fullName.join("."); + } } export class ScalarVariable extends Variable { diff --git a/src/surfer/embed.ts b/src/surfer/embed.ts index f272003..00e10b0 100644 --- a/src/surfer/embed.ts +++ b/src/surfer/embed.ts @@ -25,7 +25,7 @@ document.addEventListener('DOMContentLoaded', async () => { if (message.type === 'cxxrtl_scmessage') { await libsurfer.on_cxxrtl_sc_message(message.message.inner); } else if (message.type === 'wcp_cs_message') { - await libsurfer.send_wcp_sc_message(message.message); + await libsurfer.handle_wcp_cs_message(message.message); } else { console.error('[RTL Debugger] [surferEmbed] Unhandled extension to webview message', message); } diff --git a/src/ui/waveform.ts b/src/ui/waveform.ts index 584baea..8f7c57f 100644 --- a/src/ui/waveform.ts +++ b/src/ui/waveform.ts @@ -5,6 +5,7 @@ import { CXXRTLDebugger } from '../debugger'; import embedHtml from '../surfer/embed.html'; import { ILink, Packet } from '../cxxrtl/link'; import { ClientPacket } from '../cxxrtl/proto'; +import { Variable } from '../model/variable'; export class ClientPacketString { constructor(public inner: string) { } @@ -85,5 +86,15 @@ export class WaveformProvider { } } + async addVariable(variable: Variable) { + // TODO: How should we handle the callbacks here? + const message = JSON.stringify({ + type: "command", + command: "add_variables", + names: [variable.wcpIdentifier] + }) + this.sendMessage({type: 'wcp_cs_message', message}) + } + private debuggerLink: ILink; } diff --git a/vendor/surfer b/vendor/surfer index 1a6b34c..b07cb52 160000 --- a/vendor/surfer +++ b/vendor/surfer @@ -1 +1 @@ -Subproject commit 1a6b34c44ea0e5089bd55d0bce1297aa1a02e6ef +Subproject commit b07cb5288e53bedfec707c2772fbd110bb0dd5d6 From 2583b28f434ddcae30d0d35124b16319422d6b59 Mon Sep 17 00:00:00 2001 From: TheZoq2 Date: Mon, 13 Jan 2025 10:04:24 +0100 Subject: [PATCH 06/11] Allow adding waveforms surfer via VSC ui --- package.json | 2 +- src/debugger.ts | 2 ++ src/extension.ts | 12 +++++------- src/surfer/embed.ts | 4 ++-- src/ui/sidebar.ts | 4 ++-- vendor/surfer | 2 +- 6 files changed, 13 insertions(+), 13 deletions(-) diff --git a/package.json b/package.json index 5289c3b..591dafc 100644 --- a/package.json +++ b/package.json @@ -328,7 +328,7 @@ }, { "command": "rtlDebugger.addToWaveform", - "when": "view == rtlDebugger.sidebar", + "when": "view == rtlDebugger.sidebar && viewItem =~ /variable/", "group": "inline" } ], diff --git a/src/debugger.ts b/src/debugger.ts index 216c80d..ffc1e18 100644 --- a/src/debugger.ts +++ b/src/debugger.ts @@ -4,6 +4,7 @@ import * as vscode from 'vscode'; import { NodeStreamLink } from './cxxrtl/link'; import { StatusBarItem } from './ui/status'; import { Session } from './debug/session'; +import { WaveformProvider } from './ui/waveform'; export enum CXXRTLSimulationStatus { Paused = 'paused', @@ -21,6 +22,7 @@ export class CXXRTLDebugger { private statusBarItem: StatusBarItem; private terminal: vscode.Terminal | null = null; session: Session | null = null; + waveformProvider: WaveformProvider | null = null; // Session properties. diff --git a/src/extension.ts b/src/extension.ts index 0f681bc..cc01fb9 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -11,9 +11,6 @@ import { WaveformProvider } from './ui/waveform'; export function activate(context: vscode.ExtensionContext) { const rtlDebugger = new CXXRTLDebugger(); - // TODO This is presumably not the right way to do it, but I'll do it like this for - // now in order to test the WCP stuff - var waveformProvider: WaveformProvider; console.log('Attached'); @@ -81,8 +78,9 @@ export function activate(context: vscode.ExtensionContext) { })); context.subscriptions.push(vscode.commands.registerCommand('rtlDebugger.addToWaveform', (treeItem) => { - console.log("Adding to waveform", waveformProvider) - waveformProvider.addVariable(treeItem.designation.variable.cxxrtlIdentifier) + if (rtlDebugger.waveformProvider) { + rtlDebugger.waveformProvider.addVariable(treeItem.designation.variable) + } })); context.subscriptions.push(vscode.commands.registerCommand('rtlDebugger.setRadix.2', (treeItem) => @@ -112,8 +110,8 @@ export function activate(context: vscode.ExtensionContext) { retainContextWhenHidden: true, }); const bundleRoot = vscode.Uri.joinPath(context.extensionUri, 'out/'); - waveformProvider = new WaveformProvider(rtlDebugger, webviewPanel, bundleRoot) - context.subscriptions.push(waveformProvider); + rtlDebugger.waveformProvider = new WaveformProvider(rtlDebugger, webviewPanel, bundleRoot) + context.subscriptions.push(rtlDebugger.waveformProvider); })); // For an unknown reason, the `vscode.open` command (which does the exact same thing) ignores the options. diff --git a/src/surfer/embed.ts b/src/surfer/embed.ts index 00e10b0..fbe297b 100644 --- a/src/surfer/embed.ts +++ b/src/surfer/embed.ts @@ -65,8 +65,8 @@ document.addEventListener('DOMContentLoaded', async () => { await libsurfer.start_wcp(); libsurferInjectMessage('ToggleMenu'); // turn off menu - // libsurferInjectMessage('ToggleStatusBar'); // turn off status bar - // libsurferInjectMessage('ToggleSidePanel'); + libsurferInjectMessage('ToggleStatusbar'); // turn off status bar + libsurferInjectMessage('ToggleSidePanel'); libsurferInjectMessage({ SelectTheme: 'dark+' }); // pick VS Code like theme overlay.style.display = 'none'; diff --git a/src/ui/sidebar.ts b/src/ui/sidebar.ts index 6d8b73e..1c206d9 100644 --- a/src/ui/sidebar.ts +++ b/src/ui/sidebar.ts @@ -203,10 +203,10 @@ class ScopeTreeItem extends TreeItem { for (const variable of variables) { if (variable instanceof ScalarVariable) { children.push(new ScalarTreeItem(this.provider, variable.designation(), - variable.width > 1 ? 'canWatch|canSetRadix' : 'canWatch')); + variable.width > 1 ? 'canWatch|canSetRadix|variable' : 'canWatch|variable')); } if (variable instanceof MemoryVariable) { - children.push(new ArrayTreeItem(this.provider, variable.designation(), 'canWatch|canSetRadix')); + children.push(new ArrayTreeItem(this.provider, variable.designation(), 'canWatch|canSetRadix|variable')); } } return children; diff --git a/vendor/surfer b/vendor/surfer index b07cb52..ddb282a 160000 --- a/vendor/surfer +++ b/vendor/surfer @@ -1 +1 @@ -Subproject commit b07cb5288e53bedfec707c2772fbd110bb0dd5d6 +Subproject commit ddb282a23a646acfbf430b81a08fe80edf8fb965 From 0e489f99f8854878bb03489e8b7acfdd36bac1b0 Mon Sep 17 00:00:00 2001 From: TheZoq2 Date: Thu, 23 Jan 2025 12:51:15 +0100 Subject: [PATCH 07/11] Remove debug prints --- example/.vscode/settings.json | 3 --- src/extension.ts | 4 ---- 2 files changed, 7 deletions(-) diff --git a/example/.vscode/settings.json b/example/.vscode/settings.json index 42c343d..140d170 100644 --- a/example/.vscode/settings.json +++ b/example/.vscode/settings.json @@ -3,9 +3,6 @@ "${workspaceFolder}/design_sim" ], "rtlDebugger.watchList": [ - { - "id": "top data" - }, { "id": "top data" } diff --git a/src/extension.ts b/src/extension.ts index cc01fb9..35d5767 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -12,8 +12,6 @@ import { WaveformProvider } from './ui/waveform'; export function activate(context: vscode.ExtensionContext) { const rtlDebugger = new CXXRTLDebugger(); - console.log('Attached'); - const sidebarTreeDataProvider = new sidebar.TreeDataProvider(rtlDebugger); const sidebarTreeView = vscode.window.createTreeView('rtlDebugger.sidebar', { treeDataProvider: sidebarTreeDataProvider @@ -98,9 +96,7 @@ export function activate(context: vscode.ExtensionContext) { globalWatchList.remove(treeItem.metadata.index))); - console.log('Registering rtlDebugger.browseWaveforms'); context.subscriptions.push(vscode.commands.registerCommand('rtlDebugger.browseWaveforms', () => { - console.log('Running browseWaveforms'); const webviewPanel = vscode.window.createWebviewPanel( 'rtlDebugger.waveforms', 'Waveforms', { From c6653a14a17b64e7a10d2b7ce75cba7d5e2acbb5 Mon Sep 17 00:00:00 2001 From: TheZoq2 Date: Thu, 23 Jan 2025 13:07:09 +0100 Subject: [PATCH 08/11] Fix eslint lints --- src/debug/session.ts | 2 +- src/extension.ts | 4 ++-- src/model/variable.ts | 2 +- src/surfer/embed.ts | 1 - src/ui/waveform.ts | 15 +++++++-------- 5 files changed, 11 insertions(+), 13 deletions(-) diff --git a/src/debug/session.ts b/src/debug/session.ts index 3f955a3..a8a413b 100644 --- a/src/debug/session.ts +++ b/src/debug/session.ts @@ -99,7 +99,7 @@ export class Session { onRecv: async (serverPacket) => {}, onDone: async () => {}, }; - this.secondaryLinks.push(secondaryLink) + this.secondaryLinks.push(secondaryLink); return secondaryLink; } diff --git a/src/extension.ts b/src/extension.ts index 35d5767..76536a4 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -77,7 +77,7 @@ export function activate(context: vscode.ExtensionContext) { context.subscriptions.push(vscode.commands.registerCommand('rtlDebugger.addToWaveform', (treeItem) => { if (rtlDebugger.waveformProvider) { - rtlDebugger.waveformProvider.addVariable(treeItem.designation.variable) + rtlDebugger.waveformProvider.addVariable(treeItem.designation.variable); } })); @@ -106,7 +106,7 @@ export function activate(context: vscode.ExtensionContext) { retainContextWhenHidden: true, }); const bundleRoot = vscode.Uri.joinPath(context.extensionUri, 'out/'); - rtlDebugger.waveformProvider = new WaveformProvider(rtlDebugger, webviewPanel, bundleRoot) + rtlDebugger.waveformProvider = new WaveformProvider(rtlDebugger, webviewPanel, bundleRoot); context.subscriptions.push(rtlDebugger.waveformProvider); })); diff --git a/src/model/variable.ts b/src/model/variable.ts index 55a529c..15e9262 100644 --- a/src/model/variable.ts +++ b/src/model/variable.ts @@ -46,7 +46,7 @@ export abstract class Variable { } get wcpIdentifier(): string { - return this.fullName.join("."); + return this.fullName.join('.'); } } diff --git a/src/surfer/embed.ts b/src/surfer/embed.ts index fbe297b..9f137a0 100644 --- a/src/surfer/embed.ts +++ b/src/surfer/embed.ts @@ -46,7 +46,6 @@ document.addEventListener('DOMContentLoaded', async () => { while (true) { const message = await libsurfer.next_wcp_sc_message(); if (message) { - console.log("[WCP] Receiving wcp sc message: {message}") postMessage({type: 'wcp_sc_message', message: message}); } else { throw Error('Got an undefined message from Surfer. Its client probably disconnected'); diff --git a/src/ui/waveform.ts b/src/ui/waveform.ts index 8f7c57f..eab034c 100644 --- a/src/ui/waveform.ts +++ b/src/ui/waveform.ts @@ -46,9 +46,8 @@ export class WaveformProvider { if (debuggerLink) { this.debuggerLink = debuggerLink; this.debuggerLink.onRecv = async (message) => { - console.log("Receving scmessage ", message.asString()); // console.log("Running on recv for ", message) - await this.sendMessage({ type: "cxxrtl_scmessage", message: new ServerPacketString(message.asString()) }) + await this.sendMessage({ type: 'cxxrtl_scmessage', message: new ServerPacketString(message.asString()) }); }; } else { throw new Error('Failed to create secondary debugger link'); @@ -75,11 +74,11 @@ export class WaveformProvider { console.log('[RTL Debugger] [WaveformProvider] Ready'); } else if (message.type === 'crash') { console.log('[RTL Debugger] [WaveformProvider] Crash:', message.error); - } else if (message.type == 'cxxrtl_csmessage') { + } else if (message.type === 'cxxrtl_csmessage') { console.log('[RTL Debugger] [WaveformProvider] Got CSMessage', message.message); const packet: Packet = Packet.fromString(message.message.inner); await this.debuggerLink.send(packet); - } else if (message.type == 'wcp_sc_message') { + } else if (message.type === 'wcp_sc_message') { console.log('[RTL Debugger] [WaveformProvider] Got WCP SC message', message.message); } else { console.error('[RTL Debugger] [WaveformProvider] Unhandled webview to extension message:', message); @@ -89,11 +88,11 @@ export class WaveformProvider { async addVariable(variable: Variable) { // TODO: How should we handle the callbacks here? const message = JSON.stringify({ - type: "command", - command: "add_variables", + type: 'command', + command: 'add_variables', names: [variable.wcpIdentifier] - }) - this.sendMessage({type: 'wcp_cs_message', message}) + }); + this.sendMessage({type: 'wcp_cs_message', message}); } private debuggerLink: ILink; From 24244cd8e4a3a716d31af2a0b3014da48f3432ce Mon Sep 17 00:00:00 2001 From: TheZoq2 Date: Thu, 23 Jan 2025 13:27:41 +0100 Subject: [PATCH 09/11] Undo some formatting changes --- src/extension.ts | 1 - src/ui/waveform.ts | 22 +++++++++++----------- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index 76536a4..4f383a3 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -95,7 +95,6 @@ export function activate(context: vscode.ExtensionContext) { context.subscriptions.push(vscode.commands.registerCommand('rtlDebugger.unWatchVariable', (treeItem) => globalWatchList.remove(treeItem.metadata.index))); - context.subscriptions.push(vscode.commands.registerCommand('rtlDebugger.browseWaveforms', () => { const webviewPanel = vscode.window.createWebviewPanel( 'rtlDebugger.waveforms', diff --git a/src/ui/waveform.ts b/src/ui/waveform.ts index eab034c..600451d 100644 --- a/src/ui/waveform.ts +++ b/src/ui/waveform.ts @@ -16,19 +16,19 @@ export class ServerPacketString { export type ExtensionToWebviewMessage = - | { type: 'restore', state: any } - // TODO: Proper type here - | { type: 'cxxrtl_scmessage', message: ServerPacketString } - | { type: 'wcp_cs_message', message: string } - ; +| { type: 'restore', state: any } +// TODO: Proper type here +| { type: 'cxxrtl_scmessage', message: ServerPacketString } +| { type: 'wcp_cs_message', message: string } +; export type WebviewToExtensionMessage = - | { type: 'ready' } - | { type: 'crash', error: any } - // TODO: Proper type here - | { type: 'cxxrtl_csmessage', message: ClientPacketString } - | { type: 'wcp_sc_message', message: string } - ; +| { type: 'ready' } +| { type: 'crash', error: any } +// TODO: Proper type here +| { type: 'cxxrtl_csmessage', message: ClientPacketString } +| { type: 'wcp_sc_message', message: string } +; export class WaveformProvider { constructor( From 479e1d193381d76c3dc91b4c385c50a63eea128e Mon Sep 17 00:00:00 2001 From: TheZoq2 Date: Fri, 24 Jan 2025 15:19:16 +0100 Subject: [PATCH 10/11] Use ' ' as separator --- src/model/variable.ts | 2 +- vendor/surfer | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/model/variable.ts b/src/model/variable.ts index 15e9262..0baf3d1 100644 --- a/src/model/variable.ts +++ b/src/model/variable.ts @@ -46,7 +46,7 @@ export abstract class Variable { } get wcpIdentifier(): string { - return this.fullName.join('.'); + return this.fullName.join(' '); } } diff --git a/vendor/surfer b/vendor/surfer index ddb282a..895b20c 160000 --- a/vendor/surfer +++ b/vendor/surfer @@ -1 +1 @@ -Subproject commit ddb282a23a646acfbf430b81a08fe80edf8fb965 +Subproject commit 895b20c051beb920ca94f7ee2a586cf24a839fec From 056a0355935428c977c5e62c58fb71137322761d Mon Sep 17 00:00:00 2001 From: TheZoq2 Date: Mon, 3 Feb 2025 14:24:18 +0100 Subject: [PATCH 11/11] Allow multiple waveform providers --- src/debugger.ts | 4 +++- src/extension.ts | 49 +++++++++++++++++++++++++++++++++++++-------- src/surfer/embed.ts | 4 ++-- src/ui/waveform.ts | 8 ++++---- vendor/surfer | 2 +- 5 files changed, 51 insertions(+), 16 deletions(-) diff --git a/src/debugger.ts b/src/debugger.ts index ffc1e18..6963c66 100644 --- a/src/debugger.ts +++ b/src/debugger.ts @@ -22,7 +22,9 @@ export class CXXRTLDebugger { private statusBarItem: StatusBarItem; private terminal: vscode.Terminal | null = null; session: Session | null = null; - waveformProvider: WaveformProvider | null = null; + nextWaveformviewId: number = 0; + waveformProviders: Map = new Map(); + lastActiveWaveformTab: string | null = null; // Session properties. diff --git a/src/extension.ts b/src/extension.ts index 4f383a3..55c5291 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -76,8 +76,12 @@ export function activate(context: vscode.ExtensionContext) { })); context.subscriptions.push(vscode.commands.registerCommand('rtlDebugger.addToWaveform', (treeItem) => { - if (rtlDebugger.waveformProvider) { - rtlDebugger.waveformProvider.addVariable(treeItem.designation.variable); + if (rtlDebugger.lastActiveWaveformTab) { + console.log(rtlDebugger.lastActiveWaveformTab); + const target = rtlDebugger.waveformProviders.get(rtlDebugger.lastActiveWaveformTab); + if (target) { + target.addVariable(treeItem.designation.variable); + } } })); @@ -96,19 +100,48 @@ export function activate(context: vscode.ExtensionContext) { globalWatchList.remove(treeItem.metadata.index))); context.subscriptions.push(vscode.commands.registerCommand('rtlDebugger.browseWaveforms', () => { + const viewKey = `rtlDebugger.waveforms.${rtlDebugger.nextWaveformviewId++}`; const webviewPanel = vscode.window.createWebviewPanel( - 'rtlDebugger.waveforms', - 'Waveforms', { + viewKey, + 'Waveforms', + { viewColumn: vscode.ViewColumn.Beside, - }, { + }, + { enableScripts: true, retainContextWhenHidden: true, - }); + } + ); + console.log(`Creating web view panel with viewType ${webviewPanel.viewType}`); const bundleRoot = vscode.Uri.joinPath(context.extensionUri, 'out/'); - rtlDebugger.waveformProvider = new WaveformProvider(rtlDebugger, webviewPanel, bundleRoot); - context.subscriptions.push(rtlDebugger.waveformProvider); + const waveformProvider = new WaveformProvider(rtlDebugger, webviewPanel, bundleRoot); + rtlDebugger.waveformProviders.set(viewKey, waveformProvider); + rtlDebugger.lastActiveWaveformTab = viewKey; + context.subscriptions.push(waveformProvider); })); + vscode.window.tabGroups.onDidChangeTabs(event => { + const activeWaveformTab = event.changed.map((tab, _) => { + if (tab.input instanceof vscode.TabInputWebview) { + console.log(`${tab.input.viewType}`); + + const key = tab.input.viewType.match(/.*(rtlDebugger.waveforms\.\d+)/); + + if (key) { + return key[1]; + } else { + return null; + } + } else { + return null; + } + }).find((id) => id !== null); + + if (activeWaveformTab) { + rtlDebugger.lastActiveWaveformTab = activeWaveformTab; + } + }); + // For an unknown reason, the `vscode.open` command (which does the exact same thing) ignores the options. context.subscriptions.push(vscode.commands.registerCommand('rtlDebugger.openDocument', (uri: vscode.Uri, options: vscode.TextDocumentShowOptions) => { diff --git a/src/surfer/embed.ts b/src/surfer/embed.ts index 9f137a0..8ea4546 100644 --- a/src/surfer/embed.ts +++ b/src/surfer/embed.ts @@ -22,7 +22,7 @@ document.addEventListener('DOMContentLoaded', async () => { const postMessage = <(message: WebviewToExtensionMessage) => void>vscode.postMessage; window.addEventListener('message', async (event: MessageEvent) => { const message = event.data; - if (message.type === 'cxxrtl_scmessage') { + if (message.type === 'cxxrtl_sc_message') { await libsurfer.on_cxxrtl_sc_message(message.message.inner); } else if (message.type === 'wcp_cs_message') { await libsurfer.handle_wcp_cs_message(message.message); @@ -35,7 +35,7 @@ document.addEventListener('DOMContentLoaded', async () => { while (true) { const message = await libsurfer.cxxrtl_cs_message(); if (message) { - postMessage({type: 'cxxrtl_csmessage', message: new ClientPacketString(message)}); + postMessage({type: 'cxxrtl_cs_message', message: new ClientPacketString(message)}); } else { throw Error('Got an undefined message from Surfer. Its client probably disconnected'); } diff --git a/src/ui/waveform.ts b/src/ui/waveform.ts index 600451d..03e0ac9 100644 --- a/src/ui/waveform.ts +++ b/src/ui/waveform.ts @@ -18,7 +18,7 @@ export class ServerPacketString { export type ExtensionToWebviewMessage = | { type: 'restore', state: any } // TODO: Proper type here -| { type: 'cxxrtl_scmessage', message: ServerPacketString } +| { type: 'cxxrtl_sc_message', message: ServerPacketString } | { type: 'wcp_cs_message', message: string } ; @@ -26,7 +26,7 @@ export type WebviewToExtensionMessage = | { type: 'ready' } | { type: 'crash', error: any } // TODO: Proper type here -| { type: 'cxxrtl_csmessage', message: ClientPacketString } +| { type: 'cxxrtl_cs_message', message: ClientPacketString } | { type: 'wcp_sc_message', message: string } ; @@ -47,7 +47,7 @@ export class WaveformProvider { this.debuggerLink = debuggerLink; this.debuggerLink.onRecv = async (message) => { // console.log("Running on recv for ", message) - await this.sendMessage({ type: 'cxxrtl_scmessage', message: new ServerPacketString(message.asString()) }); + await this.sendMessage({ type: 'cxxrtl_sc_message', message: new ServerPacketString(message.asString()) }); }; } else { throw new Error('Failed to create secondary debugger link'); @@ -74,7 +74,7 @@ export class WaveformProvider { console.log('[RTL Debugger] [WaveformProvider] Ready'); } else if (message.type === 'crash') { console.log('[RTL Debugger] [WaveformProvider] Crash:', message.error); - } else if (message.type === 'cxxrtl_csmessage') { + } else if (message.type === 'cxxrtl_cs_message') { console.log('[RTL Debugger] [WaveformProvider] Got CSMessage', message.message); const packet: Packet = Packet.fromString(message.message.inner); await this.debuggerLink.send(packet); diff --git a/vendor/surfer b/vendor/surfer index 895b20c..3dd32c7 160000 --- a/vendor/surfer +++ b/vendor/surfer @@ -1 +1 @@ -Subproject commit 895b20c051beb920ca94f7ee2a586cf24a839fec +Subproject commit 3dd32c79133009642042a2c06bb3a96f24e43644