From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by mx.groups.io with SMTP id smtpd.web12.9450.1626362363890578257 for ; Thu, 15 Jul 2021 08:19:24 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@intel.onmicrosoft.com header.s=selector2-intel-onmicrosoft-com header.b=y91TrKqG; spf=pass (domain: intel.com, ip: 192.55.52.93, mailfrom: chasel.chiu@intel.com) X-IronPort-AV: E=McAfee;i="6200,9189,10045"; a="207544817" X-IronPort-AV: E=Sophos;i="5.84,242,1620716400"; d="scan'208";a="207544817" Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 15 Jul 2021 08:19:20 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.84,242,1620716400"; d="scan'208";a="428835846" Received: from orsmsx606.amr.corp.intel.com ([10.22.229.19]) by fmsmga007.fm.intel.com with ESMTP; 15 Jul 2021 08:19:20 -0700 Received: from orsmsx611.amr.corp.intel.com (10.22.229.24) by ORSMSX606.amr.corp.intel.com (10.22.229.19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.10; Thu, 15 Jul 2021 08:19:19 -0700 Received: from orsmsx603.amr.corp.intel.com (10.22.229.16) by ORSMSX611.amr.corp.intel.com (10.22.229.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.10; Thu, 15 Jul 2021 08:19:19 -0700 Received: from orsedg603.ED.cps.intel.com (10.7.248.4) by orsmsx603.amr.corp.intel.com (10.22.229.16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.10 via Frontend Transport; Thu, 15 Jul 2021 08:19:19 -0700 Received: from NAM02-BN1-obe.outbound.protection.outlook.com (104.47.51.47) by edgegateway.intel.com (134.134.137.100) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2242.10; Thu, 15 Jul 2021 08:19:14 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=nudysTzsal4/cxC8+2YQBuNFQ9rB19jYeOZYsNEcVs3bXH7hHqlacBxUmO2ZL053xssB5IUumSczWsAa/9FjttRxqmjL5m0AtiNs8PC06rwMmgnjUdSURG6HKv56GnpsRwb0zpDMHC8IrUu+uew2k/AVRMV0c0GqSxz/jKyEOabLxdVU5xjgRXZgOfusUPYj/g1vQ6cumhCW9q0VQRX9++IfAA7lKP6l3UmqwbnVuKoanl+af8BOv5SB9R+uFQqxUqdSY/IPs/GGiCo6fz8ME+/WTwZ1zGlMU/6NpG0u7+9BJhA1ftSf/RQeRfkBV4PuxCGHjXeQHO2oPkNY+Emchg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=GmmWzFnKeMbfc+JxeQTzUabNpb55MglEgRCEZOnClxg=; b=c73Fc4wXdnWCkEDYCFXmMrs6AWd07yOzGf3OLqJW5ZN89NjG78Jj25sMUX/6MubrUtVxx3wKK+Hd0vBC4KnJEKfziLKgWcfwbYFedoGsx8RPm0n6EueTI7Lg6BXcuaWZXIr0FSJFMODqgFL3ozJRzby91isgEjr6NQ+VvgHxDCqJOCIOyQVsFKyVTQqkklBTm8qgpD2wKpQkCnWITRORS9GUZWrFXsrN+SZknd0/C1w7nz1H7zZUiIRtUxU4XVtPm3/kacCVVRSdlPEm+lkpbcqxpBstvLDnDrj9Pfl/qiOVTZ8oRwbCEcr2LUKKGbWrFsvpeO+efdy53BqLxdFd5Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel.onmicrosoft.com; s=selector2-intel-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=GmmWzFnKeMbfc+JxeQTzUabNpb55MglEgRCEZOnClxg=; b=y91TrKqGvgaOdWEOLkW6IuJSdi3dJbZlVoDT7OzKAClCSibMRy2vRNWRIDmCXbDrCPjv6l3u/iQdb9MIBFBH5g2aSNhANj1FPxQGE4+Z1B+7f6s8GAFn+qG9FrH4SmQtbEb6uD1rPGvjw+7dJqsy888Ar8r3L63JHH/YzziHmxc= Received: from BN9PR11MB5483.namprd11.prod.outlook.com (2603:10b6:408:104::10) by BN9PR11MB5498.namprd11.prod.outlook.com (2603:10b6:408:103::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.20; Thu, 15 Jul 2021 15:19:12 +0000 Received: from BN9PR11MB5483.namprd11.prod.outlook.com ([fe80::79a3:c273:504e:ace2]) by BN9PR11MB5483.namprd11.prod.outlook.com ([fe80::79a3:c273:504e:ace2%7]) with mapi id 15.20.4308.027; Thu, 15 Jul 2021 15:19:12 +0000 From: "Chiu, Chasel" To: "Loo, Tung Lun" , "devel@edk2.groups.io" CC: "Ma, Maurice" , "Desimone, Nathaniel L" , "Zeng, Star" Subject: Re: [PATCH v2] IntelFsp2Pkg: Add search function for Config Editor Thread-Topic: [PATCH v2] IntelFsp2Pkg: Add search function for Config Editor Thread-Index: AQHXd3vCan35wCS/TkeNvI5hML4LqKtEKaXw Date: Thu, 15 Jul 2021 15:19:12 +0000 Message-ID: References: <20210713001208.1332-1-tung.lun.loo@intel.com> In-Reply-To: <20210713001208.1332-1-tung.lun.loo@intel.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-reaction: no-action dlp-version: 11.5.1.3 authentication-results: intel.com; dkim=none (message not signed) header.d=none;intel.com; dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 79e8754e-4651-4017-1ef2-08d947a3e6d4 x-ms-traffictypediagnostic: BN9PR11MB5498: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:1417; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: XqMq4eL5SrrbWuLDHxo1M5SKk0JLSejkTi0U0cFklLu0DVY+be+JMwnP4lUnhhktF0z7RPIYRWh9LNw5iGIOwfRDh6No+bt0e3GUuA9eK4dRx38zE45tRJyck2A1EfP4L0Vnw6waSuZGMFWI6E/go0FXFXIFAGnuJnAjT8cCLlEiLcicH7TwhdWj1rrGPHM2eOfgz5fi4ZLo0sDfDBUw0GF9X0/d47+Nh8zAdErejt+fFq4+TvVamgTzrqzKPV56r0wfFXGVdJwbvR1vkpWt8sFbBZ+HfZj+eyzke2WuWo1/p8c4U8EcPRvPo+/dTNG52K07bMPC0ydDKNYoZ8enxYYqc856k6DRj67LNZTsc/8vyxQMSbhK6Cm51ZwLM//ACzf1NGP6qb/udRCWws1WJis2/h4thLVzWqpF9mRcfe67mvl0IxjnG0d1kcvGvoQ1uTgBvzHmZM90DRXg92adcltaH85Ig9Uer3ccyLTvV0+mEelcZR985XMIlIQazh0H52ngXtG65eT4K2XcM3Ef8oOmowo8gqn2QL2ZCl6WSUusvJYrK6IHUB4FiV3dFMtSqiWwZFXMwW3DjR1dNA2sA14m+XfCNOjAC0DDH/NnKbG39+0DZjXjSmuyj1beZ6pMd17RiNAXqPanxjzKAX03Lgfb+VSJ8+L5/KQn1DYqCgX2Wiwk9VwfJmPILmAtbvZM7tCGTCdMJh9cm0QD4GegdL80hAuczRbZzXGtvk/k0pUv0OBLtBjtNQ4fzviaZEFw94XopidhQSzeVdygiLOgo4oRHsLmVuRxivClY9XFuzC1qd+xc1TX4ex7P6++e/a3 x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BN9PR11MB5483.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(376002)(346002)(396003)(366004)(136003)(39860400002)(5660300002)(71200400001)(26005)(186003)(86362001)(33656002)(2906002)(7696005)(478600001)(8676002)(6506007)(107886003)(83380400001)(316002)(19627235002)(76116006)(9686003)(66946007)(55016002)(8936002)(966005)(38100700002)(53546011)(122000001)(66476007)(4326008)(54906003)(110136005)(52536014)(66446008)(64756008)(66556008)(11716005)(38070700004);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?ZNDOHmeqhp7YNeCsO2RRaHKqP0YKJwSogOTzOaudxIScREncdoTqZbpzFrl1?= =?us-ascii?Q?ZBSJu/FbQoQ90b6RW+2rWM4H6PnZhpuoz6iQbF1u46CQzPgaCc30C1ZszB1t?= =?us-ascii?Q?ys0pgg40H8A9zKSDCQc2VKS6zoYRvYVCvUFEcPYnLb8Xmc0T4s6yoeaeEH2y?= =?us-ascii?Q?gqwF85TGqJ5vn2S9X7duBefELw0tJozAOSSVuuFo/MhMXg2SuEgO+jsZmH1o?= =?us-ascii?Q?WbPN4tSDmv9Jj4UEbq+AIZDYy/dwzgNUIy71CwSjziNA3Oz95cEyZzuzyjqN?= =?us-ascii?Q?OQtK5gchY0ud8Yyd+ljptkksEpI7pkamo/e2QpFJ+G9PkMYfBSJj+CuVZ25h?= =?us-ascii?Q?Uj9snpaA0GlymDtGldw+cXkCirHeSS0X5txgurYV6M5d0ZYrQ4zXwGYlsDT8?= =?us-ascii?Q?uwXfQuxd7MhzhFimeMlRPZpOPUOAK0Piwb6DU2v/Pv5hTIrvOMFzSQscBFok?= =?us-ascii?Q?WKyHXFKZ5yNy1QqkFt4Y2VCF5KL7tHX23g0PlWuym9wJW8m4KiuaqXUrY5WU?= =?us-ascii?Q?ctHdDM/YtCv1444YTe9YbuLvv0q71UNcwQvffYd2+OpSDtB1NJVgq/jDdt8p?= =?us-ascii?Q?8OZjjbE8zSR3f5zEqTGUVpjxng2mzibJEDmwAN/ggJkCOYbFg3iiqHFKoisC?= =?us-ascii?Q?OrUBrDMr2n++ZbOAemLz9fdxhXcHOIHKOACkAhanUEOF9KCVMlGWqFiO7CEp?= =?us-ascii?Q?ONgRjeBmsmTZMmSjaGbhE8EJ0G0UWh+LanDcUZ1Uu4wvO6b4Ve7BmKm/FIVA?= =?us-ascii?Q?UWByuXgtYxrdvqOuYhgsjf+IoxHOCdsB9egzVAagKnaYNALAoy9xK2wpdJfk?= =?us-ascii?Q?sATUB1dradYfx/y2+KCgGHGfuBm1yajFzf+GJdNZvMNImdje8/Yb/GnKPzeK?= =?us-ascii?Q?MgroLnx94j1qObBMEzOTG8z1oCki7MDtpMtzpLxWRlxX9mmcmpS2bOlgVcZt?= =?us-ascii?Q?nGbkL1PGUgfxopnPxw46MYZK21r4wN227UieWxDxBQjsTy7ip5vMNilc2hq9?= =?us-ascii?Q?/Mq/Ktz8DeOzw8H6P8gjdnMCcmspY4eHRlQbvJu47CuX769KXeeKAOTL2Zjd?= =?us-ascii?Q?L/YyrfAXkjVI6pKAwhAQ4O04h5FHqXf/oMACgnxKtP7YW4oEwqevgTPn0icD?= =?us-ascii?Q?u+ZrXG0j0c4z6x6SRPc6ym6IR08L5SsR2+doE6GBTOYX8Fqoz2Kw1gqtUNHS?= =?us-ascii?Q?Szr6YgQZ+OsEtL7EGyls2DkeXqTS2lPqPxRjZ3SBS0iunHB3HFzeUj9/nIGE?= =?us-ascii?Q?ysPWAFi8wWaXJUx6vBrKW8a+mYq4EwxgivaZlo1cRk4XHe/rgUdbyczQxvQx?= =?us-ascii?Q?QIx2uubcPXESuWDjAuW8nTKQ?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: BN9PR11MB5483.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 79e8754e-4651-4017-1ef2-08d947a3e6d4 X-MS-Exchange-CrossTenant-originalarrivaltime: 15 Jul 2021 15:19:12.6572 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 6RIXhV4mnIrq5CljCAax+7TyPenvUYQ7z0pEsxEeRnhfO44rae92XX0vcMJ4gbA56TbgeDDO9QWjIpXNkNmmBA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN9PR11MB5498 Return-Path: chasel.chiu@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Patch pushed: cac83b6f3bfa361bb2c561675c3247ff88341067 Thanks, Chasel > -----Original Message----- > From: Loo, Tung Lun > Sent: Tuesday, July 13, 2021 8:12 AM > To: devel@edk2.groups.io > Cc: Loo, Tung Lun ; Ma, Maurice > ; Desimone, Nathaniel L > ; Zeng, Star ; Chiu, > Chasel > Subject: [PATCH v2] IntelFsp2Pkg: Add search function for Config Editor >=20 > BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3D3482 >=20 > This patch adds a search function in the Config Editor GUI at the top rig= ht corner. > Once users key in the words to search, it will look for the option contai= ning the > string in the same page and display it. It also includes a README for thi= s function. >=20 > Cc: Maurice Ma > Cc: Nate DeSimone > Cc: Star Zeng > Cc: Chasel Chiu > Signed-off-by: Loo Tung Lun > --- > IntelFsp2Pkg/Tools/ConfigEditor/ConfigEditor.py | 41 > +++++++++++++++++++++++++++++++++++++++-- > IntelFsp2Pkg/Tools/ConfigEditor/GenYamlCfg.py | 44 > +++++++++++++++++++++++++++++++++----------- > IntelFsp2Pkg/Tools/UserManuals/ConfigEditorUserManual.md | 4 ++++ > 3 files changed, 76 insertions(+), 13 deletions(-) >=20 > diff --git a/IntelFsp2Pkg/Tools/ConfigEditor/ConfigEditor.py > b/IntelFsp2Pkg/Tools/ConfigEditor/ConfigEditor.py > index a7f79bbc96..008c7d7a16 100644 > --- a/IntelFsp2Pkg/Tools/ConfigEditor/ConfigEditor.py > +++ b/IntelFsp2Pkg/Tools/ConfigEditor/ConfigEditor.py > @@ -811,6 +811,8 @@ class application(tkinter.Frame): > self.org_cfg_data_bin =3D None self.in_left =3D state() = self.in_right =3D > state()+ self.search_text =3D ''+ self.binseg_dict =3D {} = # Check if current > directory contains a file with a .yaml extension # if not default= self.last_dir > to a Platform directory where it is@@ -835,6 +837,23 @@ class > application(tkinter.Frame): > root.geometry("1200x800") + # Search string+ fram= =3D > tkinter.Frame(root)+ # adding label to search box+ tkinter.= Label(fram, > text=3D'Text to find:').pack(side=3Dtkinter.LEFT)+ # adding of sin= gle line text box+ > self.edit =3D tkinter.Entry(fram, width=3D30)+ # positioning of te= xt box+ > self.edit.pack(+ side=3Dtkinter.LEFT, fill=3Dtkinter.BOTH, exp= and=3D1, padx=3D(4, > 4))+ # setting focus+ self.edit.focus_set()+ # addin= g of search > button+ butt =3D tkinter.Button(fram, text=3D'Search', relief=3Dtk= inter.GROOVE,+ > command=3Dself.search_bar)+ butt.pack(side=3Dtkinter.RIGHT, padx= =3D(4, 4))+ > fram.pack(side=3Dtkinter.TOP, anchor=3Dtkinter.SE)+ paned =3D > ttk.Panedwindow(root, orient=3Dtkinter.HORIZONTAL) > paned.pack(fill=3Dtkinter.BOTH, expand=3DTrue, padx=3D(4, 4)) @@ -943,6 += 962,12 > @@ class application(tkinter.Frame): > "Unsupported file '%s' !" % path) = return + def > search_bar(self):+ # get data from text box+ self.search_te= xt =3D > self.edit.get()+ # Clear the page and update it according to searc= h value+ > self.refresh_config_data_page()+ def set_object_name(self, widget, na= me): > self.conf_list[id(widget)] =3D name @@ -976,14 +1001,18 @@ class > application(tkinter.Frame): > 'units') def update_v= isibility_for_widget(self, widget, > args):- visible =3D True item =3D > self.get_config_data_item_from_widget(widget, True) if item is No= ne: > return visible elif not item: return visible-+ = if > self.cfg_data_obj.binseg_dict:+ str_split =3D item['path'].spl= it('.')+ if > self.cfg_data_obj.binseg_dict[str_split[-2]] =3D=3D -1:+ v= isible =3D False+ > widget.grid_remove()+ return visible result =3D 1 = if > item['condition']: result =3D self.evaluate_condition(item)@@= -999,6 > +1028,12 @@ class application(tkinter.Frame): > widget.grid() widget.configure(state=3D'= normal') + if visible > and self.search_text !=3D '':+ name =3D item['name']+ = if > name.lower().find(self.search_text.lower()) =3D=3D -1:+ vi= sible =3D False+ > widget.grid_remove()+ return visible def > update_widgets_visibility_on_page(self):@@ -1134,6 +1169,7 @@ class > application(tkinter.Frame): > self.fsp_version =3D '2.X' else: self.fs= p_version =3D '1.X'+ > return gen_cfg_data def about(self):@@ -1377,6 +1413,7 @@ class > application(tkinter.Frame): > return None else: path =3D name+ = item =3D > self.cfg_data_obj.get_item_by_path(path) return item diff --git > a/IntelFsp2Pkg/Tools/ConfigEditor/GenYamlCfg.py > b/IntelFsp2Pkg/Tools/ConfigEditor/GenYamlCfg.py > index 25fd9c547e..611a9a9c72 100644 > --- a/IntelFsp2Pkg/Tools/ConfigEditor/GenYamlCfg.py > +++ b/IntelFsp2Pkg/Tools/ConfigEditor/GenYamlCfg.py > @@ -583,6 +583,8 @@ class CGenYamlCfg: > self._mode =3D '' self._debug =3D False self._ma= cro_dict =3D {}+ > self.bin_offset =3D []+ self.binseg_dict =3D {} self.initi= alize() def > initialize(self):@@ -1301,10 +1303,15 @@ option format '%s' !" % option) > if 'indx' not in cfgs: return ac= t_cfg =3D > self.get_item_by_index(cfgs['indx'])- if force or act_cfg['val= ue'] =3D=3D '':+ > actual_offset =3D act_cfg['offset'] - struct_info['offset']+ s= et_value =3D True+ > for each in self.bin_offset:+ if actual_offset in range(ea= ch[0], (each[0] + > each[2]) * 8):+ if each[1] < 0:+ = set_value =3D False+ if > set_value and force or act_cfg['value'] =3D=3D '': value = =3D > get_bits_from_bytes(full_bytes,- = act_cfg['offset'] -- > struct_info['offset'],+ actual= _offset, > act_cfg['length']) act_val =3D act_cfg['value'] = if act_val =3D=3D '':@@ > -1423,9 +1430,11 @@ for '%s' !" % (act_cfg['value'], act_cfg['path'])) > "in binary, the 1st instance will be used = !" % > seg[0]) bin_segs.append([seg[0], pos, seg[2]])+ > self.binseg_dict[seg[0]] =3D pos else:- raise = Exception("Could not > find '%s' in binary !"- % seg[0])+ > bin_segs.append([seg[0], -1, seg[2]])+ self.binseg_dict[se= g[0]] =3D -1+ > continue return bin_segs @@ -1433,8 +1442,17 @@ for '%s' !" % > (act_cfg['value'], act_cfg['path'])) > # get cfg bin length cfg_bins =3D bytearray() bi= n_segs =3D > self.get_bin_segment(bin_data)+ Dummy_offset =3D 0 for eac= h in > bin_segs:- cfg_bins.extend(bin_data[each[1]:each[1] + each[2]]= )+ if > each[1] !=3D -1:+ self.bin_offset.append([Dummy_offset, ea= ch[1], > each[2]])+ cfg_bins.extend(bin_data[each[1]:each[1] + each= [2]])+ > else:+ string =3D each[0] + ' is not availabe.'+ > messagebox.showinfo('', string)+ > self.bin_offset.append([Dummy_offset, each[1], each[2]])+ > cfg_bins.extend(bytearray(each[2]))+ Dummy_offset +=3D each[2] > return cfg_bins def save_current_to_bin(self):@@ -1447,12 +1465,15 @= @ > for '%s' !" % (act_cfg['value'], act_cfg['path'])) > cfg_off =3D 0 for each in bin_segs: length = =3D each[2]- > bin_data[each[1]:each[1] + length] =3D cfg_bins[cfg_off:- > cfg_off- + lengt= h]- cfg_off +=3D length- > print('Patched the loaded binary successfully !')+ if each[1] = !=3D -1:+ > bin_data[each[1]:each[1] + length] =3D cfg_bins[cfg_off:+ > cfg_off+ + l= ength]+ cfg_off +=3D length+ > else:+ cfg_off +=3D length + print('Patched the loa= ded binary > successfully !') return bin_data def load_default_from_bin(s= elf, > bin_data):@@ -1469,6 +1490,7 @@ for '%s' !" % (act_cfg['value'], > act_cfg['path'])) > if not top: raise Exception("Invalid configu= ration path '%s' !" > % path)+ return self.get_field_value(top) def generate_binar= y(self, > bin_file_name, path=3D''):diff --git > a/IntelFsp2Pkg/Tools/UserManuals/ConfigEditorUserManual.md > b/IntelFsp2Pkg/Tools/UserManuals/ConfigEditorUserManual.md > index 08a815133c..da21df2432 100644 > --- a/IntelFsp2Pkg/Tools/UserManuals/ConfigEditorUserManual.md > +++ b/IntelFsp2Pkg/Tools/UserManuals/ConfigEditorUserManual.md > @@ -40,6 +40,10 @@ This option generates a new configuration delta file f= or > the newly changed value > ## 8. Save Full Config Data to Delta File This option saves all the chan= ged > configuration values into a Delta file. +## 9. Search feature+This featur= e helps > the user to easily find any configuration item they are looking for in > ConfigEditor.+A text search box is available on the Top Right Corner of > ConfigEditor. To use this feature the user should type the name or a key = word of > the item they want to search in the text box and then click on the "Searc= h" > button. This will display all the items which contains that particular wo= rd > searched by the user.+ ## Running Configuration Editor: **python > ConfigEditor.py**-- > 2.28.0.windows.1