From 1140de0fd45210666bc99f69529ae2c8202c032e Mon Sep 17 00:00:00 2001 From: Mikkeli Matlock Date: Sun, 15 Feb 2026 22:14:35 +0900 Subject: [PATCH] removed docs folder: contents lives in respective scopes directly now --- docs/ALARM_PROTOCOL.md | 87 ------------------------------------------ 1 file changed, 87 deletions(-) delete mode 100644 docs/ALARM_PROTOCOL.md diff --git a/docs/ALARM_PROTOCOL.md b/docs/ALARM_PROTOCOL.md deleted file mode 100644 index c3b29ad..0000000 --- a/docs/ALARM_PROTOCOL.md +++ /dev/null @@ -1,87 +0,0 @@ -# Alarm Audio Streaming Protocol - -## Overview - -The Raspberry Pi streams alarm audio to the ESP32-S3 over a dedicated WebSocket connection on **port 8766**. The protocol uses mixed text and binary frames — text for control messages, binary for raw PCM data. - -## Connection - -| Parameter | Value | -|-----------|-------| -| Port | 8766 | -| Transport | WebSocket | -| Direction | Pi (server) → ESP32 (client) | - -The ESP32 connects and stays connected. The server initiates alarm playback when needed. - -## Message Sequence - -``` -Pi ESP32 - │ │ - │◄──── WS connect ──────────│ - │ │ - │ (idle until alarm fires) │ - │ │ - ├─ alarm_start (text) ──────►│ → open codec - ├─ PCM chunk (binary) ──────►│ → queue + play - ├─ PCM chunk (binary) ──────►│ - │ ... │ - ├─ alarm_stop (text) ────────►│ → drain + close codec - │ │ -``` - -## Control Messages (Text Frames) - -### alarm_start - -Sent before the first PCM chunk. The ESP32 uses these parameters to configure the DAC. - -```json -{ - "type": "alarm_start", - "sample_rate": 24000, - "channels": 2, - "bits": 16 -} -``` - -### alarm_stop - -Sent after the last PCM chunk. - -```json -{ - "type": "alarm_stop" -} -``` - -## PCM Data (Binary Frames) - -- **Format:** Raw signed 16-bit little-endian, interleaved stereo (L, R, L, R, ...) -- **Chunk size:** 4096 bytes (1024 stereo samples at 16-bit) -- **Pacing:** Chunks sent at ~90% real-time speed to maintain buffer without overflow -- **Byte order:** Little-endian (native for both Pi and ESP32) - -At 24kHz / 2ch / 16-bit: -- Bytes per second: 96,000 -- Chunk duration: ~42.7 ms -- Send interval: ~38.4 ms (90% pacing) - -## ESP32 Buffering - -- FreeRTOS queue: 10 slots of pointer-to-chunk -- Total buffer capacity: ~427 ms of audio -- Overflow policy: drop chunk and log warning - -## Future: Alarm Scheduling - -Not yet implemented. Planned JSON format for alarm configuration: - -```json -{ - "alarm_time": "070000", - "alarm_days": ["Mon", "Tue", "Wed"], - "alarm_audio": "path/to/file.wav" -} -```