Skip to content

Commit f2b1d10

Browse files
authored
Merge branch 'ArduPilot:master' into add_debian_package_files
2 parents 99f9e59 + 4877bfc commit f2b1d10

1 file changed

Lines changed: 60 additions & 6 deletions

File tree

MAVProxy/modules/mavproxy_DGPS.py

Lines changed: 60 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,70 @@
66
import socket, errno
77
from pymavlink import mavutil
88
from MAVProxy.modules.lib import mp_module
9+
from MAVProxy.modules.lib import mp_settings
10+
from MAVProxy.modules.lib.mp_settings import MPSetting
911

1012
class DGPSModule(mp_module.MPModule):
13+
14+
@staticmethod
15+
def default_settings():
16+
return mp_settings.MPSettings([
17+
MPSetting("portnum", int, 13320),
18+
MPSetting("ip", str, "127.0.0.1"),
19+
])
20+
1121
def __init__(self, mpstate):
1222
super(DGPSModule, self).__init__(mpstate, "DGPS", "DGPS injection support for SBP/RTCP/UBC")
13-
self.portnum = 13320
23+
self.dgps_settings = DGPSModule.default_settings()
24+
self.inject_seq_nr = 0
25+
self.cmdname = "dgps"
26+
27+
self.create_port()
28+
self.add_command(
29+
self.cmdname,
30+
self.cmd_dgps,
31+
f"{self.cmdname} control",
32+
[
33+
"set (DGPS_SETTING)",
34+
],
35+
)
36+
self.add_completion_function(
37+
"(DGPS_SETTING)", self.dgps_settings.completion
38+
)
39+
self.dgps_settings.set_callback(self.on_setting_set)
40+
41+
def create_port(self):
42+
print(f"DGPS: Listening for RTCM packets on UDP://{self.dgps_settings.get('ip')}:{self.dgps_settings.get('portnum')}")
1443
self.port = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
1544
self.port.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
16-
self.port.bind(("127.0.0.1", self.portnum))
45+
self.port.bind((self.dgps_settings.get('ip'), self.dgps_settings.get("portnum")))
1746
mavutil.set_close_on_exec(self.port.fileno())
1847
self.port.setblocking(0)
19-
self.inject_seq_nr = 0
20-
print("DGPS: Listening for RTCM packets on UDP://%s:%s" % ("127.0.0.1", self.portnum))
48+
49+
def cmd_dgps(self, args):
50+
"""
51+
dgps commands
52+
"""
53+
usage = f"usage: {self.cmdname} <set>"
54+
if len(args) < 1:
55+
print(usage)
56+
elif args[0] == "set":
57+
self.cmd_set(args[1:])
58+
else:
59+
print(usage)
60+
61+
def cmd_set(self, args):
62+
"""
63+
Modify a setting
64+
"""
65+
self.dgps_settings.command(args)
2166

2267
def send_rtcm_msg(self, data):
23-
msglen = 180;
68+
69+
if self.master is None:
70+
return
71+
72+
msglen = 180
2473

2574
if (len(data) > msglen * 4):
2675
print("DGPS: Message too large", len(data))
@@ -66,7 +115,12 @@ def send_rtcm_msg(self, data):
66115

67116
self.inject_seq_nr += 1
68117

69-
118+
def on_setting_set(self, setting):
119+
print("Settings changed:", setting.name)
120+
if setting.name == "portnum" or setting.name == "ip":
121+
if self.port:
122+
self.port.close()
123+
self.create_port()
70124

71125
def idle_task(self):
72126
'''called in idle time'''

0 commit comments

Comments
 (0)