49 lines
1.8 KiB
Bash
49 lines
1.8 KiB
Bash
#!/bin/sh
|
|
# Enable the existing WalnutPi vendor controller, without changing WiFi rfkill.
|
|
set -eu
|
|
test "$(id -u)" = 0 || { echo 'root is required' >&2; exit 1; }
|
|
test -x /usr/bin/hciattach
|
|
test -x /usr/sbin/rfkill
|
|
test -f /lib/systemd/system/aw859-bluetooth.service
|
|
install -d -m 0755 /etc/systemd/system/aw859-bluetooth.service.d
|
|
cat > /etc/systemd/system/aw859-bluetooth.service.d/50-matrix-mobile.conf <<'EOF'
|
|
[Service]
|
|
ExecStartPre=
|
|
ExecStartPre=/usr/sbin/modprobe hci_uart
|
|
ExecStartPre=/usr/sbin/rfkill unblock bluetooth
|
|
ExecStart=
|
|
ExecStart=/usr/bin/hciattach -n -s 1500000 /dev/ttyBT0 sprd
|
|
Restart=on-failure
|
|
RestartSec=5
|
|
EOF
|
|
install -d -m 0755 /etc/systemd/system/bluetooth.service.d
|
|
cat > /etc/systemd/system/bluetooth.service.d/50-matrix-mobile.conf <<'EOF'
|
|
[Unit]
|
|
After=aw859-bluetooth.service
|
|
Wants=aw859-bluetooth.service
|
|
EOF
|
|
python3 - <<'PY'
|
|
from pathlib import Path
|
|
import re
|
|
p = Path('/etc/bluetooth/main.conf')
|
|
text = p.read_text(encoding='utf-8')
|
|
backup = p.with_name('main.conf.matrix-mobile-original')
|
|
if not backup.exists():
|
|
with backup.open('x', encoding='utf-8') as stream:
|
|
stream.write(text)
|
|
for key, value in [('ControllerMode', 'le'), ('AlwaysPairable', 'false')]:
|
|
pattern = r'(?m)^\s*' + key + r'\s*=.*$'
|
|
if re.search(pattern, text):
|
|
text = re.sub(pattern, key + '=' + value, text)
|
|
else:
|
|
text = text.replace('[General]', '[General]\n' + key + '=' + value, 1)
|
|
p.write_text(text, encoding='utf-8')
|
|
PY
|
|
systemctl unmask bluetooth.service aw859-bluetooth.service
|
|
systemctl daemon-reload
|
|
systemctl enable bluetooth.service aw859-bluetooth.service
|
|
if [ "${DEFER_SERVICE_START:-0}" != 1 ]; then
|
|
# Bluetooth failure must not prevent deploying or running the display service.
|
|
systemctl start aw859-bluetooth.service bluetooth.service || echo 'Bluetooth unavailable; inspect mobile status' >&2
|
|
fi
|