mirror of
https://github.com/sweidac/kidsbox.git
synced 2026-10-28 06:52:57 +01:00
Implement full NFC-URL streaming architecture
- 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
This commit is contained in:
19 files changed
+1172
-318
No files matched your search
+57
-15
@@ -1,17 +1,59 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>Kidsbox</title>
|
||||
<link rel="stylesheet" src="styles.css">
|
||||
</head>
|
||||
<body>
|
||||
<h1>Hi, I'm a File!</h1>
|
||||
<!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>
|
||||
|
||||
<section class="rfid">
|
||||
<h3>RFID-ID</h3>
|
||||
<div class="rfid-id"></div>
|
||||
<button class="rfid-refresh">refresh</button>
|
||||
</section>
|
||||
<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>
|
||||
|
||||
<script src="main.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
<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>
|
||||
Reference in new issue
Block a user