首页> 中国专利> Android系统Sensor HAL层兼容多种同种Sensor设备的移植处理方法及装置

Android系统Sensor HAL层兼容多种同种Sensor设备的移植处理方法及装置

摘要

本发明公开了一种Android系统Sensor HAL层兼容多种同种Sensor设备的移植处理方法及装置,其中方法包括设置初始化参数;读取设备驱动中注册的设备名称,并与已定义的设备名称进行匹配,确定系统中使用的Sensor设备;解析配置文件,根据模组的名称读取配置文件中相应模组的方向值及不同Sensor需要进行转换的参数值设置和方向的调整;根据读取到的驱动中设备注册的名称,将相应的设备添加到传感器列表;Android系统启动相应的线程调用Sensors HAL层中的poll函数获取底层相应设备的数据。本发明提供的Android系统Sensor HAL层兼容多种同种Sensor设备的移植处理方法及装置能够动态的判断硬件设备来进行相应接口的实现,从而快速地替换Sensor设备以及实现Sensor设备方向的调整,而不需要进行新的编译以及配置操作。

著录项

  • 公开/公告号CN103353835A

    专利类型发明专利

  • 公开/公告日2013-10-16

    原文格式PDF

  • 申请/专利权人 珠海全志科技股份有限公司;

    申请/专利号CN201310016831.3

  • 发明设计人 银兰凤;

    申请日2013-01-17

  • 分类号G06F9/44;

  • 代理机构广州华进联合专利商标代理有限公司;

  • 代理人李双皓

  • 地址 519080 广东省珠海市软件园路1号生产加工中心4#楼四层1单元

  • 入库时间 2024-02-19 20:30:23

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2016-08-10

    授权

    授权

  • 2013-11-13

    实质审查的生效 IPC(主分类):G06F9/44 申请日:20130117

    实质审查的生效

  • 2013-10-16

    公开

    公开

说明书

技术领域

本发明涉及Sensors的硬件抽像层处理技术领域,特别是涉及一种Android系统Sensor HAL层兼容多种同种Sensor设备的移植处理方法及装置。 

背景技术

硬件抽象层HAL(Hardware Abstraction Layer),硬件抽象层是位于操作系统内核与硬件电路之间的接口层,其目的在于将硬件抽象化。它隐藏了特定平台的硬件接口细节,为操作系统提供虚拟硬件平台,使其具有硬件无关性,可在多种平台上进行移植。Sensor硬件抽象层将底层的硬件与上层的应用有效的隔离,并作为其中的纽带,读取底层硬件的数据,进行相应的转换之后提交给系统进行使用。硬件抽象层的实现比较简单,主要任务为描述相应的设备以及数据的处理,各方面实现也不是一个标准,因为实现起来灵活多变。 

从软硬件测试的角度来看,软硬件的测试工作都可分别基于硬件抽象层来完成,使得软硬件测试工作的并行进行成为可能。 

Sensors Hardware Module也就是Sensor硬件抽象层,一般称其为Sensors的HAL层。HAL层将底层的硬件与上层的应用有效的隔离,并作为其中的纽带,读取底层硬件的数据,进行相应的转换之后提交给系统进行使用。硬件抽象层的实现比较简单,移植过程中,需要关注三处关键点,如下图1所示:Android的传感器系统结构。 

一、填充硬件中使用Sensor的相关信息。 

Sensors的相关信息由Sensor_t结构体进行描述,该结构体主要用于函数get_Sensors_list()中,用于获得传感器列表。 

二、HAL层中SetDelay以及enable函数的实现。 

SetDelay函数主要是控制硬件设备上报数据的速度;enable函数主要是控制硬件设备的使能,也就是是否工作的开关。函数实现的关键点一为Kernel driver实现相对应的SetDelay以及enable的接口控制设备的上报数据时间以及使能开关;二为HAL层中需要找到Kernel driver函数的接口路径,进行相对应的读写,进而实现SetDelay以及enable功能。 

三、数据的读取主要是找到Driver中注册的设备,并将其打开进而读取其中的数据。数据的处理主要是处理数据的方向以及将数据转换为系统可使用的数据格式。 

某些Sensor的数值方向还会受到硬件设计的影响,以mma7660重力感应器(GSensor)为例,硬件设备中的方向将影响数据的方向性,如下图2所示: 

在现有技术中,使用条件编译的方法定义配置不同的模组使用的模组名称,方向值以及相应的Sensor的Sensor_t结构体。 

现有技术的常用方法的缺点是:当发现配置的模组的方向不正确时以及换用另外一种模组时,需要重新的配置以及编译;在已经编译好的固件中修改模组的方向参数时,需要到源文件中的目录下执行一次更新的命令之后在编译,修改的方向值才会生效。 

发明内容

本发明提供了一种Android系统Sensor HAL层兼容多种同种Sensor设备的移植处理方法及装置,实现多种Sensor设备的兼容,并能够动态的判断硬件设备来进行相应接口的实现,从而可以方便快速的替换Sensor设备,而不需要进行新的编译以及配置。 

基于上述问题,本发明提供的一种Android系统Sensor HAL层兼容多种同种Sensor设备的移植处理方法,具体包括如下步骤: 

根据Linux系统中支持的Sensors驱动,对Sensor HAL层进行初始化处理;在初始化时,设置驱动平台所支持的所有模组的名称及转换值;预设Gsensor 方向值路径及Sensor设备的路径,预设Gsensor方向变量的识别名称并配置相应的方向变量配置文件;针对不同Sensor设备设置相应的Sensor_t结构体;其中,设置的每个模组的名称与Sensor设备注册到Linux输入子系统中的设备名称一一对应; 

在Sensors设备的Driver注册到Linux的输入子系统后,Sensors HAL层根据生成Sensors设备对应的节点,确定获取当前已注册的Sensors设备的名称及模组; 

在Android HAL层确定获取当前已注册的Sensor设备名称后,根据预设的Sensor设备方向值的路径,读取所述方向变量配置文件并解析预设的Sensor方向值,比对所述预设的Sensor方向值与所需Sensor方向值,调整Sensor设备的方向; 

获取Sensor设备对应的Sensor_t结构体信息,将硬件中使用的模组添加到传感器列表中,实现将所述模组注册到Android层; 

所述Android层启动相应的线程调用Sensors HAL层中的poll函数获取底层相应设备的数据。 

较佳地,作为一种可实施方式,所述设置驱动平台所支持的所有模组的名称及转换值包括如下步骤: 

在确定驱动平台所支持的所有模组的名称及转换值后,利用结构体name记录模组的设备名称以及Sensor的转换量值;其中:转换量值为Sensor设备的Driver上报的最大值; 

所述预设Gsensor方向变量的识别名称并配置相应的方向变量配置文件,包括如下步骤: 

根据不同模组的名称,分别设置相应模组的X、Y、Z轴的方向以及是否将XY轴交换的标志;所述Gsensor方向变量的识别名称用于识别Sensor设备的方向值;将设置的Gsensor方向变量信息配置在方向变量配置文件Gsensor.cfg中并保存; 

所述针对不同Sensor设备设置相应的Sensor_t结构体,包括如下步骤: 

根据不同Sensor设备,设置相应的Sensor_t结构体的描述信息。 

较佳地,作为一种可实施方式,所述Sensors HAL层根据生成与Sensors设备对应的节点,确定获取的当前已注册的Sensors设备的名称及模组,包括如下步骤: 

在当前Sensors设备的Driver注册到Linux的输入子系统后,Sensors HAL层根据所述输入子系统生成的且与所述当前Sensors设备一一对应的节点的存储位置,找到所述当前Sensors设备对应的input设备存储位置; 

其中:所述设备的节点存在于“/sys/class/input/inputX”目录下,X为正整数,X数值等于根据Linux系统的输入设备对应的输入顺序序号;X数值随着输入顺序进行升序排列; 

利用函数read读取/sys/class/input/inputX下的Sensors设备的名称; 

将所述读取的Sensors设备的名称与驱动平台设置的Sensors设备的名称进行比较,找到硬件中与所述读取的Sensors设备的名称一致模组; 

确定当前已注册的Sensors设备的节点路径及X的取值。 

较佳地,作为一种可实施方式,所述读取方向变量配置文件并解析Sensor方向值,比对所述预设的Sensor方向值与所需Sensor方向值,调整Sensor设备的方向,包括如下步骤: 

利用函数Gsensor_cfg读取方向变量配置文件Gsensor.cfg,在所述Gsensor.cfg文件中记录的所有模组中确定与所读取的Sensor设备名称匹配的模组,并解析相应的匹配模组预设的Sensor方向值; 

其中,所述Gsensor.cfg文件用于记录驱动平台支持的所有模组的方向值; 

当读取到true值时,预设的Sensor方向值为正方向值;当读取到false值时,预设的Sensor方向值为负方向值;所述正方向值为正数+1,所述负方向值为负数-1;判断所需要Sensor的方向值与预设的Sensor方向值是否一致,如果判断结果为一致,则将不需要调整Sensor的方向;如果判断结果为不一致,则将调整Sensor的方向为与预设Sensor方向的反方向。 

较佳地,作为一种可实施方式,所述获取Sensor设备对应的Sensor_t结构 体信息,将硬件中使用的模组添加到传感器列表中,包括如下步骤: 

根据模组的名称所在的驱动平台中存储位置,获取相应Sensor_t结构体信息,利用get_sensors_list函数将硬件中使用的模组添加到传感器列表中; 

所述启动相应的线程调用Sensors HAL层中的poll函数获取底层相应设备的数据包括如下步骤: 

利用Poll函数将实时读取上报值,根据转化公式进行相应的数据转换,并将转换后数值上报给Android系统使用; 

所述转化公式为:转换后数值=(G/转换量值)×方向值×上报值; 

其中:G为单位值且为常数,不同类型的Sensor设备对应的G值不同;转换量值为常数,不同类型的Sensor设备对应的转换量值不同; 

所述Sensor_t结构体用于描述Sensor设备特性信息;所述Sensor_t结构体所描述信息包括传感器的名称、传感器的版本、传感器的句柄、传感器的类型、传感器的最大范围、传感器的解析度、传感器的消耗能源、事件间隔最小时间。 

相应地,本发明还提供了一种Android系统Sensor HAL层兼容多种同种Sensor设备的移植处理装置,包括初始化模块、设备读取模块、方向调整模块、模组添加模块和数据读取模块,其中: 

所述初始化模块,用于根据Linux系统中支持的Sensors驱动,对SensorHAL层进行初始化处理;在初始化时,设置驱动平台所支持的所有模组的名称及转换值;预设Gsensor方向值路径及Sensor设备的路径,预设Gsensor方向变量的识别名称并配置相应的方向变量配置文件;针对不同Sensor设备设置相应的Sensor_t结构体;其中,设置的每个模组的名称与Sensor设备注册到Linux输入子系统中的设备名称一一对应; 

所述设备读取模块,用于在Sensors设备的Driver注册到Linux的输入子系统后,Sensors HAL层根据生成Sensors设备对应的节点,确定获取当前已注册的Sensors设备的名称及模组; 

所述方向调整模块,用于在Android HAL层确定获取当前已注册的Sensor设备名称后,根据预设的Sensor设备方向值的路径,读取所述方向变量配置文 件并解析预设的Sensor方向值,比对所述预设的Sensor方向值与所需Sensor方向值,调整Sensor设备的方向; 

所述模组添加模块,用于获取Sensor设备对应的Sensor_t结构体信息,将硬件中使用的模组添加到传感器列表中,实现将所述模组注册到Android层; 

所述数据读取模块,用于所述Android层启动相应的线程调用Sensors HAL层中的poll函数获取底层相应设备的数据。 

较佳地,作为一种可实施方式,所述初始化模块包括记录子模块、方向预设子模块和第一设置子模块,其中: 

记录子模块,用于在确定驱动平台所支持的所有模组的名称及转换值后,利用结构体name记录模组的设备名称以及Sensor的转换量值;其中:转换量值为Sensor设备的Driver上报的最大值; 

所述方向预设子模块,用于根据不同模组的名称,分别设置相应模组的X、Y、Z轴的方向以及是否将XY轴交换的标志;所述Gsensor方向变量的识别名称用于识别Sensor设备的方向值;将设置的Gsensor方向变量信息配置在方向变量配置文件Gsensor.cfg中并保存; 

所述第一设置子模块,用于根据不同Sensor设备,设置相应的Sensor_t结构体的描述信息。 

较佳地,作为一种可实施方式,所述设备读取模块包括查找子模块、第一读取子模块、比对子模块和确定子模块,其中: 

所述查找子模块,用于在当前Sensors设备的Driver将注册到Linux的输入子系统后,Sensors HAL层根据所述输入子系统生成的且与所述当前Sensors设备一一对应的节点的存储位置,找到所述当前Sensors设备对应的input设备存储位置; 

其中:所述设备的节点存在于“/sys/class/input/inputX”目录下,X为正整数,X数值等于根据Linux系统的输入设备对应的输入顺序序号;X数值随着输入顺序进行升序排列; 

所述第一读取子模块,用于利用函数read读取/sys/class/input/inputX下的 Sensors设备的名称; 

所述比对子模块,用于将所述读取的Sensors设备的名称与驱动平台设置的Sensors设备的名称进行比较,找到硬件中与所述读取的Sensors设备的名称一致模组; 

所述确定子模块,用于确定当前已注册的Sensors设备的节点路径及X的取值。 

较佳地,作为一种可实施方式,所述方向调整模块包括匹配解析子模块和调整子模块,其中: 

所述匹配解析子模块,用于利用函数Gsensor_cfg读取方向变量配置文件Gsensor.cfg,在所述Gsensor.cfg文件中记录的所有模组中确定与所读取的Sensor设备名称匹配的模组,并解析相应的匹配模组预设的Sensor方向值; 

其中,所述Gsensor.cfg文件用于记录驱动平台支持的所有模组的方向值; 

所述调整子模块,用于当读取到true值时,预设的Sensor方向值为正方向值;当读取到false值时,预设的Sensor方向值为负方向值;所述正方向值为正数+1,所述负方向值为负数-1;判断所需要Sensor的方向值与预设的Sensor方向值是否一致,如果判断结果为一致,则将不需要调整Sensor的方向;如果判断结果为不一致,则将调整Sensor的方向为与预设Sensor方向的反方向。 

较佳地,作为一种可实施方式,所述模组添加模块包括模组添加子模块,其中: 

所述模组添加子模块,用于根据模组的名称所在的驱动平台中存储位置,获取相应Sensor_t结构体信息,利用get_sensors_list函数将硬件中使用的模组添加到传感器列表中; 

所述数据读取模块包括数据转化上报子模块,其中: 

所述数据转化上报子模块,用于利用Poll函数将实时读取上报值,根据转化公式进行相应的数据转换,并将转换后数值上报给Android系统使用; 

所述转化公式为:转换后数值=(G/转换量值)×方向值×上报值; 

其中:G为单位值且为常数,不同类型的Sensor设备对应的G值不同;转 换量值为常数,不同类型的Sensor设备对应的转换量值不同。 

本发明的有益效果包括: 

本发明提供的一种Android系统Sensor HAL层兼容多种同种Sensor设备的移植处理方法及装置,其中方法包括设置初始化参数;读取设备驱动中注册的设备名称,并与已定义的设备名称进行匹配,确定系统中使用的Sensor设备;解析配置文件,根据模组的名称读取配置文件中相应模组的方向值及不同Sensor需要进行转换的参数值设置和方向的调整;根据读取到的驱动中设备注册的名称,将相应的设备添加到传感器列表;Android系统启动相应的线程调用Sensors HAL层中的poll函数获取底层相应设备的数据。本发明提供的Android系统Sensor HAL层兼容多种同种Sensor设备的移植处理方法及装置能够动态的判断硬件设备来进行相应接口的实现,从而快速地替换Sensor设备以及实现Sensor设备方向的调整,而不需要进行新的编译以及配置操作。 

附图说明

图1为现有技术中Android的传感器系统结构示意图; 

图2为现有技术中Sensor设备的数值方向影响数据的方向性的示意图; 

图3为本发明移植处理方法的一个实施例的流程示意图; 

图4为本发明移植处理方法的一个实施例中Name结构体定义的相关内容; 

图5为本发明移植处理方法的一个实施例中定义固定路径的相关内容; 

图6为本发明移植处理方法的一个实施例中设置的Gsensor方向变量信息; 

图7为本发明移植处理方法的一个实施例中设置的Sensor_t结构体定义的描述信息; 

图8为本发明移植处理方法的一个实施例中Sensor设备的读取结果; 

图9为本发明移植处理装置的一个实施例的结构示意图。 

具体实施方式

下面结合说明书附图,对本发明实施例中的Android系统Sensor HAL层兼 容多种同种Sensor设备的移植处理方法及装置的具体实施方式进行说明。 

Sensors的硬件抽像层中,有几个关键的结构体需要用户处理,例如:sensors_module_t结构体用来定义sensor模块,sensor_t结构体用来定义一个sensors设备,sensors_event_t用来定义sensor数据,sensors_poll_device_t用来定义sensor的控制。 

本发明实施例提供的一种Android系统Sensor HAL层兼容多种同种Sensor设备的移植处理方法,用于适应多种同种Sensor设备的移植处理。 

图3是本发明实施例的Android系统Sensor HAL层兼容多种同种Sensor设备的移植处理方法的流程图。如图3所示,本实施例所使用的方法包括如下几个步骤: 

S100、根据Linux系统中支持的Sensors驱动,对Sensor HAL层进行初始化处理;在初始化时,设置驱动平台所支持的所有模组的名称及转换值;预设Gsensor方向值路径及Sensor设备的路径,预设Gsensor方向变量的识别名称并配置相应的方向变量配置文件;针对不同Sensor设备设置相应的Sensor_t结构体;其中,设置的每个模组的名称与Sensor设备注册到Linux输入子系统中的设备名称一一对应; 

S200、在Sensors设备的Driver注册到Linux的输入子系统后,Sensors HAL层根据生成Sensors设备对应的节点,确定获取当前已注册的Sensors设备的名称及模组。 

S300、在Android HAL层确定获取当前已注册的Sensor设备名称后,根据预设的Sensor设备方向值的路径,读取所述方向变量配置文件并解析预设的Sensor方向值,比对所述预设的Sensor方向值与所需Sensor方向值,调整Sensor设备的方向; 

S400、获取Sensor设备对应的Sensor_t结构体信息,将硬件中使用的模组添加到传感器列表中,实现将所述模组注册到Android层; 

S500、所述Android层启动相应的线程调用Sensors HAL层中的poll函数获取底层相应设备的数据。 

下面对本发明实施例实现Android系统Sensor HAL层兼容多种同种Sensor设备的移植处理方法的上述各步骤进行详细说明: 

较佳地,作为一种可实施方式,在所述步骤S100中,所述设置驱动平台所支持的所有模组的名称及转换值包括如下步骤: 

S101、在确定驱动平台所支持的所有模组的名称及转换值后,利用结构体name记录模组的设备名称以及Sensor的转换量值;其中:转换量值为Sensor设备的Driver上报的最大值; 

在上述步骤S101中,在数组Linux Sensor驱动平台上设置初始化参数,设置系统中支持的Gsensor模组的名称,该名称需要与驱动中设备注册的名称一致,目的为用于识别系统已经注册的硬件设备模组。 

如图4所示,图4示意了所述Name结构体定义的相关内容。 

在上述步骤S100中,预设Gsensor方向值路径及Sensor设备的路径,参见图5,图5示意了定义的固定路径(包括预设Gsensor方向值路径和Sensor设备的路径)。 

在上述步骤S100中,所述预设Gsensor方向变量的识别名称并配置相应的方向变量配置文件,具体包括如下步骤: 

S102、根据不同模组的名称,分别设置相应模组的X、Y、Z轴的方向以及是否将XY轴交换的标志;所述Gsensor方向变量的识别名称用于识别Sensor设备的方向值;将设置的Gsensor方向变量信息配置在方向变量配置文件Gsensor.cfg中并保存;参见图6,图6示意了设置的Gsensor方向变量信息。 

每一种模组的方向配置都只有五项,具体的含义如下表(表1)所示: 

gsensor_name 支持的模组的名称 gsensor_direct_x X轴方向 gsensor_direct_y Y轴方向 gsensor_direct_z Z轴方向 gsensor_xy_revert XY方向是否需要反转

表1 

在所述步骤S100中,所述针对每个Sensor设备设置相应的Sensor_t结构体,具体包括如下步骤: 

S103、根据不同Sensor设备,设置相应的Sensor_t结构体的描述信息;参见图7,图7示意了本发明实施例移植处理方法具体实现设置Sensor_t结构体的描述信息。 

在配置参数时,需要设置Gsensor方向变量,配置参数文件的路径;以及设置各自Sensor的Sensor_t结构体等信息。 

较佳地,作为一种可实施方式,所述Sensor_t结构体用于描述Sensor设备特性信息;所述Sensor_t结构体所描述信息包括传感器的名称、传感器的版本、传感器的句柄、传感器的类型、传感器的最大范围、传感器的解析度、传感器的消耗能源、事件间隔最小时间等信息。对任意一个sensor设备都需要设置一个sensor_t结构体,举例说明,图7示意了上述信息的具体内容。Sensor_t结构体所描述信息包括上述信息,但不局限于此,本发明实施例对此不再一一赘述。 

具体地,因为不同的模组使用的Sensor_t的结构体描述信息是不一用的,因此将所支持的模组都使用Sensor_t结构体进行相应的描述,根据读取到的硬件设备进行相应描述信息的调用。 

较佳地,作为一种可实施方式,在所述步骤S200中,所述Sensors HAL层根据生成与Sensors设备对应的节点,确定获取的当前已注册的Sensors设备的名称及模组,包括如下步骤: 

S201、在当前Sensors设备的Driver注册到Linux的输入子系统后,Sensors HAL层根据所述输入子系统生成的且与所述当前Sensors设备一一对应的节点的存储位置,找到所述当前Sensors设备对应的input设备存储位置; 

其中:所述设备的节点存在于“/sys/class/input/inputX”目录下,X为正整数,X数值等于根据Linux系统的输入设备对应的输入顺序序号;X数值随着输入顺序进行升序排列;例如:Input设备的节点存在于“/sys/class/input/inputX”目录下,X为1、2、3、4等数值,根据系统的输入设备进行升序的增加。 

S202、利用函数read读取/sys/class/input/inputX下的Sensors设备的名称; 

S203、将所述读取的Sensors设备的名称与驱动平台设置的Sensors设备的名称进行比较,找到硬件中与所述读取的Sensors设备的名称一致模组; 

S204、确定当前已注册的Sensors设备的节点路径及X的取值。 

在上述步骤S200中,当Sensors设备的Driver将注册到linux的输入(input)子系统中,将会生成与设备对应的节点,Sensors HAL层可以根据生成的节点找到相应的设备。(操作硬件设备即操作相应节点的函数接口即可)。 

较佳地,作为一种可实施方式,在所述步骤S300中,所述读取方向变量配置文件并解析Sensor方向值,比对所述预设的Sensor方向值与所需Sensor方向值,调整Sensor设备的方向,包括如下步骤: 

利用函数Gsensor_cfg读取方向变量配置文件Gsensor.cfg,在所述Gsensor.cfg文件中记录的所有模组中确定与所读取的Sensor设备名称匹配的模组,并解析相应的匹配模组预设的Sensor方向值; 

其中,所述Gsensor.cfg文件用于记录驱动平台支持的所有模组的方向值; 

当读取到true值时,预设的Sensor方向值为正方向值;当读取到false值时,预设的Sensor方向值为负方向值;所述正方向值为正数+1,所述负方向值为负数-1;判断所需要Sensor的方向值与预设的Sensor方向值是否一致,如果判断结果为一致,则将不需要调整Sensor的方向;如果判断结果为不一致,则将调整Sensor的方向为与预设Sensor方向的反方向。如图8所示,图8示意了一个Sensor设备的读取结果实施例。 

较佳地,作为一种可实施方式,在所述S400步骤中,所述获取Sensor设备对应的Sensor_t结构体信息,将硬件中使用的模组添加到传感器列表中,包括如下步骤: 

根据模组的名称所在的驱动平台中存储位置,获取相应Sensor_t结构体信息,利用get_sensors_list函数将硬件中使用的模组添加到传感器列表中; 

在所述S500步骤中,所述启动相应的线程调用Sensors HAL层中的poll函数获取底层相应设备的数据包括如下步骤: 

利用Poll函数将实时读取上报值,根据转化公式进行相应的数据转换,并 将转换后数值上报给Android系统使用; 

所述转化公式为:转换后数值=(G/转换量值)×方向值×上报值; 

其中:G为单位值且为常数,不同类型的Sensor设备对应的G值不同;转换量值为常数,不同类型的Sensor设备对应的转换量值不同。 

举例来说,利用转化公式(G/转换量值)×方向值×上报值)即可得到系统中可使用的数值,G为单位值,如Gsensor的G值即为9.81。转换量值也是设置的常数,只有实时获取的上报值不同,因此上述公式可以实现完成数据的转换操作。通过执行转换操作,将Driver上报的数据转换为Android系统可用的数据。 

举例说明,不同厂家的Sensor设备,数据输出的位数不一样,有些是8位,有些是十位,Driver中上报的数值为int类型数据,而Android系统中使用的float类型,且Sensors都有专门的单位值以及数值范围,如重力感应传感器以G(9.81)为最大输出值,因此需要将Driver上报的数据转换为Android系统可用的数据。 

总的来说,本发明实施例所提供的移植处理方法通过如下步骤实现: 

第一步:设置初始化参数; 

第二步:读取设备驱动中注册的设备名称,并与已定义的设备名称进行匹配从而确定系统中使用的Sensor设备; 

第三步:解析配置文件,根据模组的名称读取gSensor.cfg中相应模组的方向值,以及不同Sensor需要进行转换的参数值;当方向不正确时只需要修改此文件中的参数即可; 

第四步:根据读取驱动中设备注册的名称,添加相应的传感器列表; 

第五步:Android系统启动相应的线程调用Sensors HAL层中的poll函数获取底层相应设备的数据。 

本发明实施例所提供的移植处理方法实质是:通过读取驱动中注册的设备名称来动态的进行相应Gsensor接口的调用,将Gsensor的方向抽取出来形成一个配置文件,将该文件的名称定义为gsensor.cfg文件,存放于系统中的/system/usr/路径下,将系统中支持的所有Gsensor的方向写入其中;通过与驱动 中读取的设备名称进行匹配来解析配置文件来得到所使用的Gsensor的方向值以及相应Sensor_t结构体的使用、模组的转换参数值等信息。 

其中,本发明实施例所提供的Sensor的硬件抽象层主要是通过poll调用返回从下层获取的数据,进行相应的转换之后上报给系统使用。硬件抽象层中需要构建一个Sensor_t类型的结构体表示相应的设备模组;对于数据的处理,主要是转换参数以及方向,不同的模组的精度以及解析度都是不一样的,因此硬件抽象层多种Sensor实现的关键点为Sensor_t结构体,模组方向以及精度解析度等的处理。本发明实施例所提供的移植处理方法能够兼容多种Gsensor设备,通过动态的判断硬件设备来进行相应接口的实现,可以方便快速地替换Sensor设备并快速地实现Sensor设备方向的调整,而不需要进行新的编译以及配置。 

基于同一发明构思,本发明实施例还提供了一种Android系统Sensor HAL层兼容多种同种Sensor设备的移植处理装置,由于此装置解决问题的原理与前述一种Android系统Sensor HAL层兼容多种同种Sensor设备的移植处理方法相似,因此该装置的实施可以参见前述方法的实施,重复之处不再赘述。 

本发明实施例提供的一种Android系统Sensor HAL层兼容多种同种Sensor设备的移植处理装置10,如图9所示,所述移植处理装置10包括初始化模块91、设备读取模块92、方向调整模块93、模组添加模块94和数据读取模块95,其中: 

所述初始化模块91,用于根据Linux系统中支持的Sensors驱动,对Sensor HAL层进行初始化处理;在初始化时,设置驱动平台所支持的所有模组的名称及转换值;预设Gsensor方向值路径及Sensor设备的路径,预设Gsensor方向变量的识别名称并配置相应的方向变量配置文件;针对不同Sensor设备设置相应的Sensor_t结构体;其中,设置的每个模组的名称与Sensor设备注册到Linux输入子系统中的设备名称一一对应; 

所述设备读取模块92,用于在Sensors设备的Driver注册到Linux的输入子系统后,Sensors HAL层根据生成Sensors设备对应的节点,确定获取当前已 注册的Sensors设备的名称及模组; 

所述方向调整模块93,用于在Android HAL层确定获取当前已注册的Sensor设备名称后,根据预设的Sensor设备方向值的路径,读取所述方向变量配置文件并解析预设的Sensor方向值,比对所述预设的Sensor方向值与所需Sensor方向值,调整Sensor设备的方向; 

所述模组添加模块94,用于获取Sensor设备对应的Sensor_t结构体信息,将硬件中使用的模组添加到传感器列表中,实现将所述模组注册到Android层; 

所述数据读取模块95,用于所述Android层启动相应的线程调用Sensors HAL层中的poll函数获取底层相应设备的数据。 

较佳地,作为一种可实施方式,所述初始化模块91包括记录子模块、方向预设子模块和第一设置子模块,其中: 

记录子模块,用于在确定驱动平台所支持的所有模组的名称及转换值后,利用结构体name记录模组的设备名称以及Sensor的转换量值;其中:转换量值为Sensor设备的Driver上报的最大值; 

所述方向预设子模块,用于根据不同模组的名称,分别设置相应模组的X、Y、Z轴的方向以及是否将XY轴交换的标志;所述Gsensor方向变量的识别名称用于识别Sensor设备的方向值;将设置的Gsensor方向变量信息配置在方向变量配置文件Gsensor.cfg中并保存; 

所述第一设置子模块,用于根据不同Sensor设备,设置相应的Sensor_t结构体的描述信息。 

较佳地,作为一种可实施方式,所述设备读取模块92包括查找子模块、第一读取子模块、比对子模块和确定子模块,其中: 

所述查找子模块,用于在当前Sensors设备的Driver注册到Linux的输入子系统后,Sensors HAL层根据所述输入子系统生成的且与所述当前Sensors设备一一对应的节点的存储位置,找到所述当前Sensors设备对应的input设备存储位置; 

其中:所述设备的节点存在于“/sys/class/input/inputX”目录下,X为正整 数,X数值等于根据Linux系统的输入设备对应的输入顺序序号;X数值随着输入顺序进行升序排列; 

所述第一读取子模块,用于利用函数read读取/sys/class/input/inputX下的Sensors设备的名称; 

所述比对子模块,用于将所述读取的Sensors设备的名称与驱动平台设置的Sensors设备的名称进行比较,找到硬件中与所述读取的Sensors设备的名称一致模组; 

所述确定子模块,用于确定当前已注册的Sensors设备的节点路径及X的取值。 

较佳地,作为一种可实施方式,所述方向调整模块93包括匹配解析子模块和调整子模块,其中: 

所述匹配解析子模块,用于利用函数Gsensor_cfg读取方向变量配置文件Gsensor.cfg,在所述Gsensor.cfg文件中记录的所有模组中确定与所读取的Sensor设备名称匹配的模组,并解析相应的匹配模组预设的Sensor方向值; 

其中,所述Gsensor.cfg文件用于记录驱动平台支持的所有模组的方向值; 

所述调整子模块,用于当读取到true值时,预设的Sensor方向值为正方向值;当读取到false值时,预设的Sensor方向值为负方向值;所述正方向值为正数+1,所述负方向值为负数-1;判断所需要Sensor的方向值与预设的Sensor方向值是否一致,如果判断结果为一致,则将不需要调整Sensor的方向;如果判断结果为不一致,则将调整Sensor的方向为与预设Sensor方向的反方向。 

较佳地,作为一种可实施方式,所述模组添加模块94包括模组添加子模块,其中: 

所述模组添加子模块,用于根据模组的名称所在的驱动平台中存储位置,获取相应Sensor_t结构体信息,利用get_sensors_list函数将硬件中使用的模组添加到传感器列表中; 

所述数据读取模块95包括数据转化上报子模块,其中: 

所述数据转化上报子模块,用于利用Poll函数将实时读取上报值,根据转 化公式进行相应的数据转换,并将转换后数值上报给Android系统使用; 

所述转化公式为:转换后数值=(G/转换量值)×方向值×上报值; 

其中:G为单位值且为常数,不同类型的Sensor设备对应的G值不同;转换量值为常数,不同类型的Sensor设备对应的转换量值不同。 

本发明实施例提供的一种Android系统Sensor HAL层兼容多种同种Sensor设备的移植处理方法及装置,其中方法包括设置初始化参数;读取设备驱动中注册的设备名称,并与已定义的设备名称进行匹配,确定系统中使用的Sensor设备;解析配置文件,根据模组的名称读取配置文件中相应模组的方向值及不同Sensor需要进行转换的参数值设置和方向的调整;根据读取到的驱动中设备注册的名称,将相应的设备添加到传感器列表;Android系统启动相应的线程调用Sensors HAL层中的poll函数获取底层相应设备的数据。 

本发明实施例提供的Android系统Sensor HAL层兼容多种同种Sensor设备的移植处理方法及装置可兼容多种Sensor设备,能够动态的判断硬件设备来进行相应接口的实现,从而快速地替换Sensor设备以及实现Sensor设备方向的调整,而不需要进行新的编译以及配置操作。 

以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。 

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号