@kvell007/embed-labs-local-bridge 0.1.0-alpha.1 → 0.1.0-alpha.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/debug.js +3 -3
- package/dist/adapters/debug.js.map +1 -1
- package/dist/adapters/logo.d.ts +2 -0
- package/dist/adapters/logo.js +108 -0
- package/dist/adapters/logo.js.map +1 -0
- package/dist/adapters/rp2350-monitor.d.ts +121 -0
- package/dist/adapters/rp2350-monitor.js +404 -0
- package/dist/adapters/rp2350-monitor.js.map +1 -0
- package/dist/adapters/taishanpi-live.d.ts +163 -0
- package/dist/adapters/taishanpi-live.js +349 -0
- package/dist/adapters/taishanpi-live.js.map +1 -0
- package/dist/hardware.d.ts +2 -0
- package/dist/hardware.js +111 -4
- package/dist/hardware.js.map +1 -1
- package/dist/process.js +59 -8
- package/dist/process.js.map +1 -1
- package/dist/tools.js +1027 -1
- package/dist/tools.js.map +1 -1
- package/package.json +2 -2
package/dist/adapters/debug.js
CHANGED
|
@@ -54,8 +54,8 @@ async function scanDebugTool(spec, observedAt) {
|
|
|
54
54
|
available: resolvedPath !== undefined,
|
|
55
55
|
resolved_path: resolvedPath,
|
|
56
56
|
summary: resolvedPath
|
|
57
|
-
? `Found ${spec.command} on PATH.`
|
|
58
|
-
: `${spec.command} was not found on PATH.`
|
|
57
|
+
? `Found ${spec.command} on PATH or an Embed Labs local toolchain path.`
|
|
58
|
+
: `${spec.command} was not found on PATH or an Embed Labs local toolchain path.`
|
|
59
59
|
});
|
|
60
60
|
if (!resolvedPath) {
|
|
61
61
|
return {
|
|
@@ -64,7 +64,7 @@ async function scanDebugTool(spec, observedAt) {
|
|
|
64
64
|
command: spec.command,
|
|
65
65
|
available: false,
|
|
66
66
|
evidence,
|
|
67
|
-
summary_for_user: `${spec.display_name} is not available on PATH.`
|
|
67
|
+
summary_for_user: `${spec.display_name} is not available on PATH or an Embed Labs local toolchain path.`
|
|
68
68
|
};
|
|
69
69
|
}
|
|
70
70
|
const versionResult = await runCommand(resolvedPath, spec.version_args, VERSION_TIMEOUT_MS);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"debug.js","sourceRoot":"","sources":["../../src/adapters/debug.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAStE,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAChC,MAAM,WAAW,GAAoB;IACnC;QACE,OAAO,EAAE,SAAS;QAClB,YAAY,EAAE,SAAS;QACvB,OAAO,EAAE,SAAS;QAClB,YAAY,EAAE,CAAC,WAAW,CAAC;KAC5B;IACD;QACE,OAAO,EAAE,UAAU;QACnB,YAAY,EAAE,UAAU;QACxB,OAAO,EAAE,UAAU;QACnB,YAAY,EAAE,CAAC,WAAW,CAAC;KAC5B;IACD;QACE,OAAO,EAAE,OAAO;QAChB,YAAY,EAAE,OAAO;QACrB,OAAO,EAAE,OAAO;QAChB,YAAY,EAAE,CAAC,WAAW,CAAC;KAC5B;IACD;QACE,OAAO,EAAE,iBAAiB;QAC1B,YAAY,EAAE,yBAAyB;QACvC,OAAO,EAAE,UAAU;QACnB,YAAY,EAAE,CAAC,IAAI,CAAC;KACrB;IACD;QACE,OAAO,EAAE,kBAAkB;QAC3B,YAAY,EAAE,0BAA0B;QACxC,OAAO,EAAE,qBAAqB;QAC9B,YAAY,EAAE,CAAC,IAAI,CAAC;KACrB;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,MAAM,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC5C,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IAC5F,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC;IACrE,OAAO;QACL,KAAK;QACL,WAAW,EAAE,UAAU;QACvB,gBAAgB,EAAE,6BAA6B,cAAc,IAAI,KAAK,CAAC,MAAM,uEAAuE;KACrJ,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,IAAmB,EAAE,UAAkB;IAClE,MAAM,QAAQ,GAAwB,EAAE,CAAC;IACzC,MAAM,YAAY,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAExD,QAAQ,CAAC,IAAI,CAAC;QACZ,WAAW,EAAE,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC;QACzD,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,WAAW,EAAE,UAAU;QACvB,SAAS,EAAE,YAAY,KAAK,SAAS;QACrC,aAAa,EAAE,YAAY;QAC3B,OAAO,EAAE,YAAY;YACnB,CAAC,CAAC,SAAS,IAAI,CAAC,OAAO,
|
|
1
|
+
{"version":3,"file":"debug.js","sourceRoot":"","sources":["../../src/adapters/debug.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { createHash, randomUUID } from "node:crypto";
|
|
2
|
+
import { createReadStream } from "node:fs";
|
|
3
|
+
import { copyFile, mkdir, mkdtemp, stat, writeFile } from "node:fs/promises";
|
|
4
|
+
import { tmpdir } from "node:os";
|
|
5
|
+
import { basename, extname, join, parse, resolve } from "node:path";
|
|
6
|
+
export async function prepareBootLogoModification(request) {
|
|
7
|
+
const observedAt = new Date().toISOString();
|
|
8
|
+
const logoPath = resolve(request.logo_path);
|
|
9
|
+
const logoStat = await requireRegularFile(logoPath, "logo_path");
|
|
10
|
+
const kernelLogoPath = request.kernel_logo_path ? resolve(request.kernel_logo_path) : undefined;
|
|
11
|
+
const kernelLogoStat = kernelLogoPath ? await requireRegularFile(kernelLogoPath, "kernel_logo_path") : undefined;
|
|
12
|
+
const inputImagePath = request.image_path ? resolve(request.image_path) : undefined;
|
|
13
|
+
const inputImageStat = inputImagePath ? await requireRegularFile(inputImagePath, "image_path") : undefined;
|
|
14
|
+
const outputDir = request.output_dir
|
|
15
|
+
? resolve(request.output_dir)
|
|
16
|
+
: await mkdtemp(join(tmpdir(), "embed-boot-logo-"));
|
|
17
|
+
await mkdir(outputDir, { recursive: true });
|
|
18
|
+
const unique = `${Date.now()}-${randomUUID().slice(0, 8)}`;
|
|
19
|
+
const sourceName = inputImagePath ? basename(inputImagePath) : "boot-logo-manifest.json";
|
|
20
|
+
const requestedStem = request.output_name ? parse(request.output_name).name : parse(sourceName).name;
|
|
21
|
+
const safeStem = safeFileStem(requestedStem || "boot-logo");
|
|
22
|
+
const imageExtension = inputImagePath ? extname(inputImagePath) || ".img" : undefined;
|
|
23
|
+
const modifiedImagePath = inputImagePath ? join(outputDir, `${safeStem}-${unique}${imageExtension}`) : undefined;
|
|
24
|
+
const manifestPath = join(outputDir, `${safeStem}-${unique}.boot-logo.json`);
|
|
25
|
+
const logoSha256 = await sha256(logoPath);
|
|
26
|
+
const kernelLogoSha256 = kernelLogoPath ? await sha256(kernelLogoPath) : undefined;
|
|
27
|
+
const inputImageSha256 = inputImagePath ? await sha256(inputImagePath) : undefined;
|
|
28
|
+
if (inputImagePath && modifiedImagePath) {
|
|
29
|
+
await copyFile(inputImagePath, modifiedImagePath);
|
|
30
|
+
}
|
|
31
|
+
const manifest = {
|
|
32
|
+
schema_version: "0.1",
|
|
33
|
+
kind: "boot-logo-modification",
|
|
34
|
+
mode: "local_manifest_mvp",
|
|
35
|
+
replacement_applied: false,
|
|
36
|
+
board_id: request.board_id,
|
|
37
|
+
variant_id: request.variant_id,
|
|
38
|
+
input_image_path: inputImagePath,
|
|
39
|
+
modified_image_path: modifiedImagePath,
|
|
40
|
+
logo_path: logoPath,
|
|
41
|
+
kernel_logo_path: kernelLogoPath,
|
|
42
|
+
rotate: request.rotate,
|
|
43
|
+
scale: request.scale,
|
|
44
|
+
input_image_sha256: inputImageSha256,
|
|
45
|
+
input_image_size_bytes: inputImageStat?.size,
|
|
46
|
+
logo_sha256: logoSha256,
|
|
47
|
+
logo_size_bytes: logoStat.size,
|
|
48
|
+
kernel_logo_sha256: kernelLogoSha256,
|
|
49
|
+
kernel_logo_size_bytes: kernelLogoStat?.size,
|
|
50
|
+
free_for_registered_users: true,
|
|
51
|
+
requires_server_workspace: false,
|
|
52
|
+
observed_at: observedAt,
|
|
53
|
+
notes: [
|
|
54
|
+
"This local free operation validates inputs and creates an isolated artifact bundle for boot-logo replacement.",
|
|
55
|
+
"It does not allocate a server workspace and does not flash a board.",
|
|
56
|
+
"Board-profile repack/flash workers must consume this manifest before writing a boot partition."
|
|
57
|
+
]
|
|
58
|
+
};
|
|
59
|
+
await writeFile(manifestPath, `${JSON.stringify(manifest, null, 2)}\n`, "utf8");
|
|
60
|
+
return {
|
|
61
|
+
board_id: request.board_id,
|
|
62
|
+
variant_id: request.variant_id,
|
|
63
|
+
modified_image_path: modifiedImagePath,
|
|
64
|
+
manifest_path: manifestPath,
|
|
65
|
+
input_image_path: inputImagePath,
|
|
66
|
+
logo_path: logoPath,
|
|
67
|
+
kernel_logo_path: kernelLogoPath,
|
|
68
|
+
output_dir: outputDir,
|
|
69
|
+
input_image_sha256: inputImageSha256,
|
|
70
|
+
logo_sha256: logoSha256,
|
|
71
|
+
kernel_logo_sha256: kernelLogoSha256,
|
|
72
|
+
bytes: inputImageStat?.size,
|
|
73
|
+
destructive: false,
|
|
74
|
+
approval_required: false,
|
|
75
|
+
requires_server_workspace: false,
|
|
76
|
+
free_for_registered_users: true,
|
|
77
|
+
observed_at: observedAt,
|
|
78
|
+
summary_for_user: inputImagePath
|
|
79
|
+
? `Prepared an isolated boot-logo replacement bundle for ${request.board_id}; copied the input image and wrote a manifest without allocating server resources.`
|
|
80
|
+
: `Prepared a boot-logo replacement manifest for ${request.board_id} without allocating server resources.`
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
async function requireRegularFile(path, fieldName) {
|
|
84
|
+
let fileStat;
|
|
85
|
+
try {
|
|
86
|
+
fileStat = await stat(path);
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
throw new Error(`${fieldName} does not exist: ${path}`);
|
|
90
|
+
}
|
|
91
|
+
if (!fileStat.isFile()) {
|
|
92
|
+
throw new Error(`${fieldName} must point to a regular file: ${path}`);
|
|
93
|
+
}
|
|
94
|
+
return { size: fileStat.size };
|
|
95
|
+
}
|
|
96
|
+
function safeFileStem(value) {
|
|
97
|
+
const cleaned = value.trim().replace(/[^A-Za-z0-9._-]+/g, "-").replace(/^-+|-+$/g, "");
|
|
98
|
+
return cleaned.slice(0, 80) || "boot-logo";
|
|
99
|
+
}
|
|
100
|
+
async function sha256(path) {
|
|
101
|
+
const hash = createHash("sha256");
|
|
102
|
+
const stream = createReadStream(path);
|
|
103
|
+
for await (const chunk of stream) {
|
|
104
|
+
hash.update(chunk);
|
|
105
|
+
}
|
|
106
|
+
return hash.digest("hex");
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=logo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logo.js","sourceRoot":"","sources":["../../src/adapters/logo.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import type { DeviceSummary, ErrorEnvelope, SerialPortInfo } from "@embed-labs/protocol";
|
|
2
|
+
export declare const RP2350_MONITOR_READ_ONLY_COMMANDS: Set<string>;
|
|
3
|
+
export declare const RP2350_MONITOR_CONTROL_COMMANDS: Set<string>;
|
|
4
|
+
export declare const RP2350_MONITOR_ALLOWED_COMMANDS: Set<string>;
|
|
5
|
+
export interface Rp2350MonitorBaseRequest {
|
|
6
|
+
transport?: "auto" | "serial" | "tcp";
|
|
7
|
+
serial_path?: string;
|
|
8
|
+
host?: string;
|
|
9
|
+
port?: number;
|
|
10
|
+
baud?: number;
|
|
11
|
+
timeout_ms?: number;
|
|
12
|
+
monitor_root?: string;
|
|
13
|
+
}
|
|
14
|
+
export interface Rp2350MonitorStatusRequest extends Rp2350MonitorBaseRequest {
|
|
15
|
+
include_caps?: boolean;
|
|
16
|
+
}
|
|
17
|
+
export interface Rp2350MonitorCommandRequest extends Rp2350MonitorBaseRequest {
|
|
18
|
+
command: string;
|
|
19
|
+
args?: string[];
|
|
20
|
+
}
|
|
21
|
+
export interface Rp2350MonitorLogicCaptureRequest extends Rp2350MonitorBaseRequest {
|
|
22
|
+
pin_base: number;
|
|
23
|
+
pin_count: number;
|
|
24
|
+
sample_rate?: number;
|
|
25
|
+
samples?: number;
|
|
26
|
+
output_path?: string;
|
|
27
|
+
pull?: "none" | "up" | "down";
|
|
28
|
+
release?: boolean;
|
|
29
|
+
wait_timeout_ms?: number;
|
|
30
|
+
read_timeout_ms?: number;
|
|
31
|
+
pre_samples?: number;
|
|
32
|
+
post_samples?: number;
|
|
33
|
+
search_samples?: number;
|
|
34
|
+
burst_count?: number;
|
|
35
|
+
trigger_pin?: number;
|
|
36
|
+
trigger_mode?: "level" | "rising" | "falling" | "pattern";
|
|
37
|
+
trigger_level?: boolean;
|
|
38
|
+
trigger_mask?: number;
|
|
39
|
+
trigger_value?: number;
|
|
40
|
+
channel_names?: Record<string, string>;
|
|
41
|
+
pin_pulls?: Record<string, "none" | "up" | "down">;
|
|
42
|
+
}
|
|
43
|
+
export interface Rp2350MonitorLogicDecodeRequest {
|
|
44
|
+
input_path: string;
|
|
45
|
+
decoder?: "summary" | "bursts" | "edges" | "uart" | "spi" | "i2c";
|
|
46
|
+
output_path?: string;
|
|
47
|
+
capture_id?: number;
|
|
48
|
+
start_sample?: number;
|
|
49
|
+
end_sample?: number;
|
|
50
|
+
pins?: number[];
|
|
51
|
+
rx_pin?: number;
|
|
52
|
+
baud?: number;
|
|
53
|
+
data_bits?: number;
|
|
54
|
+
parity?: "none" | "even" | "odd";
|
|
55
|
+
stop_bits?: number;
|
|
56
|
+
invert?: boolean;
|
|
57
|
+
sck_pin?: number;
|
|
58
|
+
mosi_pin?: number;
|
|
59
|
+
miso_pin?: number;
|
|
60
|
+
cs_pin?: number;
|
|
61
|
+
mode?: 0 | 1 | 2 | 3;
|
|
62
|
+
cs_active_high?: boolean;
|
|
63
|
+
word_bits?: number;
|
|
64
|
+
bit_order?: "msb" | "lsb";
|
|
65
|
+
sda_pin?: number;
|
|
66
|
+
scl_pin?: number;
|
|
67
|
+
monitor_root?: string;
|
|
68
|
+
}
|
|
69
|
+
interface ResolvedTransport {
|
|
70
|
+
transport: "serial" | "tcp";
|
|
71
|
+
serial_path?: string;
|
|
72
|
+
host?: string;
|
|
73
|
+
port?: number;
|
|
74
|
+
baud?: number;
|
|
75
|
+
discovery?: Record<string, unknown>;
|
|
76
|
+
}
|
|
77
|
+
interface RpmonRunResult {
|
|
78
|
+
ok: boolean;
|
|
79
|
+
exit_code: number | null;
|
|
80
|
+
timed_out: boolean;
|
|
81
|
+
command: string[];
|
|
82
|
+
stdout_json: Record<string, unknown>[];
|
|
83
|
+
stderr_json: Record<string, unknown>[];
|
|
84
|
+
stdout_tail: string[];
|
|
85
|
+
stderr_tail: string[];
|
|
86
|
+
transport?: ResolvedTransport;
|
|
87
|
+
output_path?: string;
|
|
88
|
+
summary_for_user: string;
|
|
89
|
+
}
|
|
90
|
+
export declare function rp2350MonitorCommandNeedsApproval(command: string): boolean;
|
|
91
|
+
export declare function discoverRp2350Monitors(serialPorts?: SerialPortInfo[]): Promise<{
|
|
92
|
+
devices: DeviceSummary[];
|
|
93
|
+
warnings: ErrorEnvelope[];
|
|
94
|
+
}>;
|
|
95
|
+
export declare function getRp2350MonitorStatus(request: Rp2350MonitorStatusRequest): Promise<{
|
|
96
|
+
ok: boolean;
|
|
97
|
+
transport: ResolvedTransport;
|
|
98
|
+
commands: RpmonRunResult[];
|
|
99
|
+
summary_for_user: string;
|
|
100
|
+
observed_at: string;
|
|
101
|
+
}>;
|
|
102
|
+
export declare function runRp2350MonitorCommand(request: Rp2350MonitorCommandRequest): Promise<RpmonRunResult | {
|
|
103
|
+
ok: boolean;
|
|
104
|
+
error_code: string;
|
|
105
|
+
message: string;
|
|
106
|
+
}>;
|
|
107
|
+
export declare function captureRp2350MonitorLogic(request: Rp2350MonitorLogicCaptureRequest): Promise<{
|
|
108
|
+
output_path: string;
|
|
109
|
+
summary_for_user: string;
|
|
110
|
+
ok: boolean;
|
|
111
|
+
exit_code: number | null;
|
|
112
|
+
timed_out: boolean;
|
|
113
|
+
command: string[];
|
|
114
|
+
stdout_json: Record<string, unknown>[];
|
|
115
|
+
stderr_json: Record<string, unknown>[];
|
|
116
|
+
stdout_tail: string[];
|
|
117
|
+
stderr_tail: string[];
|
|
118
|
+
transport?: ResolvedTransport;
|
|
119
|
+
}>;
|
|
120
|
+
export declare function decodeRp2350MonitorLogic(request: Rp2350MonitorLogicDecodeRequest): Promise<RpmonRunResult>;
|
|
121
|
+
export {};
|