summaryrefslogtreecommitdiff
path: root/ubxtool
diff options
context:
space:
mode:
authorGary E. Miller <gem@rellim.com>2019-04-29 15:27:28 -0700
committerGary E. Miller <gem@rellim.com>2019-04-29 15:27:28 -0700
commitd51b8eb7a4efc48850eee4110503b2239f6a4770 (patch)
treeec215239a018d3ddab51c80a4f32cce6d5fdd9e3 /ubxtool
parentc8a1e53ab53ce95e62d0b787e65a443dda8e619e (diff)
downloadgpsd-d51b8eb7a4efc48850eee4110503b2239f6a4770.tar.gz
ubxtool: Config Items -g -x and -z now can be multiple
Multiple items are combined into one UBX-CFG-VALxxx messsage.
Diffstat (limited to 'ubxtool')
-rwxr-xr-xubxtool94
1 files changed, 53 insertions, 41 deletions
diff --git a/ubxtool b/ubxtool
index 75356867..50ce6c4a 100755
--- a/ubxtool
+++ b/ubxtool
@@ -112,7 +112,7 @@ opts = {
# open port read only -r
'read_only': False,
# default -z item
- 'set_item': None,
+ 'set_item': [],
# speed to set GPS -S
'set_speed': None,
# target gpsd (server:port:device) to connect to
@@ -3957,10 +3957,11 @@ class ubx(object):
def send_cfg_valdel(self, key):
"""UBX-CFG-VALDEL, delete config items by key"""
m_data = bytearray(4)
- m_data[0] = 0 # version, 0 = transactionless, 1 = transaction
- m_data[1] = 6 # 2 = BBR, 4 = flash
- # can not delete RAM layer!
- # so options stay set until reset!
+ m_data[0] = 0 # version, 0 = transactionless, 1 = transaction
+ m_data[1] = 6 # 2 = BBR, 4 = flash
+ # can not delete RAM layer!
+ # so options stay set until reset!
+
for key in keys:
k_data = bytearray(4)
k_data[0] = (key) & 0xff
@@ -3984,35 +3985,43 @@ class ubx(object):
m_data.extend(k_data)
gps_model.gps_send(0x06, 0x8b, m_data)
- def send_cfg_valset(self, item, val):
- """UBX-CFG-VALSET, set config item"""
+ def send_cfg_valset(self, nvs):
+ """UBX-CFG-VALSET, set config items by key/val pairs"""
- size = 8
- key = item[1]
- val_type = item[2]
+ m_data = bytearray(4)
+ m_data[0] = 0 # version, 0 = request, 1 = transaction
+ m_data[1] = 0x7 # RAM layer, 1=RAM, 2=BBR, 4=Flash
- cfg_type = self.item_to_type(item)
+ for nv in nvs:
+ size = 4
+ nv_split = nv.split(',')
+ name = nv_split[0]
+ val = nv_split[1]
- size += cfg_type[0]
- frmat = cfg_type[1]
- flavor = cfg_type[2]
- if 'u' == flavor:
- val1 = int(val)
- elif 'i' == flavor:
- val1 = int(val)
- elif 'f' == flavor:
- val1 = float(val)
+ item = gps_model.cfg_by_name(name)
+ key = item[1]
+ val_type = item[2]
- # FIXME: does not handle value yet
- m_data = bytearray(size)
- m_data[0] = 0 # version, 0 = request, 1 = transaction
- m_data[1] = 0x7 # RAM layer, 1=RAM, 2=BBR, 4=Flash
- m_data[4] = (key) & 0xff
- m_data[5] = (key >> 8) & 0xff
- m_data[6] = (key >> 16) & 0xff
- m_data[7] = (key >> 24) & 0xff
+ cfg_type = self.item_to_type(item)
- struct.pack_into(frmat, m_data, 8, val1)
+ size = 4 + cfg_type[0]
+ frmat = cfg_type[1]
+ flavor = cfg_type[2]
+ if 'u' == flavor:
+ val1 = int(val)
+ elif 'i' == flavor:
+ val1 = int(val)
+ elif 'f' == flavor:
+ val1 = float(val)
+
+ kv_data = bytearray(size)
+ kv_data[0] = (key) & 0xff
+ kv_data[1] = (key >> 8) & 0xff
+ kv_data[2] = (key >> 16) & 0xff
+ kv_data[3] = (key >> 24) & 0xff
+
+ struct.pack_into(frmat, kv_data, 4, val1)
+ m_data.extend(kv_data)
gps_model.gps_send(0x06, 0x8a, m_data)
def send_poll(self, m_data):
@@ -4581,7 +4590,7 @@ for (opt, val) in options:
elif opt == '-x':
opts['del_item'].append(val)
elif opt == '-z':
- opts['set_item'] = val
+ opts['set_item'].append(val)
if opts['help']:
usage()
@@ -4691,7 +4700,7 @@ 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['del_item'] is not None:
+ elif opts['del_item']:
keys = []
for name in opts['del_item']:
item = gps_model.cfg_by_name(name)
@@ -4703,7 +4712,7 @@ try:
exit(1)
gps_model.send_cfg_valdel(keys)
- elif opts['get_item'] is not None:
+ elif opts['get_item']:
keys = []
for name in opts['get_item']:
item = gps_model.cfg_by_name(name)
@@ -4715,15 +4724,18 @@ try:
exit(1)
gps_model.send_cfg_valget(keys)
- elif opts['set_item'] is not None:
- (name, val) = opts['set_item'].split(',')
- item = gps_model.cfg_by_name(name)
- if item:
- gps_model.send_cfg_valset(item, val)
- else:
- sys.stderr.write('%s: ERROR: item %s unknown\n' %
- (PROG_NAME, opts['set_item']))
- exit(1)
+ elif opts['set_item']:
+ nvs = []
+ for nv in opts['set_item']:
+ (name, val) = nv.split(',')
+ item = gps_model.cfg_by_name(name)
+ if item:
+ nvs.append(nv)
+ else:
+ sys.stderr.write('%s: ERROR: item %s unknown\n' %
+ (PROG_NAME, opts['set_item']))
+ exit(1)
+ gps_model.send_cfg_valset(nvs)
exit_code = io_handle.read(opts)