feat: audio stack working — pulseaudio + x6200_control + voice_rec
- Add pulseaudio in system mode - Add alsactl restore with correct mixer state from Aether - Add x6200-control package (I2C hardware control library) - Audio chain: pulseaudio -> x6200_control_init -> voice_rec -> speaker
This commit is contained in:
59
br2_external/board/x6200/rootfs-overlay/etc/init.d/S70mestre-audio
Executable file
59
br2_external/board/x6200/rootfs-overlay/etc/init.d/S70mestre-audio
Executable file
@@ -0,0 +1,59 @@
|
||||
#!/bin/sh
|
||||
# S70mestre-audio — X6200 audio hardware init
|
||||
#
|
||||
# Initializes the X6200's audio routing via I2C:
|
||||
# 1. Calls x6200_control_init() to establish MCU state
|
||||
# 2. Sets speaker volume
|
||||
# 3. Switches audio routing from RX-radio to SoC DAC (voice_rec)
|
||||
#
|
||||
# Must run after S50pulseaudio (pulseaudio must hold PCM open first
|
||||
# to keep ALSA clocks active).
|
||||
#
|
||||
# The voice_rec bit (0x00008 in sple_atue_trx register, cmd 12)
|
||||
# switches the X6200's internal audio mux from the RF receiver
|
||||
# to the SoC DAC — allowing piHPSDR/aplay to be heard in the speaker.
|
||||
|
||||
VOLUME=50
|
||||
|
||||
do_init() {
|
||||
python3 << EOF
|
||||
import ctypes
|
||||
lib = ctypes.CDLL("libaether_x6200_control.so")
|
||||
lib.x6200_control_init.restype = ctypes.c_bool
|
||||
lib.x6200_control_rxvol_set.argtypes = [ctypes.c_uint8]
|
||||
lib.x6200_control_spmode_set.argtypes = [ctypes.c_bool]
|
||||
|
||||
if not lib.x6200_control_init():
|
||||
raise SystemExit("x6200_control_init() failed")
|
||||
|
||||
lib.x6200_control_rxvol_set($VOLUME)
|
||||
lib.x6200_control_spmode_set(False) # Speaker mode (not headphone)
|
||||
EOF
|
||||
}
|
||||
|
||||
do_voice_rec() {
|
||||
# Switch audio routing: RX-radio -> SoC DAC (voice_rec bit = 0x00008)
|
||||
i2ctransfer -y 0 w6@0x72 0x00 0x30 0x08 0x00 0x00 0x00
|
||||
}
|
||||
|
||||
case "$1" in
|
||||
start)
|
||||
echo "Starting mestre-audio"
|
||||
do_init && do_voice_rec && echo "OK" || echo "FAILED"
|
||||
;;
|
||||
stop)
|
||||
echo "Stopping mestre-audio"
|
||||
# Switch back to RX-radio audio
|
||||
i2ctransfer -y 0 w6@0x72 0x00 0x30 0x00 0x00 0x00 0x00
|
||||
echo "OK"
|
||||
;;
|
||||
restart)
|
||||
$0 stop
|
||||
sleep 1
|
||||
$0 start
|
||||
;;
|
||||
*)
|
||||
echo "Usage: $0 {start|stop|restart}" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
Reference in New Issue
Block a user