feat(renaser): Fase 15 — la voz del sistema (acorde + eventos)
La bocina pertenecía al app enfocado (Fase 12), pero el kernel necesita hablar también. Ahora tiene voz propia, prioritaria. - `altavoz`: cola `SECUENCIA: Mutex<VecDeque<(u32,u32)>>` (freq, ms) + reloj `FIN_NOTA: AtomicU64`. `agendar(&[...])` encola; `atender()` (tarea del compositor cada fotograma) avanza la secuencia y silencia al acabar; `kernel_sonando()` gatea a los apps — mientras el kernel suena, `sys_tono` no-op. - Catálogo: VOZ_BIENVENIDA (Do5-Mi5-Sol5, 500 ms), VOZ_LANZAR (700→1050 Hz), VOZ_CERRAR (900→520 Hz), VOZ_DESALOJO (180 Hz). - Hitos: `kernel_main` agenda el acorde antes de `ejecutor.run`; `nacer_ventana` (Alt+N), `cerrar` (Alt+Q), `desalojar` (falla) agendan al hacer su trabajo. - De paso: las pestañas de la barra de tareas calculan su tinta por brillo del fondo (ITU-R BT.601); la pestaña crema del desalojo por memoria, que llevaba texto blanco invisible, ahora luce su nombre en tinta oscura. Verificado en QEMU con `-audiodev wav -machine pcspk-audiodev=spk`: el PCM crudo trae, en orden, el acorde de bienvenida (~520, 630, 760 Hz), un brevísimo 180 Hz (las balizas de discola/glotona desalojadas) y después la escala de Do mayor de tonada. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -469,6 +469,13 @@ pub(crate) fn enlazar_capacidades(
|
||||
"renaser",
|
||||
"sys_tono",
|
||||
|caller: Caller<'_, ContextoCapacidades>, frecuencia_hz: u32| {
|
||||
// Prioridad del kernel: mientras suena una nota agendada por el
|
||||
// sistema (acorde de bienvenida, repique al lanzar o cerrar una
|
||||
// app, bajo de desalojo), las llamadas de los apps se ignoran. El
|
||||
// kernel no se interrumpe a si mismo en mitad de su voz propia.
|
||||
if crate::drivers::altavoz::kernel_sonando() {
|
||||
return;
|
||||
}
|
||||
if crate::compositor::foco() == caller.data().indice_app {
|
||||
crate::drivers::altavoz::tono(frecuencia_hz);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user