-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathset_ncm.sh
More file actions
executable file
·112 lines (87 loc) · 2.29 KB
/
set_ncm.sh
File metadata and controls
executable file
·112 lines (87 loc) · 2.29 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#!/bin/bash
# Enables/disables USB NCM networking based on UsbNcmEnabled param.
# Called by ncm-param-watcher on param changes.
. /usr/comma/serial_helpers.sh
GADGET=/config/usb_gadget/g1
USB_IF="usb0"
USB_ADDR="192.168.42.2/24"
UDC_NAME="a600000.usb"
NCM_PARAM="/data/params/d/UsbNcmEnabled"
ensure_configfs() {
if ! mountpoint -q /config; then
mount -t configfs none /config
fi
}
ensure_gadget_base() {
ensure_configfs
mkdir -p "$GADGET"
cd "$GADGET" || exit 1
mkdir -p strings/0x409
mkdir -p configs/c.1/strings/0x409
mkdir -p functions/ncm.0
echo 0x1d6b > idVendor
echo 0x0103 > idProduct
echo 250 > configs/c.1/MaxPower
local serial model
serial="$(get_device_serial)"
model="$(tr -d '\0' < /sys/firmware/devicetree/base/model 2>/dev/null || true)"
echo "$serial" > strings/0x409/serialnumber
echo "comma.ai" > strings/0x409/manufacturer
echo "$model ($serial)" > strings/0x409/product
echo "NCM" > configs/c.1/strings/0x409/configuration
}
unbind_gadget() {
cd "$GADGET" || return 1
echo "" > UDC 2>/dev/null || true
}
bind_gadget() {
cd "$GADGET" || return 1
echo "$UDC_NAME" > UDC
}
wait_for_usb_if() {
for i in $(seq 1 30); do
ip link show "$USB_IF" >/dev/null 2>&1 && return 0
sleep 0.1
done
return 1
}
configure_usb_if() {
ip link set "$USB_IF" up
if ! ip addr show dev "$USB_IF" | grep -q "$USB_ADDR"; then
ip addr show dev "$USB_IF" | awk '/192\.168\.42\./ {print $2}' | while read -r cidr; do
ip addr del "$cidr" dev "$USB_IF" 2>/dev/null || true
done
ip addr add "$USB_ADDR" dev "$USB_IF"
fi
}
enable_ncm() {
ensure_gadget_base
cd "$GADGET" || exit 1
unbind_gadget
ln -s functions/ncm.0 configs/c.1/f1 2>/dev/null || true
echo "NCM" > configs/c.1/strings/0x409/configuration
bind_gadget
if wait_for_usb_if; then
configure_usb_if
else
echo "WARNING: $USB_IF not present yet."
fi
sv up dnsmasq
}
disable_ncm() {
ensure_gadget_base
cd "$GADGET" || exit 1
sv down dnsmasq
unbind_gadget
rm -f configs/c.1/f1 2>/dev/null || true
if ip link show "$USB_IF" >/dev/null 2>&1; then
ip link set "$USB_IF" down 2>/dev/null || true
fi
}
if [ -f "$NCM_PARAM" ] && [ "$(< "$NCM_PARAM")" = "1" ]; then
echo "Enabling USB NCM"
enable_ncm
else
echo "Disabling USB NCM"
disable_ncm
fi