code: def register_tile(self, hw_type, api_major, api_minor, name, fw_major, fw_minor, fw_patch, exec_major, exec_minor, exec_patch, slot, unique_id):
          
  
          api_info = (api_major, api_minor)
          fw_info = (fw_major, fw_minor, fw_patch)
          exec_info = (exec_major, exec_minor, exec_patch)
  
          address = 10 + slot
          info = TileInfo(hw_type, name, api_info, fw_info, exec_info, slot, unique_id, state=TileState.JUST_REGISTERED, address=address)
  
          self.tile_manager.insert_tile(info)
  
          debug = int(self.tile_manager.debug_mode)
  
          if self.tile_manager.safe_mode:
              run_level = RunLevel.SAFE_MODE
              info.state = TileState.SAFE_MODE
              config_rpcs = []
          else:
              run_level = RunLevel.START_ON_COMMAND
              info.state = TileState.BEING_CONFIGURED
              config_rpcs = self.config_database.stream_matching(address, name)
  
          self.tile_manager.queue.put_nowait((info, config_rpcs))
  
          return [address, run_level, debug]
docs: Register a tile with this controller.
  
          This function adds the tile immediately to its internal cache of registered tiles
          and queues RPCs to send all config variables and start tile rpcs back to the tile.