def enable_piksi_sim(self): print 'ENABLING SIM' section = "simulator" name = "enabled" value = "True" msg = MsgSettingsWrite(setting='%s\0%s\0%s\0' % (section, name, value)) self.send_to_piksi(msg.to_binary())
def main(): parser = argparse.ArgumentParser( description="Swift Navigation SBP Setting Monitor example.") parser.add_argument("-H", "--host", required=True, help="specify the host address.") parser.add_argument("-p", "--port", default=55556, help="specify the port to use.") args = parser.parse_args() monitor = SettingMonitor() with TCPDriver(args.host, args.port) as driver: with Handler(Framer(driver.read, driver.write, verbose=True)) as link: driver.flush() time.sleep(2) # Capture setting messages link.add_callback(monitor.capture_setting, SBP_MSG_SETTINGS_READ_RESP) link.add_callback(print_setting, SBP_MSG_SETTINGS_READ_RESP) # Disable spectrum analyzer link( MsgSettingsWrite( setting=b'%s\0%s\0%s\0' % (b'system_monitor', b'spectrum_analyzer', b'False'))) # Request the value of the system_monitor:spectrum_analyzer setting link( MsgSettingsReadReq( setting=b'%s\0%s\0' % (b'system_monitor', b'spectrum_analyzer'))) # Wait up to 5 seconds to see the setting we want specan_off = monitor.wait_for_setting_value( b'system_monitor', b'spectrum_analyzer', b'False') assert (specan_off == True) print("Spectrum analyzer turned off!") # Request the value of the system_monitor:spectrum_analyzer setting link( MsgSettingsReadReq( setting=b'%s\0%s\0' % (b'system_monitor', b'spectrum_analyzer'))) # Wait up to 5 seconds to see the setting we (don't) want specan_off = monitor.wait_for_setting_value( b'system_monitor', b'spectrum_analyzer', b'True') assert (specan_off == False) print("Spectrum analyzer still off!")
def enable_piksi_sim(self): if not self.framer: return False section = "simulator" name = "enabled" value = "True" msg = MsgSettingsWrite(setting='%s\0%s\0%s\0' % (section, name, value)) self.framer(msg) return True
def set_base_pos_location(self, lat, lon, alt, save=True): ''' assumes lat, lon, alt are already strings in the decimal degrees ''' if not self.framer: return False print "module_SBPUDPBroadcast: Setting base pos location: ", lat, lon, alt section = "surveyed_position" msg = MsgSettingsWrite(setting='%s\0%s\0%s\0' % (section, "surveyed_lat", lat)) self.framer(msg) msg = MsgSettingsWrite(setting='%s\0%s\0%s\0' % (section, "surveyed_lon", lon)) self.framer(msg) msg = MsgSettingsWrite(setting='%s\0%s\0%s\0' % (section, "surveyed_alt", alt)) self.framer(msg) if save: msg = MsgSettingsSave() self.framer(msg) return True
def disable_piksi_sim(self, save=True): if not self.framer: return False section = "simulator" name = "enabled" value = "False" msg = MsgSettingsWrite(setting='%s\0%s\0%s\0' % (section, name, value)) self.framer(msg) if save: msg = MsgSettingsSave() self.framer(msg) return True
def write(self, section, setting, value, write_retries=DEFAULT_WRITE_RETRIES, confirm_retries=DEFAULT_CONFIRM_RETRIES, verbose=False): """Write setting by name and confirm set Notes: Caller does not raise an exception, but RuntimeError may be raised when write unsuccessful Args: section(str): string of section name setting(str): string of setting name value(str): value to set verbose(bool): Echo settings to sdout Returns: None """ attempts = 0 while (attempts < write_retries): if verbose: print("Attempting to write:section={}|setting={}|value={}".format(section, setting, value)) attempts += 1 reply = {'status': 0} def cb(msg, **metadata): reply['status'] = msg.status self.link.add_callback(cb, SBP_MSG_SETTINGS_WRITE_RESP) self.link(MsgSettingsWrite(setting=b'%s\0%s\0%s\0' % (section.encode(KEY_ENCODING), setting.encode(KEY_ENCODING), value.encode(VALUE_ENCODING)))) if self._confirm_write(section, setting, value, verbose=verbose, retries=confirm_retries): self.link.remove_callback(cb, SBP_MSG_SETTINGS_WRITE_RESP) return if reply['status'] == 1: raise RuntimeError("Unable to write setting \"{}\" in section \"{}\" " "with value \"{}\": Setting value rejected.".format(setting, section, value)) elif reply['status'] == 2: raise RuntimeError("Unable to write setting \"{}\" in section \"{}\"." "Setting does not exist.".format(setting, section)) elif reply['status'] > 0: raise RuntimeError("Unknown setting write status response") else: continue raise RuntimeError("Unable to write setting \"{}\" in section \"{}\" " "with value \"{}\" after {} attempts. Setting " "may be read-only or the value could be out of bounds.".format(setting, section, value, write_retries)) self.link.remove_callback(cb, SBP_MSG_SETTINGS_WRITE_RESP)
def toggle_base_pos_broadcast(self, value=False, save=True): if not self.framer: return False section = "surveyed_position" name = "broadcast" settingValue = "False" if value: settingValue = "True" print "module_SBPUDPBroadcast: Broadcast base pos location: ", settingValue msg = MsgSettingsWrite(setting='%s\0%s\0%s\0' % (section, name, settingValue)) self.framer(msg) if save: msg = MsgSettingsSave() self.framer(msg) return True
def write(source, section, setting, value): ''' Writes the value of a given setting to the Multi. Args: source: Handler object section: section of the settings settings: setting to be set value: set values Returns: None ''' write_retries = 5 attempts = 0 # print('Writing: section={}, setting={}, value={}'.format(section, # setting, value)) while (attempts < write_retries): attempts += 1 reply = {'status': 0} def cb(msg, **metadata): reply['status'] = msg.status source.add_callback(cb, SBP_MSG_SETTINGS_WRITE_RESP) source( MsgSettingsWrite( setting='{}\0{}\0{}\0'.format(section, setting, value))) if confirm_write(source, section, setting, value): source.remove_callback(cb, SBP_MSG_SETTINGS_WRITE_RESP) break
def set(self, section, name, value): self.link( MsgSettingsWrite(setting='%s\0%s\0%s\0' % (section, name, value)))
def write(self, section, setting, value): self.link( MsgSettingsWrite(setting='%s\0%s\0%s\0' % (section, setting, value)))