import { esp32s3 } from './esp32s3.js'; import { microbit } from './microbit.js'; import { rp2040 } from './rp2040.js'; import { builtinCategories } from '../blocks/categories/builtins.js'; const devices = {}; function register(profile) { devices[profile.id] = profile; } register(esp32s3); register(microbit); register(rp2040); /** * Register a new device at runtime (e.g. a sub-device like "ESP32 robot"). * Call refreshToolbox() in main.js after registering to pick up changes. */ export function registerDevice(profile) { register(profile); } export function getDeviceIds() { return Object.keys(devices); } export function getDeviceProfile(id) { return devices[id] || null; } export function getAllDevices() { return { ...devices }; } // --- active device state --- const STORAGE_KEY = 'esp32block_device'; let currentId = localStorage.getItem(STORAGE_KEY) || 'esp32s3'; if (!devices[currentId]) currentId = 'esp32s3'; export function getDeviceId() { return currentId; } export function getDevice() { return devices[currentId]; } export function setDeviceId(id) { if (!devices[id]) return; currentId = id; localStorage.setItem(STORAGE_KEY, id); } export function canFlashInBrowser() { return getDevice().firmware?.canFlashInBrowser === true; } // --- toolbox builder --- export function buildToolbox(deviceId) { const profile = devices[deviceId || currentId]; if (!profile) return { kind: 'categoryToolbox', contents: [] }; return { kind: 'categoryToolbox', contents: [ ...profile.categories, { kind: 'sep' }, ...builtinCategories, ], }; }