diff options
author | Gary E. Miller <gem@rellim.com> | 2019-04-04 18:52:16 -0700 |
---|---|---|
committer | Gary E. Miller <gem@rellim.com> | 2019-04-04 18:52:16 -0700 |
commit | 4e8bf4c8aab6952b1e52e4fb0b10b4100bd80149 (patch) | |
tree | bac48de67979c86c9e3366306e781ed1f07967e3 /ubxtool | |
parent | dbb12cccea541b957290b246749f8e19cb21c06b (diff) | |
download | gpsd-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-x | ubxtool | 62 |
1 files changed, 57 insertions, 5 deletions
@@ -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): |