CN106484491B - 云编译方法及系统 - Google Patents

云编译方法及系统 Download PDF

Info

Publication number
CN106484491B
CN106484491B CN201610881976.3A CN201610881976A CN106484491B CN 106484491 B CN106484491 B CN 106484491B CN 201610881976 A CN201610881976 A CN 201610881976A CN 106484491 B CN106484491 B CN 106484491B
Authority
CN
China
Prior art keywords
configuration item
demand information
item demand
program code
information
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201610881976.3A
Other languages
English (en)
Other versions
CN106484491A (zh
Inventor
陈铭
吴华山
张红平
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Guangzhou Shiyuan Electronics Thecnology Co Ltd
Original Assignee
Guangzhou Shiyuan Electronics Thecnology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Guangzhou Shiyuan Electronics Thecnology Co Ltd filed Critical Guangzhou Shiyuan Electronics Thecnology Co Ltd
Priority to CN201610881976.3A priority Critical patent/CN106484491B/zh
Publication of CN106484491A publication Critical patent/CN106484491A/zh
Application granted granted Critical
Publication of CN106484491B publication Critical patent/CN106484491B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation

Abstract

本发明实施例公开了一种云编译方法及系统,所述方法包括:获取配置项需求信息;根据所述配置项需求信息获取对应的程序代码,所述程序代码中包括与所述配置项需求信息对应的若干函数;如果若干所述函数允许执行,则将所述配置项需求信息作为函数参数发送给所述程序代码;获取所述程序代码中的若干所述函数解析对应的函数参数得到的返回值信息;根据所述返回值信息更新所述配置项需求信息,并根据更新后的配置项需求信息进行编译。本发明实施例能够避免配置项需求信息相互关联,其中关联关系高度依赖代码,从而需要根据具体代码分析配置项需求信息后更新配置项需求信息的情况,可以通过更新编译订单的方式实现云编译,有利于系统的实现和维护。

Description

云编译方法及系统
技术领域
本发明实施例涉及计算机技术领域,尤其涉及一种云编译方法及系统。
背景技术
云编译系统是一种自动编译系统,用户可以在云编译客户端按照指定的配置项提交需求配置后云编译系统自动调用程序代码编译出对应的软件。由于云编译客户端只能做简单的功能选配,云编译系统在接收到客户端的配置需求后需要进行统一提前规划通用且规定的数据处理,所进行的数据处理都需要进行预先的设置,极大的增加了云编译系统与程序代码的耦合度,与程序代码没有动态交互,适应性差,如果增加了新的数据处理需求,则要在考虑所有历史代码的基础上,重新进行设置,扩展性差。
发明内容
有鉴于此,本发明提出一种云编译方法及系统,降低了云编译系统与程序代码功能的耦合,有利于系统的维护。
第一方面,本发明实施例提供了一种云编译方法及系统,所述方法包括:获取配置项需求信息;根据所述配置项需求信息获取对应的程序代码,所述程序代码中包括与所述配置项需求信息对应的若干函数;如果若干所述函数允许执行,则将所述配置项需求信息作为函数参数发送给所述程序代码;获取所述程序代码中的若干所述函数解析对应的函数参数得到的返回值信息;根据所述返回值信息更新所述配置项需求信息,并根据更新后的配置项需求信息进行编译。
进一步的,所述方法还包括:如果若干所述函数不允许执行,则根据所述配置项需求信息进行编译。
进一步的,所述根据所述配置项需求信息获取对应的程序代码包括:根据所述配置项需求信息获取编译订单和对应的程序代码。
进一步的,所述根据所述返回值信息更新所述配置项需求信息,并根据更新后的配置项需求信息进行编译包括:根据所述返回值信息更新所述编译订单;根据更新后的编译订单进行编译。
进一步的,所述函数参数中包括参数名称和参数内容。
进一步的,同一个函数中的各参数名称不同。
第二方面,本发明实施例提供了一种云编译系统,所述系统包括:信息单元,用于获取配置项需求信息;代码单元,与所述信息单元相连,用于根据所述配置项需求信息获取对应的程序代码,所述程序代码中包括与所述配置项需求信息对应的若干函数;更新单元,与所述代码单元相连,用于如果若干所述函数允许执行,则将所述配置项需求信息作为函数参数发送给所述程序代码;并获取所述程序代码中的若干所述函数解析对应的函数参数得到的返回值信息;编译单元,与所述更新单元相连,用于根据所述返回值信息更新所述配置项需求信息,并根据更新后的配置项需求信息进行编译。
进一步的,所述编译单元还与所述代码单元相连,用于如果若干所述函数不允许执行,则根据所述配置项需求信息进行编译。
进一步的,所述代码单元还用于根据所述配置项需求信息获取编译订单。
进一步的,所述更新单元具体用于根据所述返回值信息更新所述编译订单;所述编译单元具体用于根据更新后的编译订单进行编译。
进一步的,所述函数参数中包括参数名称和参数内容。
进一步的,同一个函数中的各参数名称不同。
本发明实施例通过获取配置项需求信息对应的程序代码,通过注册函数的方式确定对于某一套程序代码是否需要执行某项交互工作。根据函数解析得到的返回值更新配置项信息,根据更新后的配置项需求信息进行编译。降低了云编译系统和程序代码的耦合,可以适配代码的差异化的交互要求,有利于系统的维护。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
图1是本发明实施例一中的一种云编译方法的流程图;
图2是本发明实施例二中的一种云编译方法的流程图;
图3是本发明实施例三中的一种云编译系统的结构图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部内容。另外还需要说明的是,为了便于说明,以下实施例中示出了与本发明相关的示例,这些示例仅作为说明本发明实施例的原理所用,并不作为对本发明实施例的限定,同时,这些示例的具体数值会根据不同的应用环境和装置或者组件的参数不同而不同。
本发明实施例的云编译方法及系统可以运行于安装有Windows(微软公司开发的操作系统平台)、Android(谷歌公司开发的用于便携式可移动智能设备的操作系统平台)、iOS(苹果公司开发的用于便携式可移动智能设备的操作系统平台)、Windows Phone(微软公司开发的用于便携式可移动智能设备的操作系统平台)等操作系统的终端中,该终端可以是台式机、笔记本电脑、移动电话、掌上电脑、平板电脑、数码相机、数码摄像机等等中的任意一种。
实施例一
图1是本发明实施例一中的一种云编译的处理方法及系统,该方法用于实现对项目代码的云编译,该方法可以由具有云编译功能的系统来执行,该系统可以由软件和/或硬件方式实现,例如典型的是用户终端设备,例如手机、电脑等。本实施例中的云编译方法包括:步骤S110、步骤S120、步骤S130、步骤S140和步骤S150。
步骤S110,获取配置项需求信息。
具体的,配置项(Configuration Items,CI)指不定期用于配置管理过程中作为单个实体对待的硬件集合、软件集合或硬软件集合。配置项分为两种,属于产品组成部分的工作成果;项目管理和机构支撑过程产生的文档。不同状态的配置项要在不同的区域中进行管理,区域可以与配置项的状态对应,同时也可以有效的控制访问的级别,可以根据实际实用的配置管理工具设计更多的区域以细化管理。获取配置项需求信息,可选的,该需求信息包括:源代码、需求文档、设计文档和测试用例等相关参数。每个配置项的主要属性有:名称、标识符、文件状态、版本、作者和日期等。所有配置项都被保存在配置库里,确保不会混淆。
步骤S120,根据所述配置项需求信息获取对应的程序代码,所述程序代码中包括与所述配置项需求信息对应的若干函数。
相应的,具体的配置项需求信息都有与其对应的程序代码,获取该对应的程序代码,该程序代码中包括与配置项需求信息对应的若干函数,该若干函数与配置项需求信息相匹配,表征了用户对具体配置项的特定需求。通过函数注册机制,预先设定满足条件的函数注册表,通过文件传递参数,每个函数携带统一的参数,可选的,该参数可以是参数文件路径和/或返回值文件路径,参数文件存储位置目录为参数文件路径,返回值文件存储位置目录为返回值文件路径。
步骤S130,如果若干所述函数允许执行,则将所述配置项需求信息作为函数参数发送给所述程序代码。
具体的,将所述函数与系统中的用户预先设定的函数注册表进行匹配,当若干所述函数隶属于函数注册表,该若干函数允许被执行,即允许该若干函数进行信息交互,则将所述配置项需求信息作为函数参数发送给所述程序代码。可选的,将配置项需求信息中的参数按统一的格式写入参数文件,将参数文件和返回值路径作为函数参数,参数的信息存储在参数文件中,并将该函数参数发送给所述程序代码。通过对文件格式的处理来获得统一规范,方便云编译系统使用和管理。
步骤S140,获取所述程序代码中的若干所述函数解析对应的函数参数得到的返回值信息。
具体的,通过程序代码解析参数文件中的内容,根据解析结果,程序代码作相应的逻辑分析和处理,按规定的文件格式将处理结果写入返回值文件,得到返回值信息。优选的,文件格式可以是:“参数名称:参数内容:END”,例如关键字可以是PWM/BOARD,系统规划统一定义。
步骤S150,根据所述返回值信息更新所述配置项需求信息,并根据更新后的配置项需求信息进行编译。
具体的,随着用户需求的不断增加,当配置项需求信息不能满足用户要求时,需要根据用户的需求得到对应的返回值信息,编译系统解析返回值文件内容,根据返回值更新配置项需求信息,并根据更新后的配置项需求信息进行编译,以满足用户需求。
以下举例说明本实施例的一种应用场景,型号为PC821的板卡可以适配多种芯片,而芯片决定版型(BOARD)的配置数据,以配置项需求信息为BOARD为例说明配置项需求信息的交互过程。BOARD配置数据可以包括但不限于:(BOARD_ID,ID_BD_TP_HV310_PB821_SUB_CH_A20,ID_BD_TP_HV310_PB821_SUB_CH_A20),如果云编译系统客户选定PC821板型后生成的实际配置数据为:(PC821板型默认BOARD设定为ID_BD_TP_XXCHIPXX_PB821_SUB_CH_A20,系统做设定),其中的生成CHIP数据为(V310),则云编译系统通过执行注册函数将ID_BD_TP_XXCHIPXX_PB821_SUB_CH_A20+V310与代码做交互并返回:
BOARD:ID_BD_TP_HV310_PB821_SUB_CH_A20:END
CHIP:V310:END
其中ID_BD_TP_HV310_PB821_SUB_CH_A20是配置订单的关键参数,V310用于更改BOARD的参数,并与订单的编译代码无关。配置项需求信息为内存配置,例如包括但不限于+BOARD/脉冲宽度调制(Pulse Width Modulation,PWM)数值+PWM模式等的交互原理与配置项需求信息为版型的交互原理相同,在此不再赘述。
优选的,所述函数参数中包括参数名称和参数内容。
具体的,函数参数中包括参数名称和参数内容,格式可以是,“参数名称:参数内容:END”。可选的,参数名称可以是“PWM/BOARD”。
优选的,同一个函数中的各参数名称不同。
具体的,各函数中,不同函数中的参数名称可以相同,且相互独立;同一个函数中的各参数名称不同。
例如A函数中可以有如下参数(或关键词)PWM和BOARD:
PWM:45:END、
BOARD:ID_BD_TP_HV310_PB801_SUB_CH_A20:END。
B函数也可以有如下参数DDR:和BOARD:
DDR:512M:END
BOARD:ID_BD_TP_HV510_PB821_SUB_CH_A20:END。
以上A/B函数都可以定义BOARD关键词
但是A中不能如下格式(两个DDR):两个不同参数类型,不能使用同一个关键词(DDR):
DDR:512M:END
DDR:ID_BD_TP_HV310_PB801_SUB_CH_A20:END
本发明实施例通过获取配置项需求信息对应的程序代码,通过注册函数的方式确定对于某一套程序代码是否需要执行某项交互工作。根据函数解析得到的返回值更新配置项信息,根据更新后的配置项需求信息进行编译。降低了云编译系统和程序代码的耦合,可以适配代码的差异化的交互要求,有利于系统的维护。
实施例二
图2是本发明实施例二中的一种云编译的方法的流程图,该实施例是对实施例一中所述云编译方法的补充和对步骤S120和步骤S130的进一步解释。所述云编译方法还包括:如果若干所述函数不允许执行,则根据所述配置项需求信息进行编译;步骤S120中,所述根据所述配置项需求信息获取对应的程序代码包括:根据所述配置项需求信息获取编译订单和对应的程序代码;步骤S130中,所述根据所述返回值信息更新所述配置项需求信息,并根据更新后的配置项需求信息进行编译包括:根据所述返回值信息更新所述编译订单;根据更新后的编译订单进行编译。具体的,本实施例中的云编译方法包括:步骤S210、步骤S220、步骤S2301、步骤S2302、步骤S240、步骤S250和步骤S260。
步骤S210,获取配置项需求信息。
步骤S220,根据所述配置项需求信息获取编译订单和对应的程序代码,所述程序代码中包括与所述配置项需求信息对应的若干函数。
具体的,根据所述配置项需求信息获取编译订单和对应的程序代码,可选的,编译订单可以是根据配置项需求信息生成的一个待处理列表,存储配置项需求信息,表征用户的需求。所述程序代码中包括与所述配置项需求信息对应的若干函数。
步骤S2301,如果若干所述函数允许执行,则将所述配置项需求信息作为函数参数发送给所述程序代码。
步骤S2302,如果若干所述函数不允许执行,则根据所述配置项需求信息进行编译。
具体的,系统中存在用户预先设定的函数注册表,当若干所述函数不属于函数注册表中的函数,即该若干函数不允许被执行,即不能进行信息交互,则直接根据配置项需求信息进行编译。
步骤S240,获取所述程序代码中的若干所述函数解析对应的函数参数得到的返回值信息;
步骤S250,根据所述返回值信息更新所述编译订单。
具体的,根据返回值信息更新配置项需求信息时,首先要根据返回值信息更新编译订单。当若干所述函数允许执行时,则将配置项需求信息作为函数参数发送给所述程序代码。在获取所述程序代码中的若干所述函数解析对应的函数参数得到的返回值信息之后,根据所述返回值信息更新所述编译订单。
步骤S260,根据更新后的编译订单进行编译。
具体的,当根据返回值信息更新编译订单更新后,根据更新后的编译订单进行编译。
本发明实施例通过获取编译订单和配置项需求信息对应的程序代码,根据函数参数的返回值更新编译订单并进行编译。当用户需求发生变化时,无需重新生成需求订单,节约了资源,提高了效率。
实施例三
图3是本发明实施例三中的一种云编译的系统的结构图,该系统适用于执行本发明实施例一至三中提供的云编译方法,该系统具体包括:信息单元310、代码单元320、更新单元330和编译单元340。
信息单元310,用于获取配置项需求信息;
代码单元320,与信息单元310相连,用于根据所述配置项需求信息获取对应的程序代码,所述程序代码中包括与所述配置项需求信息对应的若干函数;
更新单元330,与代码单元320相连,用于如果若干所述函数允许执行,则将所述配置项需求信息作为函数参数发送给所述程序代码;并获取所述程序代码中的若干所述函数解析对应的函数参数得到的返回值信息;
编译单元340,与更新单元330相连,用于根据所述返回值信息更新所述配置项需求信息,并根据更新后的配置项需求信息进行编译。
进一步的,编译单元340还与代码单元320相连,用于如果若干所述函数不允许执行,则根据所述配置项需求信息进行编译。
进一步的,代码单元320还用于根据所述配置项需求信息获取编译订单。
进一步的,更新单元330具体用于根据所述返回值信息更新所述编译订单;编译单元340具体用于根据更新后的编译订单进行编译。
进一步的,所述函数参数中包括参数名称和参数内容。
进一步的,同一个函数中的各参数名称不同。
本发明实施例通过获取配置项需求信息对应的程序代码,通过注册函数的方式确定对于某一套程序代码是否需要执行某项交互工作。根据函数解析得到的返回值更新配置项信息,根据更新后的配置项需求信息进行编译。降低了云编译系统和程序代码的耦合,可以适配代码的差异化的交互要求,有利于系统的维护。
显然,本领域技术人员应该明白,上述产品可执行本发明任意实施例所提供的方法,具备执行方法相应的功能模块和有益效果。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。

Claims (12)

1.一种云编译方法,其特征在于,包括:
获取配置项需求信息;
根据所述配置项需求信息获取对应的程序代码,所述程序代码中包括与所述配置项需求信息对应的若干函数;
如果若干所述函数允许执行,则将所述配置项需求信息作为函数参数发送给所述程序代码;
获取所述程序代码中的若干所述函数解析对应的函数参数得到的返回值信息;
根据所述返回值信息更新所述配置项需求信息,并根据更新后的配置项需求信息进行编译。
2.根据权利要求1所述的云编译方法,其特征在于,还包括:如果若干所述函数不允许执行,则根据所述配置项需求信息进行编译。
3.根据权利要求1所述的云编译方法,其特征在于,所述根据所述配置项需求信息获取对应的程序代码包括:
根据所述配置项需求信息获取编译订单和对应的程序代码。
4.根据权利要求3所述的云编译方法,其特征在于,所述根据所述返回值信息更新所述配置项需求信息,并根据更新后的配置项需求信息进行编译包括:
根据所述返回值信息更新所述编译订单;
根据更新后的编译订单进行编译。
5.根据权利要求1至3任一项所述的云编译方法,其特征在于,所述函数参数中包括参数名称和参数内容。
6.根据权利要求5所述的云编译方法,其特征在于,同一个函数中的各参数名称不同。
7.一种云编译系统,其特征在于,包括:
信息单元,用于获取配置项需求信息;
代码单元,与所述信息单元相连,用于根据所述配置项需求信息获取对应的程序代码,所述程序代码中包括与所述配置项需求信息对应的若干函数;
更新单元,与所述代码单元相连,用于如果若干所述函数允许执行,则将所述配置项需求信息作为函数参数发送给所述程序代码;并获取所述程序代码中的若干所述函数解析对应的函数参数得到的返回值信息;
编译单元,与所述更新单元相连,用于根据所述返回值信息更新所述配置项需求信息,并根据更新后的配置项需求信息进行编译。
8.根据权利要求7所述的云编译系统,其特征在于,所述编译单元还与所述代码单元相连,用于如果若干所述函数不允许执行,则根据所述配置项需求信息进行编译。
9.根据权利要求7所述的云编译系统,其特征在于,所述代码单元还用于根据所述配置项需求信息获取编译订单。
10.根据权利要求9所述的云编译系统,其特征在于,所述更新单元具体用于根据所述返回值信息更新所述编译订单;所述编译单元具体用于根据更新后的编译订单进行编译。
11.根据权利要求7至10任一项所述的云编译系统,其特征在于,所述函数参数中包括参数名称和参数内容。
12.根据权利要求11所述的云编译系统, 其特征在于, 同一个函数中的各参数名称不同。
CN201610881976.3A 2016-10-09 2016-10-09 云编译方法及系统 Active CN106484491B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610881976.3A CN106484491B (zh) 2016-10-09 2016-10-09 云编译方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610881976.3A CN106484491B (zh) 2016-10-09 2016-10-09 云编译方法及系统

Publications (2)

Publication Number Publication Date
CN106484491A CN106484491A (zh) 2017-03-08
CN106484491B true CN106484491B (zh) 2019-07-26

Family

ID=58269364

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610881976.3A Active CN106484491B (zh) 2016-10-09 2016-10-09 云编译方法及系统

Country Status (1)

Country Link
CN (1) CN106484491B (zh)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103677814A (zh) * 2013-11-29 2014-03-26 广州视源电子科技股份有限公司 一种程序获取方法、装置及系统
CN104090779A (zh) * 2014-07-31 2014-10-08 广州视源电子科技股份有限公司 自动配置方法以及云编译系统
CN104090780A (zh) * 2014-07-31 2014-10-08 广州视源电子科技股份有限公司 自动配置方法以及云编译系统
CN104156314A (zh) * 2014-08-14 2014-11-19 北京航空航天大学 一种应用于测试系统的代码重用方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140372993A1 (en) * 2013-06-14 2014-12-18 Microsoft Corporation Overloading on constants

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103677814A (zh) * 2013-11-29 2014-03-26 广州视源电子科技股份有限公司 一种程序获取方法、装置及系统
CN104090779A (zh) * 2014-07-31 2014-10-08 广州视源电子科技股份有限公司 自动配置方法以及云编译系统
CN104090780A (zh) * 2014-07-31 2014-10-08 广州视源电子科技股份有限公司 自动配置方法以及云编译系统
CN104156314A (zh) * 2014-08-14 2014-11-19 北京航空航天大学 一种应用于测试系统的代码重用方法

Also Published As

Publication number Publication date
CN106484491A (zh) 2017-03-08

Similar Documents

Publication Publication Date Title
US10990367B2 (en) Application development method, tool, and device, and storage medium
US11789715B2 (en) Systems and methods for transformation of reporting schema
CN105487864B (zh) 代码自动生成的方法和装置
CN106484394B (zh) 一种双引擎快速软件开发系统
TW202016693A (zh) 人機交互處理系統及其方法、儲存媒體、電子設備
CN109670951B (zh) 一种区块链智能合约调试发布方法及系统
CN105511873B (zh) 用户界面控件展示方法及装置
CN106293664A (zh) 代码生成方法及装置
CN102087594B (zh) 扩展点和插件的管理方法和装置
CN106557314A (zh) 应用软件开发方法及装置
CN105589848A (zh) 对话管理方法和装置
CN115617327A (zh) 低代码页面搭建系统、方法及计算机可读存储介质
CN109240670A (zh) 模块化的软件开发方法、系统、设备及介质
CN108829378A (zh) 一种应用软件的开发方法、装置及电子设备
CN111597484B (zh) 一种ui动态生成方法
CN106446019B (zh) 一种软件功能处理方法和装置
CN102054217B (zh) 基于元模型的工具中的实体变形
CN101604241A (zh) 一种嵌入式系统的代码生成方法
CN109636301A (zh) 金融业务的工作流配置方法、系统、终端及可读存储介质
CN107656729A (zh) 列表视图的更新装置、方法及计算机可读存储介质
US20120078877A1 (en) Multi-source searching in a data driven application
CN109726217A (zh) 一种数据库操作方法、装置、设备及存储介质
CN104133676A (zh) 一种基于脚本的功能执行方法和设备
CN109445845A (zh) 接口调用方法、装置、计算机设备和存储介质
CN114047970A (zh) 一种autosar架构软件的配置方法及系统

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant