voxl-modem
Overview
The voxl-modem package provides software support for the various ModalAI supported modem hardware options, such as:
- LTE Modems (Sierra Wireless WP/RC series)
- 5G Modems (Quectel, managed via
quectel-CM, and Sierra EM9X91, managed viaqmicli) - Microhard Modems
- Doodle Labs Modems
- DTC Modems (Community Supported)
Silvus radios (SKU modem code 33) and plain Ethernet (SKU modem code 34) are not managed by voxl-modem. See the SKU modem table for the full list of modem codes.
Usage
As with most SDK services, voxl-modem can be configured and enabled to run on boot using it’s configuration script. Usage is as follows:
voxl2:/$ voxl-configure-modem -h
Config script for voxl-modem
voxl-configure-modem enable
voxl-configure-modem disable
voxl-configure-modem factory_enable
voxl-configure-modem doodle
voxl-configure-modem doodle-vrx
voxl-configure-modem dtc
voxl-configure-modem dtc-vrx
voxl-configure-modem microhard
voxl-configure-modem v2-tmobile
voxl-configure-modem v2-usmobile
show this help message:
voxl-configure-modem help
Running voxl-configure-modem without providing an argument, will execute a wizard with the following options (on qrb5165-based devices such as VOXL 2):
voxl2:/$ voxl-configure-modem
Starting interactive mode
What type of modem are you using?
1) v2
2) microhard
3) dtc
4) doodle
5) quectel
6) em9X91
#?
Selecting an option from this menu will trigger more questions catered to that modem type:
voxl2:/$ voxl-configure-modem
Starting interactive mode
What type of modem are you using?
1) v2
2) microhard
3) dtc
4) doodle
5) quectel
6) em9X91
#? 5
Are you attempting to connect to ModalLink? (not common)
1) yes
2) no
#? 2
Which APN is correct for your SIM card?
AT&T - IoT device - APN: m2m.com.attz
AT&T - Laptop or Tablet - APN: broadband
AT&T - Smartphone - APN: phone
T-Mobile - APN: fast.t-mobile.com
Verizon - APN: vzwinternet
Google Fi - APN: h2g2
US Mobile (Dark Star/Verizon) - APN: ereseller
1) m2m.com.attz 4) fast.t-mobile.com 7) ereseller
2) broadband 5) vzwinternet 8) Custom
3) phone 6) googlefi
#?
After the APN question you will be asked which region your modem will be used in:
Select modem region:
1) Americas
2) Europe/Middle-East/Asia
If you select doodle, the wizard instead asks for the static IP to use on the Doodle network (default 10.223.0.100), and then for the network interface the radio is connected to (default eth1). The interface choice is written to the doodle_interface field of the config file, udp_mtu is set to 500 in /etc/modalai/voxl-mavlink-server.conf, and the voxl-modem-doodle service is enabled. At runtime the interface is auto-detected by driver name, with the configured doodle_interface value used as a fallback if no match is found.
Going through the voxl-modem configuration process will set up a configuration file located at /etc/modalai/voxl-modem.conf as well as enable the voxl-modem service to run on boot
voxl2:/$ cat /etc/modalai/voxl-modem.conf
{
"modem_type": "quectel",
"apn": "h2g2",
"world": "false",
"microhard_ip": "192.168.168.100",
"dtc_ip": "192.168.0.100",
"doodle_ip": "10.223.0.100",
"doodle_interface": "eth0",
"modallink": "false",
"placeholder": "hello world"
}
voxl2:/$ voxl-configure-modem doodle
wiping old config file
reloading systemd services
enabling voxl-modem systemd service
Created symlink /etc/systemd/system/multi-user.target.wants/voxl-modem.service → /etc/systemd/system/voxl-modem.service.
starting voxl-modem systemd service
DONE configuring voxl-modem
It is possible to modify this config file manually in some circumstances, but not recommended.
Tips
When checking to see if a modem is enumerated correctly, it can be helpful to check lsusb to see if the device has been detected:
voxl2:/$ lsusb
Bus 002 Device 002: ID 0424:5744 Standard Microsystems Corp.
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 004: ID 0424:2740 Standard Microsystems Corp.
Bus 001 Device 003: ID 05ac:1402 Apple, Inc. Ethernet Adapter [A1277]
Bus 001 Device 002: ID 0424:2744 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Another helpful command is ifconfig, which displays the VOXL’s network interfaces and their IP addresses:
voxl2:/$ ifconfig
bond0: flags=5123<UP,BROADCAST,MASTER,MULTICAST> mtu 1500
ether 2a:f2:52:11:bf:f8 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
dummy0: flags=195<UP,BROADCAST,RUNNING,NOARP> mtu 1500
inet6 fe80::10:e3ba:b70f:f411 prefixlen 64 scopeid 0x20<link>
ether 3e:a1:0a:d0:b3:40 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 8 bytes 1648 (1.6 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eth0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
ether 48:d7:05:ea:06:36 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 200 bytes 14500 (14.5 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 200 bytes 14500 (14.5 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
voxl-modem can be disabled from running on boot via. the following:
voxl2:/$ voxl-configure-modem disable
disabling voxl-modem systemd service
stopping voxl-modem systemd service
Done configuring voxl-modem
As with most services, it is recommended to reboot your device after doing so.
To check the status of voxl-modem when it is running, use the following:
systemctl status voxl-modem
Diagnostics
For Quectel 5G/LTE modems, voxl-inspect-modem-5g queries the modem via AT commands and displays real-time signal statistics (mode, state, band, RSRP, RSRQ, SINR, and ARFCN) for both LTE and 5G NR (NSA/SA):
Options:
-h, --help Print this help message
-n, --newline Print each sample on a new line (default: overwrite)
-s, --save Save samples to CSV file (/data/voxl-inspect-cell-modem.csv)
-r, --rate <ms> Poll rate in milliseconds (default: 1000)
-p, --port <device> Serial port for AT commands (default: /dev/ttyUSB2)
For Doodle Labs radios, doodle-cli talks to the radio connected over USB:
Usage: doodle-cli
-i get VOXL2 IP address on the doodle network for the radio connected over USB
-w get wlan0 IP address of radio connected over USB
-f get the FW version of the radio connected over USB
-m get mesh ID
-k get mesh key
-l get information about wlan0
-a get information about connected mesh nodes
-s set a new mesh ID using the drone's serial number
Tailscale
The voxl-modem package also ships automatic Tailscale startup, no manual install needed. Place a Tailscale auth key in /data/modalai/tailscale.key and the voxl-tailscale-startup script (run when the tailscaled service starts) will authenticate the device to your tailnet with the hostname voxl2-<serial number>.