diff --git a/userpatches/overlay/etc/pulse/client.conf b/userpatches/overlay/etc/pulse/client.conf new file mode 100644 index 0000000..ea9259b --- /dev/null +++ b/userpatches/overlay/etc/pulse/client.conf @@ -0,0 +1,40 @@ +# This file is part of PulseAudio. +# +# PulseAudio is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# PulseAudio is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with PulseAudio; if not, see . + +## Configuration file for PulseAudio clients. See pulse-client.conf(5) for +## more information. Default values are commented out. Use either ; or # for +## commenting. + +# On linux systems, disable autospawn by default +# If you are not using systemd, comment out this line +autospawn=no +default-server=/var/run/pulse/native + +; default-sink = +; default-source = +; default-server = +; default-dbus-server = + +; autospawn = yes +; daemon-binary = /usr/bin/pulseaudio +; extra-arguments = --log-target=syslog + +; cookie-file = + +; enable-shm = yes +; shm-size-bytes = 0 # setting this 0 will use the system-default, usually 64 MiB + +; auto-connect-localhost = no +; auto-connect-display = no diff --git a/userpatches/overlay/etc/pulse/daemon.conf b/userpatches/overlay/etc/pulse/daemon.conf new file mode 100644 index 0000000..7c5f0de --- /dev/null +++ b/userpatches/overlay/etc/pulse/daemon.conf @@ -0,0 +1,102 @@ +# This file is part of PulseAudio. +# +# PulseAudio is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# PulseAudio is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with PulseAudio; if not, see . + +## Configuration file for the PulseAudio daemon. See pulse-daemon.conf(5) for +## more information. Default values are commented out. Use either ; or # for +## commenting. + +## GSOC config +daemonize = no +allow-module-loading = yes +allow-exit = no +;system-instance = no +exit-idle-time = -1 +load-default-script-file = yes +default-script-file = /etc/pulse/default.pa +resample-method = speex-float-0 + +; daemonize = no +; fail = yes +; allow-module-loading = yes +; allow-exit = yes +; use-pid-file = yes +; system-instance = no +; local-server-type = user +; enable-shm = yes +; enable-memfd = yes +; shm-size-bytes = 0 # setting this 0 will use the system-default, usually 64 MiB +; lock-memory = no +; cpu-limit = no + +; high-priority = yes +; nice-level = -11 + +; realtime-scheduling = yes +; realtime-priority = 5 + +; exit-idle-time = 20 +; scache-idle-time = 20 + +; dl-search-path = (depends on architecture) + +; load-default-script-file = yes +; default-script-file = /etc/pulse/default.pa + +; log-target = auto +; log-level = notice +; log-meta = no +; log-time = no +; log-backtrace = 0 + +; resample-method = speex-float-1 +; avoid-resampling = false +; enable-remixing = yes +; remixing-use-all-sink-channels = yes +; enable-lfe-remixing = no +; lfe-crossover-freq = 0 + +; flat-volumes = yes + +; rlimit-fsize = -1 +; rlimit-data = -1 +; rlimit-stack = -1 +; rlimit-core = -1 +; rlimit-as = -1 +; rlimit-rss = -1 +; rlimit-nproc = -1 +; rlimit-nofile = 256 +; rlimit-memlock = -1 +; rlimit-locks = -1 +; rlimit-sigpending = -1 +; rlimit-msgqueue = -1 +; rlimit-nice = 31 +; rlimit-rtprio = 9 +; rlimit-rttime = 200000 + +; default-sample-format = s16le +; default-sample-rate = 44100 +; alternate-sample-rate = 48000 +; default-sample-channels = 2 +; default-channel-map = front-left,front-right + +; default-fragments = 4 +; default-fragment-size-msec = 25 + +default-fragments = 10 +default-fragment-size-msec = 200 + +; enable-deferred-volume = yes +; deferred-volume-safety-margin-usec = 8000 +; deferred-volume-extra-delay-usec = 0 diff --git a/userpatches/overlay/etc/pulse/default.pa b/userpatches/overlay/etc/pulse/default.pa new file mode 100644 index 0000000..cc2e586 --- /dev/null +++ b/userpatches/overlay/etc/pulse/default.pa @@ -0,0 +1,160 @@ +#!/usr/bin/pulseaudio -nF +# +# This file is part of PulseAudio. +# +# PulseAudio is free software; you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# PulseAudio is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with PulseAudio; if not, see . + +# This startup script is used only if PulseAudio is started per-user +# (i.e. not in system mode) + +.fail + +### Automatically restore the volume of streams and devices +#load-module module-device-restore +#load-module module-stream-restore +#load-module module-card-restore + +### Automatically augment property information from .desktop files +### stored in /usr/share/application +load-module module-augment-properties + +### Should be after module-*-restore but before module-*-detect +#load-module module-switch-on-port-available + +### Load audio drivers statically +### (it's probably better to not load these drivers manually, but instead +### use module-udev-detect -- see below -- for doing this automatically) +#load-module module-alsa-sink +#load-module module-alsa-source device=hw:1,0 +#load-module module-oss device="/dev/dsp" sink_name=output source_name=input +#load-module module-oss-mmap device="/dev/dsp" sink_name=output source_name=input +#load-module module-null-sink +#load-module module-pipe-sink + +### X6100 working with dmix & dsnoop +#load-module module-alsa-sink device=mixplayback +#load-module module-alsa-source device=mixcapture + +# INPUT/RECORD +#load-module module-alsa-source device="dsnoop:CARD=sun8ia33audio,DEV=0" tsched=1 + +# OUTPUT/PLAYBACK +#load-module module-alsa-sink device="dmix:CARD=sun8ia33audio,DEV=0" tsched=1 + +#unload-module module-udev-detect +#unload-module module-detect +#load-module module-alsa-sink device=dmix +#load-module module-alsa-source device=dsnoop + + +### Automatically load driver modules depending on the hardware available +#.ifexists module-udev-detect.so +#load-module module-udev-detect tsched=0 +#.else +### Use the static hardware detection module (for systems that lack udev support) +#load-module module-detect +#.endif + +load-module module-null-sink sink_name=X6100_TX sink_properties=device.description=X6100_TX format=s16le rate=16000 channels=2 +load-module module-null-sink sink_name=X6100_RX sink_properties=device.description=X6100_RX format=s16le rate=16000 channels=2 + +### Automatically connect sink and source if JACK server is present +.ifexists module-jackdbus-detect.so +.nofail +load-module module-jackdbus-detect channels=2 +.fail +.endif + +### Automatically load driver modules for Bluetooth hardware +.ifexists module-bluetooth-policy.so +load-module module-bluetooth-policy +.endif + +.ifexists module-bluetooth-discover.so +load-module module-bluetooth-discover +.endif + +### Load several protocols +.ifexists module-esound-protocol-unix.so +load-module module-esound-protocol-unix +.endif +load-module module-native-protocol-unix auth-anonymous=1 + +### Network access (may be configured with paprefs, so leave this commented +### here if you plan to use paprefs) +#load-module module-esound-protocol-tcp +#load-module module-native-protocol-tcp +#load-module module-zeroconf-publish + +### Load the RTP receiver module (also configured via paprefs, see above) +#load-module module-rtp-recv + +### Load the RTP sender module (also configured via paprefs, see above) +#load-module module-null-sink sink_name=rtp format=s16be channels=2 rate=44100 sink_properties="device.description='RTP Multicast Sink'" +#load-module module-rtp-send source=rtp.monitor + +### Load additional modules from GSettings. This can be configured with the paprefs tool. +### Please keep in mind that the modules configured by paprefs might conflict with manually +### loaded modules. +.ifexists module-gsettings.so +.nofail +load-module module-gsettings +.fail +.endif + + +### Automatically restore the default sink/source when changed by the user +### during runtime +### NOTE: This should be loaded as early as possible so that subsequent modules +### that look up the default sink/source get the right value +load-module module-default-device-restore + +### Automatically move streams to the default sink if the sink they are +### connected to dies, similar for sources +load-module module-rescue-streams + +### Make sure we always have a sink around, even if it is a null sink. +load-module module-always-sink + +### Honour intended role device property +load-module module-intended-roles + +### Automatically suspend sinks/sources that become idle for too long +load-module module-suspend-on-idle + +### If autoexit on idle is enabled we want to make sure we only quit +### when no local session needs us anymore. +.ifexists module-console-kit.so +load-module module-console-kit +.endif +.ifexists module-systemd-login.so +load-module module-systemd-login +.endif + +### Enable positioned event sounds +load-module module-position-event-sounds + +### Cork music/video streams when a phone stream is active +load-module module-role-cork + +### Modules to allow autoloading of filters (such as echo cancellation) +### on demand. module-filter-heuristics tries to determine what filters +### make sense, and module-filter-apply does the heavy-lifting of +### loading modules and rerouting streams. +load-module module-filter-heuristics +load-module module-filter-apply + +### Make some devices default +#set-default-sink output +#set-default-source input diff --git a/userpatches/overlay/etc/pulse/system.pa b/userpatches/overlay/etc/pulse/system.pa new file mode 100644 index 0000000..553bef7 --- /dev/null +++ b/userpatches/overlay/etc/pulse/system.pa @@ -0,0 +1,61 @@ +#!/usr/bin/pulseaudio -nF +# +# This file is part of PulseAudio. +# +# PulseAudio is free software; you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# PulseAudio is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with PulseAudio; if not, see . + +# This startup script is used only if PulseAudio is started in system +# mode. + +### Automatically restore the volume of streams and devices +load-module module-device-restore +load-module module-stream-restore +load-module module-card-restore + +### Automatically load driver modules depending on the hardware available +.ifexists module-udev-detect.so +load-module module-udev-detect +.else +### Use the static hardware detection module (for systems that lack udev/hal support) +load-module module-detect +.endif + +### Load several protocols +.ifexists module-esound-protocol-unix.so +load-module module-esound-protocol-unix +.endif +load-module module-native-protocol-unix + +### Automatically restore the default sink/source when changed by the user +### during runtime +### NOTE: This should be loaded as early as possible so that subsequent modules +### that look up the default sink/source get the right value +load-module module-default-device-restore + +### Automatically move streams to the default sink if the sink they are +### connected to dies, similar for sources +load-module module-rescue-streams + +### Make sure we always have a sink around, even if it is a null sink. +load-module module-always-sink + +### Automatically suspend sinks/sources that become idle for too long +load-module module-suspend-on-idle + +### Enable positioned event sounds +load-module module-position-event-sounds + +### Enable bluetooth +load-module module-bluetooth-policy +load-module module-bluetooth-discover diff --git a/userpatches/overlay/etc/systemd/system/alsa_2_pulse.service b/userpatches/overlay/etc/systemd/system/alsa_2_pulse.service new file mode 100644 index 0000000..83ce850 --- /dev/null +++ b/userpatches/overlay/etc/systemd/system/alsa_2_pulse.service @@ -0,0 +1,13 @@ +[Unit] +Description=alsa 2 pulseaudio +Before=systemd-user-sessions.service +Before=lightdm.service +Requires=pulseaudio_system.service + +[Service] +User=root +ExecStart=/bin/sh -c '/usr/bin/arecord -D mixcapture --format S16_LE --rate 16000 | /usr/bin/paplay --device=X6100_RX --client-name=alsa_2_pulse.service --stream-name=X6100' +Restart=on-failure + +[Install] +WantedBy=multi-user.target diff --git a/userpatches/overlay/etc/systemd/system/amixer.service b/userpatches/overlay/etc/systemd/system/amixer.service new file mode 100644 index 0000000..60c550a --- /dev/null +++ b/userpatches/overlay/etc/systemd/system/amixer.service @@ -0,0 +1,16 @@ +[Unit] +Description=amixer +Before=systemd-user-sessions.service +Before=lightdm.service + +[Service] +User=root +Type=oneshot +RemainAfterExit=yes +ExecStart=/root/amixer.sh start +ExecStop=/root/amixer.sh stop +TimeoutSec=30 +StartLimitInterval=350 +StartLimitBurst=10 +[Install] +WantedBy=multi-user.target diff --git a/userpatches/overlay/gpio_setup.service b/userpatches/overlay/etc/systemd/system/gpio_setup.service similarity index 100% rename from userpatches/overlay/gpio_setup.service rename to userpatches/overlay/etc/systemd/system/gpio_setup.service diff --git a/userpatches/overlay/etc/systemd/system/pulse_2_alsa.service b/userpatches/overlay/etc/systemd/system/pulse_2_alsa.service new file mode 100644 index 0000000..a39b7df --- /dev/null +++ b/userpatches/overlay/etc/systemd/system/pulse_2_alsa.service @@ -0,0 +1,13 @@ +[Unit] +Description=pulseaudio 2 alsa +Before=systemd-user-sessions.service +Before=lightdm.service +Requires=pulseaudio_system.service + +[Service] +User=root +ExecStart=/bin/sh -c '/usr/bin/parec --rate=16000 --format=s16le --device=X6100_TX.monitor --client-name=pulse_2_alsa.service --stream-name=X6100 | /usr/bin/aplay --format S16_LE --rate 16000 -D mixplayback' +Restart=on-failure + +[Install] +WantedBy=multi-user.target diff --git a/userpatches/overlay/etc/systemd/system/pulse_2_network_rx.service b/userpatches/overlay/etc/systemd/system/pulse_2_network_rx.service new file mode 100644 index 0000000..34cac8c --- /dev/null +++ b/userpatches/overlay/etc/systemd/system/pulse_2_network_rx.service @@ -0,0 +1,14 @@ +[Unit] +Description=pulseaudio 2 network X6100 RX +Before=systemd-user-sessions.service +Before=lightdm.service +Requires=pulseaudio_system.service +Requires=alsa_2_pulse.service + +[Service] +User=root +ExecStart=/usr/bin/gst-launch-1.0 pulsesrc device=X6100_RX.monitor ! audioconvert ! audio/x-raw,rate=16000,channels=2,format=S16LE ! wavenc ! tcpserversink port=7000 host=0.0.0.0 +Restart=on-failure + +[Install] +WantedBy=multi-user.target diff --git a/userpatches/overlay/etc/systemd/system/pulseaudio_system.service b/userpatches/overlay/etc/systemd/system/pulseaudio_system.service new file mode 100644 index 0000000..e40dc2f --- /dev/null +++ b/userpatches/overlay/etc/systemd/system/pulseaudio_system.service @@ -0,0 +1,14 @@ +[Unit] +Description=pulseaudio system mode +Before=systemd-user-sessions.service +Before=lightdm.service +Requires=amixer.service + +[Service] +User=root +Type=notify +ExecStart=/usr/bin/pulseaudio -v --daemonize=no --system --realtime --log-target=journal --disallow-exit +Restart=on-failure + +[Install] +WantedBy=multi-user.target diff --git a/userpatches/overlay/etc/systemd/system/x6100_chroot.service b/userpatches/overlay/etc/systemd/system/x6100_chroot.service new file mode 100644 index 0000000..f0be465 --- /dev/null +++ b/userpatches/overlay/etc/systemd/system/x6100_chroot.service @@ -0,0 +1,17 @@ +[Unit] +Description=x6100 Internal charoot +Before=systemd-user-sessions.service +Before=lightdm.service + +[Service] +User=root +Type=oneshot +RemainAfterExit=yes +ExecStart=/root/chroot_onboard.sh start +ExecStop=/root/chroot_onboard.sh stop +TimeoutSec=30 +StartLimitInterval=350 +StartLimitBurst=10 + +[Install] +WantedBy=multi-user.target diff --git a/userpatches/overlay/root/amixer.sh b/userpatches/overlay/root/amixer.sh new file mode 100755 index 0000000..746b322 --- /dev/null +++ b/userpatches/overlay/root/amixer.sh @@ -0,0 +1,55 @@ +#!/bin/sh +# +# Starts pulseaudio. +# + +source /etc/profile +start() { + printf "init amixer" + amixer cset numid=10,iface=MIXER,name='AIF1 Data Digital ADC Capture Switch' on + amixer cset numid=19,iface=MIXER,name='Mic1 Capture Switch' on + amixer -c 0 sset 'ADC Gain',0 3 + amixer -c 0 sset 'Mic1 Boost',0 0 + amixer -c 0 sset 'Mic1',0 7 + amixer -c 0 sset 'Mic1',0 unmute + amixer cset numid=9,iface=MIXER,name='AIF1 Slot 0 Digital DAC Playback Switch' on + amixer -c 0 sset 'DAC',0 on + amixer -c 0 sset 'Headphone',0 63 + amixer -c 0 sset 'Headphone',0 unmute + echo "OK" +} +stop() { + printf "deinit amixer" + amixer cset numid=10,iface=MIXER,name='AIF1 Data Digital ADC Capture Switch' off + amixer cset numid=19,iface=MIXER,name='Mic1 Capture Switch' off + amixer -c 0 sset 'ADC Gain',0 0 + amixer -c 0 sset 'Mic1 Boost',0 0 + amixer -c 0 sset 'Mic1',0 0 + amixer -c 0 sset 'Mic1',0 mute + amixer cset numid=9,iface=MIXER,name='AIF1 Slot 0 Digital DAC Playback Switch' off + amixer -c 0 sset 'DAC',0 off + amixer -c 0 sset 'Headphone',0 0 + amixer -c 0 sset 'Headphone',0 mute + echo "OK" +} +restart() { + stop + start +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart|reload) + restart + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 +esac + +exit $? diff --git a/userpatches/overlay/root/chroot_onboard.sh b/userpatches/overlay/root/chroot_onboard.sh new file mode 100755 index 0000000..0356132 --- /dev/null +++ b/userpatches/overlay/root/chroot_onboard.sh @@ -0,0 +1,27 @@ +#!/bin/bash + +if [ "$1" == "start" ] ; then + mkdir -p /mnt/x6100 + mount /dev/mmcblk2p2 /mnt/x6100 + + mount -t proc proc /mnt/x6100/proc + mount -t sysfs sys /mnt/x6100/sys + mount -o bind /dev /mnt/x6100/dev + mount -t devpts /dev/pts /mnt/x6100/dev/pts/ + + mkdir -p /mnt/x6100/run/udev + mount -o bind /run/udev /mnt/x6100/run/udev + + + mkdir -p /var/run/pulse + mkdir -p /mnt/x6100/tmp/pulse + mount -o bind /var/run/pulse /mnt/x6100/tmp/pulse + + mkdir -p /var/run/dbus + mkdir -p /mnt/x6100/tmp/dbus + mount -o bind /var/run/dbus /mnt/x6100/tmp/dbus +elif [ "$1" == "stop" ] ; then + echo "not Implemented" +else + chroot /mnt/x6100 /bin/bash +fi diff --git a/userpatches/overlay/gpio_setup.sh b/userpatches/overlay/root/gpio_setup.sh similarity index 100% rename from userpatches/overlay/gpio_setup.sh rename to userpatches/overlay/root/gpio_setup.sh diff --git a/userpatches/overlay/root/run_x6100_app.sh b/userpatches/overlay/root/run_x6100_app.sh new file mode 100755 index 0000000..9445d0d --- /dev/null +++ b/userpatches/overlay/root/run_x6100_app.sh @@ -0,0 +1,3 @@ +#!/bin/bash +echo 1 > /sys/class/gpio/gpio138/value +chroot /mnt/x6100 /bin/bash -c 'source /etc/profile && /usr/app_qt/x6100_ui_v100' \ No newline at end of file