summaryrefslogtreecommitdiff
path: root/ubxtool
diff options
context:
space:
mode:
authorGary E. Miller <gem@rellim.com>2019-04-04 18:52:16 -0700
committerGary E. Miller <gem@rellim.com>2019-04-04 18:52:16 -0700
commit4e8bf4c8aab6952b1e52e4fb0b10b4100bd80149 (patch)
treebac48de67979c86c9e3366306e781ed1f07967e3 /ubxtool
parentdbb12cccea541b957290b246749f8e19cb21c06b (diff)
downloadgpsd-4e8bf4c8aab6952b1e52e4fb0b10b4100bd80149.tar.gz
ubxtool: Add -g option for UBX-CFG-VALGET.
Plus some stuff to encode/decoide config items.
Diffstat (limited to 'ubxtool')
-rwxr-xr-xubxtool62
1 files changed, 57 insertions, 5 deletions
diff --git a/ubxtool b/ubxtool
index e6c46144..508e9d9e 100755
--- a/ubxtool
+++ b/ubxtool
@@ -78,6 +78,8 @@ opts = {
'enable': None,
# default input -f file
'input_file_name': None,
+ # default -g item
+ 'get_item': None,
# default forced wait? -W
'input_forced_wait': False,
# default port speed -s
@@ -1395,6 +1397,24 @@ class ubx(object):
"Flag to indicate if RTCM3X should be an output protocol on USB"),
)
+ def cfg_by_key(self, key):
+ """Find a config item by key"""
+
+ for item in self.cfgs:
+ if item[1] == key:
+ return item
+
+ return None
+
+ def cfg_by_name(self, name):
+ """Find a config item by name"""
+
+ for item in self.cfgs:
+ if item[0] == name:
+ return item
+
+ return None
+
def ack_ack(self, buf):
"UBX-ACK-ACK decode"
m_len = len(buf)
@@ -1896,13 +1916,22 @@ class ubx(object):
if 4 > m_len:
return "Bad Length %s" % m_len
- # we are at least protver 27
- if 79 > opts['protver']:
- opts['protver'] = 27
+ # this is a poll options, so does not set min protver
u = struct.unpack_from('<BBBB', buf, 0)
s = ' version: %u layer: %#x reserved: %u,%u\n' % u
- s += ' layers: %s\n' % self._layers(u[1])
+ s += ' layers: %s' % self._layers(u[1])
+
+ m_len -= 4
+ i = 0
+ while 0 < m_len:
+ u = struct.unpack_from('<L', buf, 4 + i * 4)
+ item = self.cfg_by_key(u[0])
+ if not item:
+ item = ("Unknown",0)
+ s += ('\n item: %s/%#x' % (item[0], u[0]))
+ m_len -= 4
+ i += 1
return s
def cfg_valset(self, buf):
@@ -3422,6 +3451,17 @@ class ubx(object):
m_data = bytearray(0)
gps_model.gps_send(0x06, 0x16, m_data)
+ def send_cfg_valget(self, key):
+ """UBX-CFG-VALGET, get config item"""
+ m_data = bytearray(8)
+ m_data[0] = 0 # version
+ m_data[1] = 0 # RAM layer
+ m_data[4] = (key) & 0xff
+ m_data[5] = (key >> 8) & 0xff
+ m_data[6] = (key >> 16) & 0xff
+ m_data[7] = (key >> 24) & 0xff
+ gps_model.gps_send(0x06, 0x8b, m_data)
+
def send_tim_svin(self):
"UBX-TIM-SVIN, get survey in data"
m_data = bytearray(0)
@@ -3797,6 +3837,7 @@ def usage():
' -e E enable E\n'
' -f F open F as file/device\n'
' default: %s\n'
+ ' -g G get config item G\n'
' -h print help\n'
' -i I interface (port) for UBX-CFG-PRT\n'
' -m M optional mode to -p P\n'
@@ -3843,7 +3884,7 @@ else:
try:
(options, arguments) = getopt.getopt(options,
- "?c:d:e:f:hi:m:rP:p:s:w:v:R:S:V")
+ "?c:d:e:f:g:hi:m:rP:p:s:w:v:R:S:V")
except getopt.GetoptError as err:
sys.stderr.write("%s: %s\n"
"Try '%s -h' for more information.\n" %
@@ -3859,6 +3900,8 @@ for (opt, val) in options:
opts['enable'] = val
elif opt == '-f':
opts['input_file_name'] = val
+ elif opt == '-g':
+ opts['get_item'] = val
elif opt == '-h' or opt == '-?':
usage()
elif opt == '-i':
@@ -4007,6 +4050,15 @@ try:
sys.stderr.write('%s: command %s\n' % (PROG_NAME, opts['command']))
gps_model.gps_send(cmd_data[0], cmd_data[1], payload)
+ elif opts['get_item'] is not None:
+ item = gps_model.cfg_by_name(opts['get_item'])
+ if item:
+ gps_model.send_cfg_valget(item[1])
+ else:
+ sys.stderr.write('%s: ERROR: item %s unknown\n' %
+ (PROG_NAME, opts['get_item']))
+ exit(1)
+
exit_code = io_handle.read(opts)
if ((VERB_RAW <= opts['verbosity']) and io_handle.out):