CN1963794A - 一种实现设备驱动的系统及方法 - Google Patents

一种实现设备驱动的系统及方法 Download PDF

Info

Publication number
CN1963794A
CN1963794A CN 200610167246 CN200610167246A CN1963794A CN 1963794 A CN1963794 A CN 1963794A CN 200610167246 CN200610167246 CN 200610167246 CN 200610167246 A CN200610167246 A CN 200610167246A CN 1963794 A CN1963794 A CN 1963794A
Authority
CN
China
Prior art keywords
module
drive module
version
interface
version drive
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.)
Granted
Application number
CN 200610167246
Other languages
English (en)
Other versions
CN1963794B (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.)
Vimicro Corp
Original Assignee
Vimicro Corp
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 Vimicro Corp filed Critical Vimicro Corp
Priority to CN2006101672463A priority Critical patent/CN1963794B/zh
Publication of CN1963794A publication Critical patent/CN1963794A/zh
Application granted granted Critical
Publication of CN1963794B publication Critical patent/CN1963794B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Stored Programmes (AREA)

Abstract

本发明公开了一种实现设备驱动的系统,包括:接口模块、管理模块和至少一个版本驱动模块,其中,管理模块,用于管理版本驱动模块;提取版本驱动模块;版本驱动模块,用于当被管理模块提取时,通过接口模块提供的统一接口对所属版本设备进行驱动;接口模块,用于为版本驱动模块提供统一的接口。此外,本发明还公开了一种实现设备驱动的方法。能够提高可维护性,并降低代码耦合性。

Description

一种实现设备驱动的系统及方法
技术领域
本发明涉及设备的驱动技术,尤其涉及一种实现设备驱动的系统及方法。
背景技术
随着技术的发展以及应用的需要,针对一类产品或设备通常有不同版本的驱动模块来驱动不同版本的设备。其中,每个驱动模块包括多个用于控制驱动的控制组件,这些不同版本的控制组件的功能相同或相近,只是各自的接口不同。
当出现新版本的设备时,需要对设备驱动进行升级。现有技术中,由于各版本设备的控制组件接口不同,因此,为了实现对新版本设备的驱动,需要在原设备驱动的基础上添加判断分支,根据该判断分支,找到该版本设备的驱动模块,通过该版本设备的驱动模块中各控制组件接口,实现对新版本设备的驱动。
可见,现有技术中,每出现一个新版本设备,便添加一个判断分支,当不同版本的设备越多时,判断分支也越多,造成结构庞大,不易管理。并且由于不同版本的控制组件的功能相同或相近,因此不同判断分支中控制组件的代码也相同或相近,不同控制组件之间存在很大的代码耦合性,当需要修改某个功能特性时,所有版本驱动模块的控制组件都需要进行修改,可维护性较差,且实现复杂。
发明内容
有鉴于此,本发明一方面提供一种实现设备驱动的系统;另一方面提供一种实现设备驱动的方法。能够提高可维护性,且实现简单。
本发明所提供的实现设备驱动的系统,包括:接口模块、管理模块和至少一个版本驱动模块,其中,
管理模块,用于管理版本驱动模块;提取版本驱动模块;
版本驱动模块,用于当被管理模块提取时,通过接口模块提供的统一接口对所属版本设备进行驱动;
接口模块,用于为版本驱动模块提供统一的接口。
其中,所述管理模块包括:添加子模块、创建子模块、存储子模块和提取子模块,其中,
添加子模块,用于在存储子模块中添加需要创建的版本驱动模块的编号和创建位置信息;
创建子模块,用于根据从存储子模块中获取的版本驱动模块的编号和创建位置信息,创建版本驱动模块,将创建后的版本驱动模块发送给存储子模块;
存储子模块,用于存储版本驱动模块的编号、创建位置信息以及所创建的版本驱动模块本身;
提取子模块,用于根据版本驱动模块的编号,从存储子模块中提取该版本驱动模块。
较佳地,所述管理模块进一步包括:删除子模块,用于移除存储子模块中存储的版本驱动模块的编号、创建位置信息以及所创建的版本驱动模块本身。
本发明所提供的实现设备驱动的方法,包括:
设置可提供统一接口的接口模块;
设置采用接口模块提供的统一接口对所属版本设备进行驱动的版本驱动模块;
提取所设置的版本驱动模块,由提取的版本驱动模块通过所述统一接口对所属版本设备进行驱动。
其中,所述设置版本驱动模块包括:对版本驱动模块进行添加和创建。
较佳地,该方法进一步包括:对版本驱动模块进行删除。
其中,所述对版本驱动模块进行添加为:添加需要创建的版本驱动模块的编号和创建位置信息;
所述对版本驱动模块进行创建为:根据所添加的版本驱动模块的编号和创建位置信息,创建版本驱动模块,将创建后的版本驱动模块进行存储。
较佳地,该方法进一步包括:删除所存储的版本驱动模块的编号、创建位置信息以及所创建的版本驱动模块本身。
其中,所述提取版本驱动模块具体为:根据版本驱动模块的编号,提取该版本驱动模块。
上述方法中,若存在已有接口,则所述设置采用接口模块提供的统一接口对所属版本设备进行驱动的版本驱动模块为:设置采用接口模块提供的统一接口对所属版本设备进行驱动,以及通过接口模块提供的统一接口采用已有接口对所属版本设备进行驱动的设备驱动模块。
从上述方案可以看出,本发明通过设置统一的接口模块和采用该接口模块对所属版本设备进行驱动的版本驱动模块,使得所有版本驱动模块都使用相同的接口;通过对版本驱动模块进行管理,提取所需的版本驱动模块,由所提取的版本驱动模块通过接口模块提供的统一接口对所属版本设备进行驱动,使得实现设备驱动时,无需通过判断分支进行选择,不仅使结构精简,大大降低了代码的耦合性,而且实现简单,可维护性强。
此外,通过设置统一接口,并对版本驱动模块进行集中管理,从而最大限度的减少了对原有驱动代码的修改,减少了产生错误(如BUG)的几率和回归测试量。
附图说明
图1为本发明实施例中实现设备驱动的系统结构示意图;
图2为图1所示系统中管理模块的内部结构示意图;
图3为本发明实施例中实现设备驱动的方法流程图。
具体实施方式
本发明的基本思想是:设置统一的接口模块和采用该接口模块对所属版本设备进行驱动的版本驱动模块;对版本驱动模块进行集中管理,提取所需的版本驱动模块,由所提取的版本驱动模块通过接口模块提供的统一接口对所属版本设备进行驱动。
具体实现时,可设置管理模块,并将版本驱动模块存储在管理模块中设置的存储子模块中,由管理模块对版本驱动模块进行集中管理,并根据需要提取所需的版本驱动模块。
为使本发明的目的、技术方案和优点更加清楚明白,下面结合实施例和附图,对本发明进一步详细说明。
参见图1,图1为本发明实施例中实现设备驱动的系统结构示意图。如图1所示,该系统包括:管理模块、接口模块、至少一个版本驱动模块和对应数量的版本设备,如图中的版本驱动模块1,......,版本驱动模块n,以及版本设备1,......,版本设备n。
其中,管理模块用于管理版本驱动模块,根据需要提取所需的版本驱动模块。
版本驱动模块,用于当被管理模块提取时,通过接口模块提供的统一接口对所属版本设备进行驱动。
接口模块,用于为版本驱动模块提供统一的接口。
具体实现时,可将版本驱动模块存储在管理模块的存储模块中,如图2所示,图2为图1所示系统中管理模块的内部结构示意图。其中,管理模块包括:添加子模块、删除子模块、创建子模块、存储子模块和提取子模块。
其中,添加子模块,用于在存储子模块中添加需要创建的版本驱动模块的编号和创建位置信息。
创建子模块,用于根据从存储子模块中获取的版本驱动模块的编号和创建位置信息,创建版本驱动模块,将创建后的版本驱动模块发送给存储子模块。
存储子模块,用于存储版本驱动模块的编号、创建位置信息以及所创建的版本驱动模块本身。
删除子模块,用于移除存储子模块中存储的版本驱动模块的编号、创建位置信息以及所创建的版本驱动模块本身。
提取子模块,用于根据版本驱动模块的编号,从存储子模块中提取该版本驱动模块。
上述系统中,根据需要,也可以去掉其中的删除子模块。
以上对本发明实施例中实现设备驱动的系统进行了详细描述,下面再对本发明实施例中实现设备驱动的方法进行详细描述。
参见图3,图3为本发明实施例中基于图1所示系统的实现设备驱动的方法流程图。如图3所示,该流程包括如下步骤:
步骤301,设置可提供统一接口的接口模块。
本步骤中,设置为版本驱动模块提供统一接口的接口模块。具体实现时,可利用C++的模板机制,定义一个提供统一接口的基类来实现接口模块的功能。并且基类中可包括实现统一功能的接口函数,该接口函数只提供接口,不实现具体功能。
例如:假设统一的功能接口为读寄存器和写寄存器等,则可设置如下基类:
classCVMInerface{
public:
     ReadRegister()=0;
     WriterRegister()=0;
};
其中,CVMInerface为基类名称,ReadRegister()=0为读寄存器接口函数;WriterRegister()=0为写寄存器接口函数。上述接口函数只提供了接口,没有具体实现功能。
步骤302,定义采用接口模块提供的统一接口对所属版本设备进行驱动的版本驱动模块。
本步骤中,定义采用统一的接口模块提供的统一接口对所属版本设备进行驱动的版本驱动模块。具体实现时,若利用C++的模板机制,则可通过定义继承步骤301中的基类的子类,来实现采用统一接口模块的版本驱动模块的定义。并且由于基类只提供了接口函数的接口,没有具体实现功能,因此在版本驱动模块,即继承自基类的子类中应该添加具体实现过程,以实现不同版本驱动模块驱动不同版本设备的目的,此外还需要在每个版本驱动模块中添加一个统一的创建函数,以便使用该统一的创建函数接口创建不同的版本驱动模块本身。
例如:基于步骤301中的基类CVMInerface,即接口模块,可设置如下的子类,即版本驱动模块:
class CVM321:public CVMInerface
{
public:
      static CVMInerface*Creater();
      ReadRegister()
      {
      ...
      };
      WriterRegister()
      {
      ...
       };
};
其中,CVM321为子类名称,static CVMInerface*Creater()为创建函数。
步骤303,对版本驱动模块进行集中管理,根据需要提取所需的版本驱动模块,由提取的版本驱动模块通过接口模块提供的统一接口对所属版本设备进行驱动。
本步骤中,集中管理包括对版本驱动模块进行添加、创建等设置操作,进一步地,还可以包括对版本驱动模块进行删除等操作。其中,在步骤302中完成对版本驱动模块的定义之后,由本步骤中对版本驱动模块的添加和创建,完成对采用接口模块提供的统一接口对所属版本设备进行驱动的版本驱动模块的设置。
为了对版本驱动模块进行集中管理,以及根据需要提取所需版本驱动模块,可按照图1所示的系统设置一个管理模块,由管理模块实现对版本驱动模块进行集中管理,以及根据需要提取所需的版本驱动模块。具体实现时,可在管理模块中设置添加子模块、创建子模块、存储子模块和提取子模块。其中,需要注册新加的版本驱动模式时,由添加子模块在存储子模块中添加需要创建的版本驱动模块的编号和创建位置信息;需要创建新加的版本驱动模块时,由创建子模块根据所添加的版本驱动模块的编号和创建位置信息,创建版本驱动模块,将创建后的版本驱动模块存储在存储子模块中;需要提取版本驱动模块时,由提取子模块根据版本驱动模块的编号,从存储子模块中提取该版本驱动模块。
此外,包括删除操作时,还可以在管理模块中设置删除子模块,当需要删除已有的版本驱动模式时,由删除子模块移除存储子模块中存储的版本驱动模块的编号、创建位置信息以及所创建的版本驱动模块本身。
实际应用中,可利用C++的模板机制,定义一个工厂类来实现管理模块,并且通过在工厂类中设置添加函数来实现添加子模块,设置创建函数来实现创建子模块,设置提取函数来实现提取子模块,设置子类池来实现存储子模块,并进一步可设置删除函数来实现删除子模块。
例如,可设置如下的工厂类,即管理模块:
class CFactory
{
public:
     BOOL Add(ClassID &Id,ClassCreator creator)
     {
        return ClassPool.insert(ClassMap::value_type(Id,creator)).second;
       }
       BOOL Remove(ClassID &Id)
       {
         return ClassPool.erase(Id);
        }
        BaseClass*Create(const ClassID &Id)
         {    ClassMap::const_iterator i=ClassPool.find(Id)
              {
                   If(ClassPool.end()!=i)
                   {
                       return(i->second)();
                    }
                }
          }
private:
       typedef std::map<ClassID,ClassCreator>ClassMap;
       ClassMap ClassPool;
};
其中,CFactory为工厂类名,ClassMap为子类池名,Id为版本驱动模块(步骤302中的子类)的编号,creator为版本驱动模块(步骤302中的子类)的创建位置信息,即步骤302中子类的创建函数指针。
其中,BOOL Add(ClassID &Id,ClassCreator creator)为添加函数,BOOLRemove(ClassID & Id)为删除函数,Create(const ClassID &Id)为创建函数,同时也实现了提取函数的功能,即Create(const ClassID &Id)实现了创建模块和提取模块的功能。
在实现由版本驱动模块通过所设置的接口模块对所属版本设备进行驱动时,可通过调用创建函数来提取所需的版本驱动模块,由所提取的驱动模块实现对所属版本设备的驱动。
例如:对于利用C++模板机制建立的工厂类、基类和子类来说,以实现读取版本设备的寄存器为例,则可通过如下的过程来实现:
P=CFactory::Create(Id);
P->ReadRegister();
以上对本发明实施例中实现设备驱动的方法进行了详细描述,其中,以利于C++模板机制为例,列举了其中的一种具体实现方法。此外,针对本发明实施例中的方法,还可以有其它的具体实现方法,并且具体实现时,也不限于图3所示流程中描述的各个模块,还可以是其它的功能模块,或者是其它的实现方法。本领域的技术人员可根据实际需要,采取相应的具体实现方法。
其中,若设备驱动中存在已有接口,则为了与已有接口进行兼容,图3所示方法流程的步骤302中,在设置采用接口模块提供的统一接口对所属版本设备进行驱动的版本驱动模块时,可设置为:采用接口模块提供的统一接口对所属版本设备进行驱动,以及通过接口模块提供的统一接口采用已有接口对所属版本设备进行驱动的设备驱动模块。若仍以C++模板机制为例,则步骤302中的子类,可设置为:
class CVM321:public CVMInerface,public CVMContrl321
{
public:
      static CVMInerface*Creater();
      ReadRegister();
      WriterRegister();
};
其中,CVMContrl321为已有接口的名称,即子类CVM321同时继承基类和已有接口,从而实现将已有接口匹配到统一的调用接口,即接口模块(基类),避免了现有技术中由于已有接口不同,而必须添加判断分支的情况。
例如,假设有两个已有接口,接口一(VM321)和接口二(VM323),且分别包括:接口一读寄存器和接口二读寄存器。由于接口名称的不同,在按现有技术中的方法实现时,必须添加条件判断,即:
步骤1,判断接口类型,如果是接口1,调用步骤2,如果是接口2,调用步骤3;
步骤2,调用接口一(VM321)读寄存器;
步骤3,调用接口二(VM323)读寄存器。
而采用本发明实施例中的继承匹配后,则为:
步骤1,生成子类1,子类1继承自接口一(VM321)和基类;
步骤2,生成子类2,子类2继承自接口二(VM323)和基类;
步骤3,调用基类读寄存器方法,由C++的多态技术自动匹配到相应的接口进行调用。
可见,通过将子类同时继承基类和已有接口,从而实现了与已有接口的兼容,将已有接口统一到基类接口中,即将已有接口封装到接口模块中,从而可实现统一调用,精简了结构,提高了可维护性。
最后,利用C++模板机制设置工厂类时,还可以将工厂类设置为模板,即对工厂类进行泛化,使之不仅可以应用于上述示例中的情况,还可以应用于类似的应用中。如在步骤303中的工厂类示例中,在最前面添加如下语句:
template
<
    class BaseClass,
    typename ClassID,
    typename ClassCreator
>
并且在步骤303中的工厂类示例中,将ClassMap::const_iteratori=ClassPool.find(Id)设置为typename ClassMap::const_iterator i=ClassPool.find(Id)。当将泛化后的工厂类应用于其它应用时,将提供给工厂类的模板参数改为新应用的名字即可,其中,新应用包括:新的基类和继承自新基类的子类。
以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (10)

1、一种实现设备驱动的系统,其特征在于,该系统包括:接口模块、管理模块和至少一个版本驱动模块,其中,
管理模块,用于管理版本驱动模块;提取版本驱动模块;
版本驱动模块,用于当被管理模块提取时,通过接口模块提供的统一接口对所属版本设备进行驱动;
接口模块,用于为版本驱动模块提供统一的接口。
2、如权利要求1所述的系统,其特征在于,所述管理模块包括:添加子模块、创建子模块、存储子模块和提取子模块,其中,
添加子模块,用于在存储子模块中添加需要创建的版本驱动模块的编号和创建位置信息;
创建子模块,用于根据从存储子模块中获取的版本驱动模块的编号和创建位置信息,创建版本驱动模块,将创建后的版本驱动模块发送给存储子模块;
存储子模块,用于存储版本驱动模块的编号、创建位置信息以及所创建的版本驱动模块本身;
提取子模块,用于根据版本驱动模块的编号,从存储子模块中提取该版本驱动模块。
3、如权利要求2所述的系统,其特征在于,所述管理模块进一步包括:删除子模块,用于移除存储子模块中存储的版本驱动模块的编号、创建位置信息以及所创建的版本驱动模块本身。
4、一种实现设备驱动的方法,其特征在于,该方法包括:
设置可提供统一接口的接口模块;
设置采用接口模块提供的统一接口对所属版本设备进行驱动的版本驱动模块;
提取所设置的版本驱动模块,由提取的版本驱动模块通过所述统一接口对所属版本设备进行驱动。
5、如权利要求4所述的方法,其特征在于,所述设置版本驱动模块包括:对版本驱动模块进行添加和创建。
6、如权利要求4或5所述的方法,其特征在于,该方法进一步包括:对版本驱动模块进行删除。
7、如权利要求5所述的方法,其特征在于,所述对版本驱动模块进行添加为:添加需要创建的版本驱动模块的编号和创建位置信息;
所述对版本驱动模块进行创建为:根据所添加的版本驱动模块的编号和创建位置信息,创建版本驱动模块,将创建后的版本驱动模块进行存储。
8、如权利要求7所述的方法,其特征在于,该方法进一步包括:删除所存储的版本驱动模块的编号、创建位置信息以及所创建的版本驱动模块本身。
9、如权利要求7所述的方法,其特征在于,所述提取版本驱动模块具体为:根据版本驱动模块的编号,提取该版本驱动模块。
10、如权利要求4、5、7、8、9中任一项所述的方法,其特征在于,存在已有接口;则所述设置采用接口模块提供的统一接口对所属版本设备进行驱动的版本驱动模块为:设置采用接口模块提供的统一接口对所属版本设备进行驱动,以及通过接口模块提供的统一接口采用已有接口对所属版本设备进行驱动的设备驱动模块。
CN2006101672463A 2006-12-12 2006-12-12 一种实现设备驱动的系统及方法 Expired - Fee Related CN1963794B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2006101672463A CN1963794B (zh) 2006-12-12 2006-12-12 一种实现设备驱动的系统及方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2006101672463A CN1963794B (zh) 2006-12-12 2006-12-12 一种实现设备驱动的系统及方法

Publications (2)

Publication Number Publication Date
CN1963794A true CN1963794A (zh) 2007-05-16
CN1963794B CN1963794B (zh) 2010-10-06

Family

ID=38082854

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2006101672463A Expired - Fee Related CN1963794B (zh) 2006-12-12 2006-12-12 一种实现设备驱动的系统及方法

Country Status (1)

Country Link
CN (1) CN1963794B (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101499009B (zh) * 2008-02-02 2015-01-14 戴尔产品有限公司 安装外围软件驱动程序的方法、系统和介质
CN105425664A (zh) * 2014-11-14 2016-03-23 广州电器科学研究院 一种数字量i/o控制系统和方法
CN110191125A (zh) * 2019-05-30 2019-08-30 浪潮金融信息技术有限公司 基于检测机柜设备模块端口类型无关的通信方法

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4708518B2 (ja) * 1998-05-21 2011-06-22 キヤノン株式会社 情報処理装置、データ処理方法、情報処理システム、及びコンピュータ読み取り可能な記憶媒体
CN100463534C (zh) * 2003-12-08 2009-02-18 中兴通讯股份有限公司 一种单板版本的即插即用的管理方法

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101499009B (zh) * 2008-02-02 2015-01-14 戴尔产品有限公司 安装外围软件驱动程序的方法、系统和介质
CN105425664A (zh) * 2014-11-14 2016-03-23 广州电器科学研究院 一种数字量i/o控制系统和方法
CN105425664B (zh) * 2014-11-14 2018-06-22 广州擎天实业有限公司 一种数字量i/o控制系统和方法
CN110191125A (zh) * 2019-05-30 2019-08-30 浪潮金融信息技术有限公司 基于检测机柜设备模块端口类型无关的通信方法

Also Published As

Publication number Publication date
CN1963794B (zh) 2010-10-06

Similar Documents

Publication Publication Date Title
EP2098954B1 (en) Systems and methods for template reverse engineering
Sunyé et al. Refactoring UML models
EP1674990A1 (en) Framework for managing components
CN107506219A (zh) 一种基于Android系统的通用版本升级方法
CN105302575A (zh) 一种基础开发框架
CN111857801B (zh) 一种移动应用的构建方法
CN1963794B (zh) 一种实现设备驱动的系统及方法
CN104881311A (zh) 一种版本兼容的判断方法及装置
CN104657164A (zh) 软件升级处理方法和装置
CN101334737A (zh) 一种嵌入式设备的启动或复位方法
CN109783083B (zh) Web应用开发方法及其系统
JP2006276953A (ja) 画面定義データ差分抽出方法、装置及びプログラム
US7636912B2 (en) Custom assembly to extend a wizard
CN107133042A (zh) 一种基于IFML的iOS开发建模方法
CN102129385B (zh) 一种虚拟机管理功能动态扩展的管理方法
CN102541544A (zh) 树形控件的处理方法、装置及系统
CN102779036B (zh) 用于自动化技术的软件工具
CN107315599A (zh) 图形库提取方法及装置
CN103186388B (zh) 软件安装方法及装置
CN110990018B (zh) 一种嵌入式系统的编译方法及编译系统
CN100517507C (zh) 嵌入式系统闪存芯片驱动方法
CN103870392B (zh) 一种基于嵌入式系统的闪存操作方法及装置
CN106886420B (zh) 一种程序代码管理装置、方法及程序代码管理器
CN105425664B (zh) 一种数字量i/o控制系统和方法
CN113641458B (zh) 一种可视化故障传播仿真方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
C17 Cessation of patent right
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20101006

Termination date: 20111212