31 lines
1.1 KiB
TypeScript
31 lines
1.1 KiB
TypeScript
import { bus } from '../../bus/SerialBus';
|
|
import { Command, FrameType } from '../constants';
|
|
|
|
export class PlayFileCommand {
|
|
async execute(path: string): Promise<boolean | null> {
|
|
try {
|
|
const p = new TextEncoder().encode(path);
|
|
// Wir brauchen: 1 Byte Flags + 1 Byte Länge + Pfad
|
|
const req = new Uint8Array(p.length + 2);
|
|
|
|
req[0] = 0x01; // 1. Byte: Flags (LSB: 1 = sofort abspielen)
|
|
req[1] = p.length; // 2. Byte: Länge für get_path() im C-Code
|
|
req.set(p, 2); // Ab 3. Byte: Der Pfad-String
|
|
|
|
await bus.sendRequest(Command.PLAY, req);
|
|
|
|
// Warten auf das ACK vom Board
|
|
if (await bus.waitForSync()) {
|
|
const typeArr = await bus.readExact(1);
|
|
if (typeArr[0] === FrameType.ACK) {
|
|
return true;
|
|
}
|
|
}
|
|
} catch (e) {
|
|
console.error("PlayFileCommand failed:", e);
|
|
} finally {
|
|
bus.releaseReadLock();
|
|
}
|
|
return null;
|
|
}
|
|
} |