code: def idle_task(self):
          '''called on idle'''
          if mp_util.has_wxpython and (not self.menu_added_console and self.module('console') is not None):
              self.menu_added_console = True
              # we don't dynamically update these yet due to a wx bug
              self.menu_add.items = [ MPMenuItem(p, p, '# link add %s' % p) for p in self.complete_serial_ports('') ]
              self.menu_rm.items = [ MPMenuItem(p, p, '# link remove %s' % p) for p in self.complete_links('') ]
              self.module('console').add_menu(self.menu)
          for m in self.mpstate.mav_master:
              m.source_system = self.settings.source_system
              m.mav.srcSystem = m.source_system
              m.mav.srcComponent = self.settings.source_componenf idle_task(self):
          '''called on idle'''
          if mp_util.has_wxpython and (not self.menu_added_console and self.module('console') is not None):
              self.menu_added_console = True
              # we don't dynamically update these yet due to a wx bug
              self.menu_add.items = [ MPMenuItem(p, p, '# link add %s' % p) for p in self.complete_serial_ports('') ]
              self.menu_rm.items = [ MPMenuItem(p, p, '# link remove %s' % p) for p in self.complete_links('') ]
              self.module('console').add_menu(self.menu)
          for m in self.mpstate.mav_master:
              m.source_system = self.settings.source_system
              m.mav.srcSystem = m.source_system
              m.mav.srcComponent = self.settings.source_component
docs: called on idle