mirror of
https://github.com/sweidac/kidsbox.git
synced 2026-10-28 06:52:57 +01:00
- rc522: add NDEF URL reading via WUPA+cascade anticoll+SELECT+TLV parse
- AudioPlayer: route http:// URIs to esp_player_http_music_play()
- CacheManager: download URLs async to /sdcard/cache/{hash}.{ext}
- TagPlayerControl: NDEF URL → cache-or-stream; fallback to UID local mapping
- RFIDInterface: wire ndef_callback, expose combined uid+url callback
- WebInterface: add /api/info, /api/storage, /api/playback, /api/bluetooth
- BluetoothInterface: stub for A2DP speaker mode
- Networking: WiFi connect with 30s timeout instead of blocking forever
- main.cpp: re-enable WiFi + web server, fix init order, add CacheManager
- www/: full SPA — playback controls, device info, storage, BT pairing
- .gitmodules: switch rc522 submodule URL to HTTPS
https://claude.ai/code/session_01MhAnh68DPNnTjcKqjNYDmk
60 lines
2.0 KiB
HTML
60 lines
2.0 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<title>Kidsbox</title>
|
|
<link rel="stylesheet" href="styles.css">
|
|
</head>
|
|
<body>
|
|
<header>
|
|
<h1>🎧 Kidsbox</h1>
|
|
</header>
|
|
|
|
<main>
|
|
<section class="card" id="section-playback">
|
|
<h2>Now Playing</h2>
|
|
<div class="track-uri" id="track-uri">—</div>
|
|
<div class="playback-controls">
|
|
<button class="btn btn-primary" id="btn-pause" disabled>Pause</button>
|
|
<button class="btn btn-secondary" id="btn-stop" disabled>Stop</button>
|
|
</div>
|
|
<div class="volume-row">
|
|
<label for="volume-slider">Volume</label>
|
|
<input type="range" id="volume-slider" min="0" max="100" value="50">
|
|
<span id="volume-label">50</span>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="card" id="section-info">
|
|
<h2>Device Info</h2>
|
|
<table class="info-table">
|
|
<tr><th>IP Address</th><td id="info-ip">—</td></tr>
|
|
<tr><th>Status</th><td id="info-playing">—</td></tr>
|
|
<tr><th>Cache Used</th><td id="info-cache">—</td></tr>
|
|
<tr><th>Free Heap</th><td id="info-heap">—</td></tr>
|
|
</table>
|
|
<button class="btn btn-secondary" id="btn-refresh-info">Refresh</button>
|
|
</section>
|
|
|
|
<section class="card" id="section-storage">
|
|
<h2>Storage</h2>
|
|
<div class="storage-header">
|
|
<span id="storage-summary">Loading…</span>
|
|
<button class="btn btn-danger" id="btn-clear-cache">Clear All</button>
|
|
</div>
|
|
<ul class="cache-list" id="cache-list"></ul>
|
|
</section>
|
|
|
|
<section class="card" id="section-bluetooth">
|
|
<h2>Bluetooth Speaker</h2>
|
|
<p class="bt-status" id="bt-status">Disabled</p>
|
|
<button class="btn btn-secondary" id="btn-bt-toggle">Enable</button>
|
|
<p class="note">Pair your phone to play music through the Kidsbox speaker.</p>
|
|
</section>
|
|
</main>
|
|
|
|
<script src="main.js"></script>
|
|
</body>
|
|
</html>
|