1.本公开涉及嵌入式系统技术领域,尤其涉及一种控制方法、装置及存储介质。
背景技术:2.传感器是物联网领域中重要的一部分,它是设备感知世界万物的眼睛,它将万物及其环境变化转化为数字信息,通过物联网的转发处理,使得人们的生活更加的智能、高效。
3.随着物联网的发展,传感器的种类越来越多,虽然增加了开发者的可选择性,但同时也增大了应用程序开发的难度。由于不同的传感器需要配套自己独有的驱动程序才能运转起来,在开发应用程序时需要针对不同的传感器进行适配,导致应用程序的开发难度较高、开发周期较长。
技术实现要素:4.本公开提供一种控制方法、装置及存储介质。
5.根据本公开实施例的第一方面,提供一种控制方法,应用于控制系统,所述控制系统包括:应用层、服务层和多个驱动层,所述方法包括:
6.服务层向应用层广播传感数据的主题信息,其中,不同传感数据由不同的传感器感测生成;
7.响应于应用层对至少一个主题信息的订阅请求,服务层控制至少一个所述主题信息对应的驱动层从传感器读取目标传感数据;
8.服务层向所述应用层发布所述目标传感数据。
9.可选地,所述驱动层包括:
10.第一子层,其中,不同的所述第一子层,包含不同传感器的的驱动程序,用于与所述传感器交互;
11.第二子层,为不同所述传感器共用的通用驱动子层,通过与所述第一子层交互,提供供传感数据写入的存储空间。
12.可选地,所述存储空间为环形存储空间;
13.在所述环形存储空间的第二存储地址被占用之后,目标传感数据被写入所述环形存储空间的第一存储地址,其中,所述第一存储位置为所述环形存储空间对应的存储区域的起始存储地址;所述第二存储地址为所述环形存储空间对应的存储区域的末尾存储地址。
14.可选地,所述服务层控制至少一个所述主题信息对应的驱动层从传感器读取目标传感数据,包括:
15.服务层向所述第一子层下发控制指令;所述控制指令用于触发所述第一子层从相连的传感器读取目标传感数据,并将所述目标传感数据写入所述第二子层的存储空间内;
16.服务层监测到所述第二子层的存储空间存储的数据更新后,从所述第二子层的存
储空间获取所述目标传感数据。
17.可选地,所述服务层控制至少一个所述主题信息对应的驱动层从传感器读取目标传感数据,包括:
18.服务层向所述第一子层下发参数调整指令;所述参数调整指令用于触发第一子层调整采集参数,基于调整后的采集参数从相连传感器读取目标传感数据,并将所述目标传感数据写入所述第二子层的存储空间内;
19.服务层监测到所述第二子层的存储空间存储的数据更新后,从所述第二子层的存储空间获取所述目标传感数据。
20.可选地,所述采集参数包括:
21.传感数据的采集频率;
22.和/或,传感数据的采集模式,其中,不同的采集模式对应服务层从所述环形存储空间读取传感数据的预设长度不同和/或读取方式不同。
23.可选地,所述服务层监测到所述第二子层的存储空间存储的数据更新后,从所述第二子层的存储空间获取所述目标传感数据,包括:
24.在监测到所述第二子层的存储空间存储的数据更新后,服务层从所述存储空间的读指针指示的数据读取位置开始,顺序读取所述存储空间中预设长度的传感数据;
25.并将所述读指针移动至当前读取位置的下一位置。
26.可选地,所述服务层向应用层广播传感数据的主题信息,包括:
27.服务层获取控制系统内的已注册的第一类传感器的类型信息;
28.基于所述第一类传感器的类型信息,确定所述第一类传感器感测的传感数据的主题信息;其中,所述第一类传感器为仅具备预设功能的传感器;
29.服务层向所述应用层广播所述第一类传感器感测的传感数据的主题信息。
30.可选地,所述方法还包括:
31.应用层通过预设的操作函数接口向控制系统内已注册的第二类传感器下发控制指令;
32.所述控制指令用于触发所述第二类传感器的驱动层调用与所述操作函数接口对应的操作函数,执行所述控制指令,并将执行结果通过所述操作函数接口传输至所述应用层。
33.根据本公开实施例的第二方面,提供一种控制装置,应用于控制系统,所述控制系统包括:应用层、服务层和多个驱动层,包括:
34.广播模块,用于服务层向应用层广播传感数据的主题信息,其中,不同传感数据由不同的传感器感测生成;
35.第一获取模块,用于响应于应用层对至少一个主题信息的订阅请求,服务层控制至少一个所述主题信息对应的驱动层从传感器读取目标传感数据;
36.发布模块,用于服务层向所述应用层发布所述目标传感数据。
37.可选地,所述驱动层包括:
38.第一子层,其中,不同的所述第一子层,包含不同传感器的的驱动程序,用于与所述传感器交互;
39.第二子层,为不同所述传感器共用的通用驱动子层,通过与所述第一子层交互,提
供供传感数据写入的存储空间。
40.可选地,所述存储空间为环形存储空间;
41.在所述环形存储空间的第二存储地址被占用之后,目标传感数据被写入所述环形存储空间的第一存储地址,其中,所述第一存储位置为所述环形存储空间对应的存储区域的起始存储地址;所述第二存储地址为所述环形存储空间对应的存储区域的末尾存储地址。
42.可选地,所述第一获取模块,用于:
43.服务层向所述第一子层下发控制指令;所述控制指令用于触发所述第一子层从相连的传感器读取目标传感数据,并将所述目标传感数据写入所述第二子层的存储空间内;
44.服务层监测到所述第二子层的存储空间存储的数据更新后,从所述第二子层的存储空间获取所述目标传感数据。
45.可选地,所述第一获取模块,用于:
46.服务层向所述第一子层下发参数调整指令;所述参数调整指令用于触发第一子层调整采集参数,基于调整后的采集参数从相连传感器读取目标传感数据,并将所述目标传感数据写入所述第二子层的存储空间内;
47.服务层监测到所述第二子层的存储空间存储的数据更新后,从所述第二子层的存储空间获取所述目标传感数据。
48.可选地,所述采集参数包括:
49.传感数据的采集频率;
50.和/或,传感数据的采集模式,其中,不同的采集模式对应服务层从所述环形存储空间读取传感数据的预设长度不同和/或读取方式不同。
51.可选地,所述第一获取模块,还用于:
52.在监测到所述第二子层的存储空间存储的数据更新后,服务层从所述存储空间的读指针指示的数据读取位置开始,顺序读取所述存储空间中预设长度的传感数据;
53.并将所述读指针移动至当前读取位置的下一位置。
54.可选地,所述广播模块,用于:
55.服务层获取控制系统内的已注册的第一类传感器的类型信息;
56.基于所述第一类传感器的类型信息,确定所述第一类传感器感测的传感数据的主题信息;其中,所述第一类传感器为仅具备预设功能的传感器;
57.服务层向所述应用层广播所述第一类传感器感测的传感数据的主题信息。
58.可选地,所述装置还包括:第二获取模块,用于:
59.应用层通过预设的操作函数接口向控制系统内已注册的第二类传感器下发控制指令;
60.所述控制指令用于触发所述第二类传感器的驱动层调用与所述操作函数接口对应的操作函数,执行所述控制指令,并将执行结果通过所述操作函数接口传输至所述应用层。
61.根据本公开实施例的第三方面,提供一种控制装置,包括:
62.处理器;
63.用于存储可执行指令的存储器;
64.其中,所述处理器被配置为:执行所述存储器中存储的可执行指令时,实现本公开实施例的第一方面所述控制方法中的步骤。
65.根据本公开实施例的第四方面,提供一种非临时性计算机可读存储介质,当所述存储介质中的指令由控制装置的处理器执行时,使得控制装置能够执行如本公开实施例的第一方面所述控制方法中的步骤。
66.本公开的实施例提供的技术方案可以包括以下有益效果:
67.本公开实施例通过服务层向应用层广播传感数据的主题信息,并响应于应用层对主题信息的订阅请求,控制所述主题信息对应的驱动层,以便从传感器读取目标传感数据;并由服务层向应用层发布所述目标传感数据;如此,通过引入服务层,通过服务层与应用层交互,从而使得在应用程序的开发过程中,无需关注于传感器的驱动程序,降低应用程序的开发难度;通过服务层与传感器的驱动层交互,根据传感数据的主题信息的订阅情况,控制传感器设备并发布传感器采集的传感数据,使得所述应用层和驱动层之间完全解耦。
68.应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
69.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
70.图1是根据一示例性实施例示出的一种rtos系统的框架示意图。
71.图2是根据一示例性实施例示出的一种rt-thread系统的传感器驱动框架示意图一。
72.图3是根据一示例性实施例示出的一种rt-thread系统的传感器驱动框架示意图二。
73.图4是根据一示例性实施例示出的一种控制方法的流程示意图一。
74.图5是根据一示例性实施例示出的一种控制方法的流程示意图二。
75.图6是根据一示例性实施例示出的控制系统的软件框架示意图。
76.图7是根据一示例性实施例示出的一种sensor驱动层的框架示意图。
77.图8是根据一示例性实施例示出的不同传感器模组的驱动模型的示意图。
78.图9是根据一示例性实施例示出的一种控制方法的流程示意图三。
79.图10是根据一示例性实施例示出的一种应用程序开发的框架示意图。
80.图11是根据一示例性实施例示出的一种控制装置的结构示意图。
81.图12是根据一示例性实施例示出的一种控制装置的框图。
具体实施方式
82.这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置的例子。
83.对于嵌入式设备或物联网设备,由于其随机存储器(random access memory,ram)
内存或只读存储器(read-only memory,rom)内存一般都在kb、mb数量级,对于gb和gb以上的存储,由于低功耗且资源受限的传感器很难实现,故在嵌入式平台或物联网平台内,对于使用功能和使用场景较为复杂的情况下,通常选择rots系统进行传感器之间的功能调度。
84.目前较为通用的rtos系统包括:freertos、uc/os-ii、zypher、rt-thread等,但这些rots系统对于传感器的控制大部分只实现驱动程序,如图1所示,图1是根据一示例性实施例示出的一种rtos系统的框架示意图。通过将传感器注册为字符设备,应用程序通过字符设备节点对传感器进行差异性控制以满足嵌入式平台或物联网平台的功能要求。
85.下面以rt-thread系统为例,简单介绍rtos系统;如图2、图3所示,图2是根据一示例性实施例示出的一种rt-thread系统的传感器驱动框架示意图一;图3是根据一示例性实施例示出的一种rt-thread系统的传感器驱动框架示意图二。在rt-thread系统中,传感器驱动层向应用层提供的驱动接口(例如,open、close、read或control),以便于应用层的应用程序通过所述驱动接口打开对应的传感器字符设备节点,从而访问所述传感器的驱动层;传感器驱动层还为底层驱动提供的操作命令接口(fetch_data或control),通过所述操作命令接口对接具体的传感器硬件的底层驱动,从而控制所述传感器。
86.由于在rtos系统中,软件算法的开发模型与底层驱动混为一体,导致驱动底层的数据处理代码和软件算法内的代码是相互交叉的,当多个应用同时读取一个传感器的传感数据时,需要在驱动中实现复杂的互斥代码以及满足不同采样率的降采样代码;一方面增加应用程序的开发难度和开发周期,另一方面也容易出现程序错误的问题。
87.对此,本公开实施例提供一种控制方法。图4是根据一示例性实施例示出的一种控制方法的流程示意图一,如图4所示,所述方法包括:
88.步骤s101,服务层向应用层广播传感数据的主题信息,其中,不同传感数据由不同的传感器感测生成;
89.步骤s102,响应于应用层对至少一个主题信息的订阅请求,服务层控制至少一个所述主题信息对应的驱动层从传感器读取目标传感数据;
90.步骤s103,服务层向所述应用层发布所述目标传感数据。
91.本公开实施例提供的控制方法应用于控制系统,所述控制系统包括:应用层、服务层和多个驱动层。
92.在步骤s101中,所述主题信息可以包括:主题名称、传感数据的内容以及传感数据的类型等,例如,所述主题信息可为加速度计数据、音频数据、蓝牙wifi状态或系统所产生的任意中间量。
93.需要说明的是,不同主题信息具有唯一的名称。不同的主题信息还可对应不同的结构体。结构体包含了主题状态的描述信息,例如,所述主题信息的名称可为加速度计数据,其对应的结构体内包含了x、y、z三轴加速度矢量和时间戳消息。
94.服务层可通过获取所述控制系统内不同传感器所感测的传感数据,根据所述传感数据确定所述主题信息,通过预设接口向所述应用层广播所述主题信息。
95.在一些实施例中,所述预设接口可为微对象代理器(micro object request broker,uorb)接口,通过所述uorb接口实现主题信息的广播。
96.需要说明的是,所述uorb接口是一种用于线程间/进程间进行异步发布-订阅的消息机制的应用程序接口;所述uorb接口为异步通信机制,uorb接口在数据发布和接收过程
中并不保证发布者的所有数据都可以被订阅者接收,而只保证订阅者在想要接收数据时能够接收到最新的数据。也就是说,在通信过程中,发布者只负责发布数据,而并不关心数据由谁接收,也不关心订阅者是否能将所有的数据都接收到;而对于订阅者来说并不关心数据是由谁发布的,也不关心在接收过程中是否将所有数据都接收到。
97.示例性地,服务层可使用orb_advertise或orb_advertise_multi等uorb接口广播所述传感数据的主题信息。当应用层有应用程序使用orb_subscribe或orb_subscribe_multi等接口订阅某一传感数据的主题信息,服务层将会收到通知。
98.在步骤s102中,应用层中各个应用程序根据所述服务层广播的主题信息,对自身所需要的传感数据的主题信息进行订阅,服务层接收到所述应用层的订阅请求后,控制与所述主题信息对应的驱动层从传感器读取目标传感数据。
99.需要说明的是,不同传感器对应的驱动层不同,服务层可根据所述订阅请求所针对的主题信息,可确定出所述应用层所需要的传感数据,从而控制对应的驱动层,从相连的传感器读取目标传感数据。
100.所述订阅请求可以是应用层中某一应用程序获取一项或多项主题信息的请求,也可以是应用程中多个应用程序对一项或多项主题信息的订阅请求,本公开实施例对此不作限定。
101.在步骤s103中,在驱动层从传感器读取到目标传感数据后,服务层从驱动层获取所述目标传感数据,并通过预设接口向所述应用层中订阅了所述目标传感数据的主题信息的应用程序发布所述目标传感数据,以便所述应用程序获取所述目标传感数据。
102.在一些实施例中,所述预设接口可为uorb接口;
103.示例性地,当服务层从驱动层获取所述目标传感数据后,可通过使用uorb接口(如orb_publish)发布所述目标传感数据,所有订阅了所述目标传感数据的主题信息的应用程序会得到通知,所述应用程序可使用uorb接口(如orb_copy)获取所述目标传感数据。
104.当应用层中多个应用程序订阅同一传感数据的主题信息时,由于所述uorb接口是基于多进程间的共享内存进行数据传输,故uorb接口可通过共享内存的方式,向多个应用程序进行传感数据的分发,从而能够减少应用程序之间的互斥问题。
105.本公开实施例通过引入服务层,通过服务层与应用层交互,从而使得在应用程序的开发过程中,无需关注于传感器的驱动程序,降低应用程序的开发难度;通过服务层与传感器的驱动层交互,根据传感数据的主题信息的订阅情况,控制传感器设备并发布传感器采集的传感数据,使得所述应用层和驱动层之间完全解耦。
106.可选地,所述驱动层包括:
107.第一子层,其中,不同的所述第一子层,包含不同传感器的的驱动程序,用于与所述传感器交互;
108.第二子层,为不同所述传感器共用的通用驱动子层,通过与所述第一子层交互,提供供传感数据写入的存储空间。
109.在本公开实施例中,所述驱动层可包括:第一子层和第二子层;所述第一子层包含有与所述驱动层对应的传感器的驱动程序,可通过从所述第一子层调用相应的操作函数,实现对所述传感器的访问操作。
110.可以理解的是,由于不同的传感器需要配套自己独有的驱动程序才能运转起来,
故为了使第一子层能够直接与相连的传感器交互,第一子层需要包含有相连的所述传感器的驱动程序;由于不同第一子层,连接的传感器不同,故不同的所述第一子层包含不同传感器的驱动程序。
111.第二子层为不同传感器共用的通用驱动子层,所述第二子层不与传感器交互,用于提供传感器的通用功能;例如,注册字符设备节点、批处理模式管理或引用计数等功能。
112.需要说明的是,由于不同的传感器的驱动程序不同,当控制系统中的传感器数量较多时,导致所述传感器的驱动层包含的驱动程序的代码量较大;本公开实施例为了减少冗余代码,增加复用,可将所述传感器的驱动层分为第一子层和第二子层,令第二子层包含多个所述传感器的驱动程序中的相同部分(即传感器的通用功能的驱动程序),从而在代码实现时,可保留一份第二子层的代码;通过调用所述第二子层的代码,即可实现传感器的通用功能。
113.服务层可通过控制第一子层,从传感器获取目标传感数据,第二子层通过与所述第一子层交互,将从第一子层获取的目标传感数据写入第二子层的存储空间内,以便于服务层从所述第二子层的存储空间中读取所述目标传感数据。
114.需要说明的是,不同传感器对应有不同的驱动层,并且不同传感器的第二子层内的存储空间是相互独立的,互相不会影响,例如都在智能手机的内存或闪存中,但是内存或闪存根据需要分为不同的存储区域,用来隔开,因此相互不会影响。
115.可选地,所述存储空间为环形存储空间;
116.在所述环形存储空间的第二存储地址被占用之后,目标传感数据被写入所述环形存储空间的第一存储地址,其中,所述第一存储位置为所述环形存储空间对应的存储区域的起始存储地址;所述第二存储地址为所述环形存储空间对应的存储区域的末尾存储地址。
117.在本公开实施例中,所述第二子层的存储空间可为环形存储空间;需要说明的是,所述环形存储空间是一种用于表示固定长度、头尾相连的存储区域的数据结构;所述环形存储空间通常有一个读指针和一个写指针;所述读指针指向环形存储空间中可读的数据的存储位置,写指针指向环形存储空间可写入数据的存储位置,通过移动所述读指针和所述写指针,就可以实现环形存储空间的数据读取和写入。
118.在第一子层从传感器获取目标传感数据后,将所述目标传感数据传输给所述第二子层,第二子层通过判断所述环形存储空间中的第二存储地址是否被占用,确定所述环形缓冲空间是否已满;若所述环形存储空间的第二存储地址未被占用,即,所述环形存储空间未满,可将所述目标传感数据写入所述环形存储空间的写指针对应的存储地址。
119.若所述环形存储空间的第二存储地址被占用,即,所述环形存储空间已满,可将所述环形存储空间的写指针移动至所述环形存储空间的第一存储地址,从而将目标传感数据写入所述第一存储地址,以覆盖所述第一存储地址原本存储的数据。
120.需要说明的是,由于所述环形存储空间是一个先进先出的循环存储空间,当所述环形存储空间已满,且由新数据需要存储时,可直接将新数据存储至所述环形存储空间对应的存储区域的起始存储地址内,将该起始存储地址内存储的历史最久的数据丢弃,从而不需要频繁的分配内存。
121.可选地,所述步骤s102中的服务层控制至少一个所述主题信息对应的驱动层从传
感器读取目标传感数据,包括:
122.服务层向所述第一子层下发控制指令;所述控制指令用于触发所述第一子层从相连的传感器读取目标传感数据,并将所述目标传感数据写入所述第二子层的存储空间内;
123.服务层监测到所述第二子层的存储空间存储的数据更新后,从所述第二子层的存储空间获取所述目标传感数据。
124.在本公开实施例中,服务层向所述第一子层发送控制指令,由于所述第一子层包含有传感器的驱动程序,可通过从所述第一子层调用与所述控制指令对应的操作函数,以便控制所述传感器执行相应操作,并将获取的目标传感数据写入第二子层的存储空间内;服务层监测到所述第二子层的存储空间存储的数据更新后,即可直接从所述存储空间获取所述目标传感数据,实现对所述传感器的控制。
125.在一些实施例中,若服务层在预设时间段内未检测到所述应用层的订阅请求,服务层向所述第一子层下发关闭指令,所述关闭指令用于触发所述第一子层控制所述相连的传感器切换为关闭状态。
126.需要说明的是,若在预设时间段未检测到所述应用层的订阅请求,说明此时所述应用层的应用程序不需要传感器的传感数据,故服务层可通过控制所述传感器切换至关闭状态,从而达到降低功耗的效果。
127.在另一些实施例中,若服务层接收到所述应用层的订阅取消请求,且所述订阅取消请求所指示的传感数据的主题信息未被所述应用层的其他应用程序订阅,服务层向所述主题信息对应的第一子层下发关闭指令。
128.在本公开实施例中,若应用层的应用程序取消订阅传感数据的主题信息,服务层将会接收到取消订阅通知;若订阅了某一个传感数据的主题信息的所有应用程序都取消订阅该主题信息,服务层可通过控制所述主题信息对应的传感器切换至关系状态,从而给达到降低功耗的效果。
129.可选地,所述步骤s102中的服务层控制至少一个所述主题信息对应的驱动层从传感器读取目标传感数据,包括:
130.服务层向所述第一子层下发参数调整指令;所述参数调整指令用于触发第一子层调整采集参数,基于调整后的采集参数从相连传感器读取目标传感数据,并将所述目标传感数据写入所述第二子层的存储空间内;
131.服务层监测到所述第二子层的存储空间存储的数据更新后,从所述第二子层的存储空间获取所述目标传感数据。
132.在本公开实施例中,若应用层通过预设接口向服务层发送参数设置信息,服务层可根据所述参数设置信息,向所述第一子层下发参数调整指令,以便所述第一子层根据所述参数调整指令所指示的采集参数,从所述相连的传感器获取目标传感数据;将所述目标传感数据写入所述第二子层的存储空间内。
133.这里,所述预设接口可为uorb接口,例如,应用程序可通过使用uorb接口(如orb_set_interval),设置传感器的采样率。
134.在一些实施例中,所述方法还包括:
135.响应于所述应用层用于指示多个采样频率的参数设置信息,服务层确定出最大采样频率;
136.基于所述最大采样频率,向所述第一子层下发参数控制指令,所述参数控制指令用于触发所述第一子层基于所述最大采样频率,从相连的传感器获取目标传感数据,并将所述目标传感数据写入所述第二子层的存储空间内;
137.服务层监测到所述第二子层的存储空间存储的数据更新后,从所述第二子层的存储空间获取所述目标传感数据,对所述目标传感数据进行降采样处理,得到满足多个采样频率的多个目标传感数据。
138.这里,所述参数设置信息可包括:设置的指示所述传感器的采集参数和/或所述传感器的工作参数。例如,所述参数设置信息可为所述传感器的采集频率和/或采集模式等。所述传感器的工作参数包括但不限于:传感器的工作时段参数、传感器的工作模式参数和/或所述传感器的功率参数等。
139.在本公开实施例中,所述参数设置信息为应用层中多个应用程序所指示的同一传感器的不同采集频率。
140.在本公开实施例中,若所述应用层中多个应用程序订阅同一项主题信息,且不同应用程序所订阅的传感数据的采样频率不同,服务层可根据多个订阅请求中的采样频率,确定出最大采样频率;基于所述最大采样频率,向所述第一子层下发参数调整指令;第一子层根据所述参数调整指令所指示的最大采样频率,从所述传感器获取目标传感数据,并将采集的目标传感数据写入所述第二子层的存储空间内;服务层从所述存储空间内获取所述目标传感数据后,对所述目标传感数据进行降采样处理,得到不同采样频率的目标传感数据,从而向应用层发布所述不同采样频率的目标传感数据。
141.可选地,所述采集参数包括:
142.传感数据的采集频率;
143.和/或,传感数据的采集模式,其中,不同的采集模式对应服务层从所述环形存储空间读取传感数据的预设长度不同和/或读取方式不同。
144.在本公开实施例中,若所述采集参数可为所述传感数据的采集频率,服务层可根据订阅请求所指示的采样频率,向所述第一子层下发参数调整指令;第一子层根据所述参数调整指令所指示的采集频率,从相连的所述传感器读取目标传感数据,并将采集的目标传感数据写入所述第二子层的存储空间内,以便于所述服务层从所述存储空间中读取所述目标传感数据,并向应用层中订阅了所述传感数据的主题信息的应用程序发布所述目标传感数据。
145.所述传感数据的采集模式可包括:中断控制模式、轮询模式和先进先出(first input first output,fifo)模式;
146.需要说明的是,若传感数据的读取模式为中断控制模式,当服务层接收到订阅请求后向所述第一子层发送控制指令以触发中断信号的产生,第一子层检测到中断信号后,从所述传感器读取目标传感数据,并将所述目标传感数据写入第二子层的存储空间,以便于服务层读取所述目标传感数据。
147.若传感数据的读取模式为轮询模式,第一子层定时从所述传感器获取目标传感数据;将所述目标传感数据写入第二子层的存储空间,以便当服务层接收到订阅请求后,可直接从存储空间内读取所述目标传感数据。
148.而所述fifo模式需要传感器硬件支持,若所述传感数据的读取模式为fifo模式
时,服务层向第一子层发送控制指令以控制第一子层读取预设长度的目标传感数据;第一子层可以从传感器读取目标传感数据,并将读取的目标传感数据存储在硬件fifo中,当所述硬件fifo已存储预设长度的目标传感数据后,将所述预设长度的目标传感数据写入第二子层的存储空间;不需要等服务层每触发产生一次中断信号,才读取一个目标传感数据,从而节省cpu资源,适用于低功耗模式。
149.若所述采集参数为所述传感数据的读取模式,服务层可根据订阅请求所指示的读取模式,向所述第一子层下发参数调整指令,第一子层根据所述参数调整指令所指示的读取模式,以所述读取模式所对应的读取方式从相连的传感器读取预设长度的目标传感数据;将读取的目标传感数据写入所述第二子层的存储空间内,以便于所述服务层从所述第二子层的存储空间读取目标传感数据,并向应用层中订阅了所述传感数据的主题信息的应用程序发布所述目标传感数据。
150.可选地,所述服务层监测到所述第二子层的存储空间存储的数据更新后,从所述第二子层的存储空间获取所述目标传感数据,包括:
151.在监测到所述第二子层的存储空间存储的数据更新后,服务层从所述存储空间的读指针指示的数据读取位置开始,顺序读取所述存储空间中预设长度的传感数据;
152.并将所述读指针移动至当前读取位置的下一位置。
153.在本公开实施例中,由于所述第二子层的存储空间为环形存储空间,故服务层在检测到所述第二子层的存储空间存储的数据更新后,可根据所述环形存储空间的读指针所指示的数据读取位置开始,顺序读取所述环形存储空间内存储的预设长度的目标传感数据;并且,在数据读取完毕后,将所述环形存储空间的读指针移动至当前读取位置的下一位置,以便于后续的传感数据的读取,减少出现重复读取相同传感数据的问题。
154.需要说明的是,由于不同读取模式对应的预设长度不同,例如,中断控制模式是每接收到一次中断信号,就从传感器读取一次传感数据,故所述中断控制模式对应的预设长度可为所述传感数据的长度;而fifo模式是接收到一次控制指令后,从传感器读取多个传感数据,故所述fifo模式对应的预设长度可为多个传感数据的长度。
155.可选地,所述步骤s101中的服务层向应用层广播传感数据的主题信息,包括:
156.服务层获取控制系统内的已注册的第一类传感器的类型信息;
157.基于所述第一类传感器的类型信息,确定所述第一类传感器感测的传感数据的主题信息;其中,所述第一类传感器为仅具备预设功能的传感器;
158.服务层向所述应用层广播所述第一类传感器感测的传感数据的主题信息。
159.在本公开实施例中,所述第一类传感器可为预设类型的传感器,其仅具备预设功能;这里,所述预设类型可根据实际情况进行设置,例如,所述第一类传感器包括:加速度计、陀螺仪或磁力计等25种已知类型的传感器。
160.服务层通过扫描所述控制系统内已注册的第一类传感器的字符设备节点,获取所述第一类传感器的类型信息;根据所述第一类传感器的类型信息,生成所述第一类传感器感测的传感数据的主题信息,并通过预设接口向所述应用层广播所述传感数据的主题信息,以便于所述应用层中的应用程序根据所述主题信息,订阅自身所需的传感数据。
161.需要说明的是,本公开实施例通过服务层统一管理控制系统内的所有第一类传感器,由服务层主动获取所述第一类传感器的类型信息,以确定所述第一类传感器感测的传
感数据的主题信息,通过服务层向应用层广播所述传感数据的主题信息,以便于应用层中的各应用程序根据所述主题信息,订阅自身所需的传感数据。
162.可选地,所述方法还包括:
163.应用层通过预设的操作函数接口向控制系统内已注册的第二类传感器下发控制指令;
164.所述控制指令用于触发所述第二类传感器的驱动层调用与所述操作函数接口对应的操作函数,执行所述控制指令,并将执行结果通过所述操作函数接口传输至所述应用层。
165.在本公开实施例中,所述第二类传感器可为不具备预设功能或者同时具备预设功能和其他复杂功能的传感器;所述第二类传感器不被所述服务层统一管理,需要由应用层直接控制管理。
166.应用层可通过预设的操作函数接口直接打开所述第二类传感器的字符设备节点,从而访问所述第二类传感器的驱动层,以对所述第二类传感器下发控制指令;所述第二类传感器的驱动层通过调用与所述操作函数接口对应的操作函数,从而控制第二类传感器执行所述控制指令,并从所述第二类传感器获取传感数据,将所述传感数据通过所述操作函数接口传输至所述应用层。
167.这里,所述预设的操作函数接口可为在应用层的开发过程中,为了与所述第二类传感器的驱动程序适配而预先定义的功能性接口。例如,open、close、read或control接口。
168.需要说明的是,由于第二类传感器的操作不通用,所述第二类传感器感测的传感器类型不确定,无法直接由服务层对所述第二类传感器进行控制,故为了便于控制所述第二类传感器,应用层的应用程序需要与所述第二类传感器的驱动程序适配,根据所述第二类传感器的驱动程序,预先定义所述第二类传感器的操作函数接口,使得应用层的应用程序可直接通过所述操作函数接口访问所述第二类传感器的字符设备节点,从而对所述第二类传感器进行控制。
169.在一些实施例中,为了便于控制系统内的传感器能够与服务层或应用层进行数据交互,传感器需要在所述控制系统内进行注册,故所述方法还包括:
170.基于第一子层内的传感器驱动程序,第二子层确定所述传感器的类型信息;
171.第二子层根据所述传感器的类型信息,注册所述传感器对应的字符设备。
172.在本公开实施例中,由于字符设备可以使用与普通文件相同的文件操作命令对字符设备文件进行操作,当与传感器建立物理连接后,需要为所述传感器创建字符设备文件,才能对传感器采集的数据进行操作。
173.可以理解的是,由于传感器可分为第一类传感器和第二类传感器;第一类传感器所具备的功能和所述第二类传感器所具备的功能可能不同,第一类传感器仅具备预设功能,可以由服务层对第一类传感器进行统一管理;而第二类传感器需要由应用层控制管理,故在对所述传感器进行注册时,需要根据所述传感器的类型信息,将所述第一类传感器和第二类传感器区分开,分别对第一类传感器、第二类传感器进行注册。
174.若所述传感器为第一类传感器,所述第二子层可根据所述第一类传感器的类型信息,确定所述第一类传感器对应的字符设备的标识信息,并注册所述第一类传感器对应的字符设备;
175.若所述传感器为第二类传感器,基于所述第一子层内所述第二类传感器的驱动程序,第二子层确定所述第二类传感器对应的存储空间地址、存储量和所述第二类传感器的标识信息;基于所述存储空间地址、所述存储量和所述标识信息,注册所述第二类传感器对应的字符设备。
176.这里,标识信息可为所述字符设备的名称和/或id号;通过所述标识信息可唯一确定所述字符设备。
177.服务层可通过获取所述控制系统内所有字符设备的标识信息,确定出所述第一类传感器的字符设备以及所述第一类传感器感测的传感数据的主题信息,从而向应用层广播所述主题信息。应用层通过订阅所述主题信息,获取所述第一类传感器感测的传感数据。
178.若所述应用层需要获取所述第二类传感器的传感数据,需要根据所述第二类传感器的驱动程序,预先定义操作函数接口,以便在后续处理过程中,应用层可直接通过所述操作函数接口访问所述第二类传感器的字符设备,从而获取所述第二类传感数据感测的传感数据。
179.本公开还提供以下实施例:
180.图5是根据一示例性实施例示出的一种控制方法的流程示意图二,所述方法包括:
181.步骤s201,服务层获取控制系统内的已注册的第一类传感器的类型信息;基于所述第一类传感器的类型信息,确定所述第一类传感器感测的传感数据的主题信息;服务层向所述应用层广播所述第一类传感器感测的传感数据的主题信息;
182.在本示例中,所述控制方法应用于控制系统中,所述控制系统包括:应用层、服务层和多个驱动层。如图6所示,图6是根据一示例性实施例示出的控制系统的软件框架示意图。所述控制系统的软件框架主要包括:应用层、sensor服务层和sensor驱动层。
183.这里,所述服务层可为sensor服务层,所述sensor服务层提供发布sensor数据和自动控制的能力。所述驱动层可为sensor驱动层;所述sensor驱动层提供与传感器设备交互的能力。
184.所述驱动层包括:
185.第一子层,其中,不同的所述第一子层,包含不同传感器的的驱动程序,用于与所述传感器交互;
186.第二子层,为不同所述传感器共用的通用驱动子层,通过与所述第一子层交互,提供供传感数据写入的存储空间。
187.在本示例中,所述第一子层可为lower层,所述第二子层可为upper层。其中,upper层不与真正的传感器设备交互,为sensor驱动层提供通用功能,例如,注册设备节点、绑定syscall回调集合、多用户访问、提供circular buffer、batch mode管理、控制sensor等。lower层为真正的驱动程序,负责与传感器设备交互,表现为:激活、采样率设置、批处理等,并将从传感器设备采集的传感数据传输至upper层的存储空间。
188.需要说明的是,在控制系统中,每一个传感器设备都对应有一个sensor驱动层,为了减少冗余代码,提高复用,可将sensor驱动层分为upper层和lower层,每一个传感器设备的upper层都是相同的,提供传感器设备的通用功能;所以在代码实现时,只需要写一份upper层的驱动代码;每个传感器驱动都可以调用这份upper层代码;而lower层是真正的驱动程序,每个传感器设备对应的lower层的代码都不同。
189.可通过将控制系统中所有的传感器设备的驱动程序中的公共部分提取为upper层,其余的驱动程序作为lower层;如图7所示,图7是根据一示例性实施例示出的一种sensor驱动层的框架示意图。其中,数据结构struct lowerhalf_s作为桥梁连接upper层和lower层,它向上表达lower层的传感器类型、环形存储空间大小、传感器数据是否校准标志以及控制传感器行为集合;向下传输事件推送通知、事件推送接口以及upper层的指针。
190.可以理解的是,在本示例中,驱动层只关注于物理的传感器类型,对于虚拟的传感器类型,是有上层应用融合而成,此处并不关注。struct lowerhalf_s表示一个具体的物理传感器类型,例如,加速度传感器。
191.在一些实施例中,根据传感器模组的类型,可分为:单芯片单传感器,例如iam20381,仅包含三轴加速度传感器;以及单芯片多传感器,例如,icm20948,九轴imu,包含加速度传感器、陀螺仪和磁力计。
192.可以理解的是,不同类型的传感器模组对应的驱动模型是不同的,对于集成多个传感器于一体的传感器模组,需要搭建多个struct lowerhalf_s桥梁,生成多个字符设备节点。如图8所示,图8是根据一示例性实施例示出的不同传感器模组的驱动模型的示意图。
193.在本示例中,所述应用层和所述senor服务层之间通过uorb接口进行交互。
194.需要说明的是,uorb接口是开源飞控px4中非常重要的接口模块,主要负责系统中各模块之间的数据传输。它是消息发布-订阅的中间件,并且uorb接口的实时完全不依赖线程和工作队列,主需要保证一些全局数据的初始化,它的通信是基于多进程间的共享内存实现的。
195.所述uorb接口属于异步通信机制,其中有两个角色,一个是发布者,可以通过uorb接口将产生的数据以主题的形式发布;一个是订阅者,可以通过uorb接口将关注的信息以主题的形式订阅。由于发布者和订阅者使用完全分离的存储空间,所以它们不会互相影响和等待。
196.uorb接口具有最优的代码量并且能够提供低时延的数据交换,接口的实现是基于系统调用:open,read,write,close,ioctl等操作函数接口;uorb的移植也非常简单,只需要使用系统的lib c++库共同参与编译,解决一些编译报错问题即可移植成功。
197.所述主题可以是具体的传感器数据,例如加速度计数据;或者,可以是系统所产生的的任何中间量;每一个主题都会有特定且唯一的名称和对应的结构体,所述结构体内包含主题状态的描述,例如,加速度计对应的结构体内包含x,y,z三轴加速度矢量和时间戳消息。
198.sensor服务层可使用orb_advertise、orb_advertise_multi等uorb接口广播系统内所有传感器的主题,当应用层有应用程序使用orb_subscribe、orb_subscribe_multi订阅指定的传感器主题时,sensor服务层将会收到通知,将与驱动层交互,以打开传感器硬件。
199.在本示例中,所述控制系统中包括:第一类传感器和第二类传感器;其中,所述第一类传感器为仅具备预设功能的传感器。
200.所述第一类传感器由sensor服务层统一管理,所述第二类传感器为自定义类型的传感器,由上层应用进行控制管理,可对所述第二类传感器进行非常规操作,实现复杂功能控制。
201.需要说明的是,sensor驱动层面向用户会注册成一个字符设备节点,对于应用层或sensor服务层,通过对字符设备节点进行打开、读取等操作,以控制所述字符设备节点对应的传感器。
202.对于第一类传感器,可通过实例lowerhalf指针和设备号注册字符设备节点;
203.int sensor_register(structsensor_lowerhalf_s*dev,int devno);
204.void sensor_unregister(structsensor_lowerhalf_s*dev,int devno);
205.其中,第一类传感器设备的upper层会通过传感器的类型,确定所述字符设备节点的名称和id。其中所述第一类传感器可为25种预设类型的传感器。
206.对于第二类传感器,可通过实例化lowerhalf指针和设备节点地址以及自定义的sensorevent buffer大小注册第二类传感器的字符设备节点。
207.int sensor_custom_redister(structsensor_lowerhalf_s*lower,const char*path,uint8_tesize);
208.void sensor_custom_unregister(far structsensor_lowerhalf_s*lower,const char*path);
209.可以理解的是,由于第二类传感器不仅仅具备预设功能,还具备其他功能,因而需要为第二类传感器的其他功能自定义接口。
210.在本示例中,对于第一类传感器,应用层的应用程序app可以不直接访问字符设备节点来控制和获取传感数据,而是通过uorb接口对sensor服务层发布的传感数据的主题信息进行订阅,以获取传感数据。
211.在控制系统启动过程中,sensor服务层会扫描控制系统中已注册的所有第一类传感器,根据所述第一类传感器的类型,确定所述第一类传感器感测的传感数据的主题信息;通过uorb接口向应用层广播所述传感数据的主题信息,以便应用层根据所述主题信息,确定是否需要对所述传感数据进行订阅。
212.在一些实施例中,若服务层未检测到应用层对所述主题信息的订阅请求,sensor服务层可将传感器关闭,以节省功耗。
213.步骤s202,响应于应用层对至少一个主题信息的订阅请求,服务层向所述驱动层的第一子层下发控制指令;所述控制指令用于触发所述第一子层从相连的传感器读取目标传感数据,并将所述目标传感数据写入所述驱动层的第二子层的存储空间内;
214.在本示例中,应用层根据所述sensor服务层广播的传感数据的主题信息,确定自身所需的传感数据,并对该传感数据对应的主题信息进行订阅;当sensor服务层检测到应用层对至少一个主题信息的订阅请求后,sensor服务层通过控制sensor驱动层的lower层打开传感器的中断,获取传感数据;并将传感数据上报至upper层,以存储至所述upper层的存储空间内。
215.在一些实施例中,所述方法还包括:
216.服务层向所述第一子层下发参数调整指令;所述参数调整指令用于触发第一子层调整采集参数,基于调整后的采集参数从相连传感器读取目标传感数据,并将所述目标传感数据写入所述第二子层的存储空间内;
217.在本示例中,应用层可根据自身需求对控制系统中的传感器进行控制,应用层可通过调用uorb接口,向sensor服务层发送参数设置信息;sensor服务层根据所述参数设置
信息,对所述lower层下发参数调整指令;第一子层接收到所述参数调整指令后,根据所述参数调整指令所指示的采集参数,从相连的传感器读取目标传感数据,并将读取的目标传感数据写入upper层的存储空间内。
218.所述采集参数包括:
219.传感数据的采集频率;
220.和/或,传感数据的采集模式,其中,不同的采集模式对应服务层从所述环形存储空间读取传感数据的预设长度不同和/或读取方式不同。
221.在本示例中,应用层的应用程序可通过调用uorb的接口orb_set_interval,来设置传感器的采样频率;当存在多个应用程序设置不同的采样频率时,sensor服务层确定出最大采样频率,并基于最大采样频率生成参数调整指令,以发送给lower层;sensor服务层获取到基于最大采样频率采集的传感数据后,uorb内部会对所述最大采样频率的传感数据进行降采样处理,分别得到不同采样频率的传感数据,并分别发送给不同应用程序。
222.所述传感数据的采集模式可包括:fifo模式、轮询模式和中断控制模式;不同的采集模式对应服务层从所述环形存储空间读取传感数据的预设长度不同和/或读取方式不同。
223.步骤s203,在监测到所述第二子层的存储空间存储的数据更新后,服务层从所述存储空间的读指针指示的数据读取位置开始,顺序读取所述存储空间中预设长度的传感数据;并将所述读指针移动至当前读取位置的下一位置。
224.在本示例中,所述存储空间为环形存储空间;
225.在所述环形存储空间的第二存储地址被占用之后,目标传感数据被写入所述环形存储空间的第一存储地址,其中,所述第一存储位置为所述环形存储空间对应的存储区域的起始存储地址;所述第二存储地址为所述环形存储空间对应的存储区域的末尾存储地址
226.在lower层从传感器获取到传感数据后并传输至upper层后,upper层判断所述环形存储空间的第二存储地址是否被占用,确定所述环形存储空间是否已满;若所述环形存储空间的第二存储地址未被占用,即所述环形存储空间未满,可在所述环形存储空间中已存储数据的存储位置之后,存储目标传感数据;若所述环形存储空间的第二存储地址被占用,即所述环形存储空间已满,可将目标传感数据存储至所述环形存储空间的第一存储地址,即将所述第一环形存储空间的第一存储地址存储的数据覆盖。
227.可以理解的是,通过将upper层的存储空间设置为环形存储空间,从而不需要频率的分配内存,同时也能够有效避免出现溢出的情况;弥补应用程序因卡顿、延迟、未及时读取,造成的数据丢失问题。
228.在本示例中,可根传感数据的读取模式,确定读取所述目标传感数据的预设长度;当sensor服务层监测到upper层的存储空间存储的数据更新后,sensor服务层从所述存储空间的读指针指示的数据读取位置开始,按照顺序读取出预设长度的传感数据,并将读指针移动至当前读取位置的下一位置,以便于下一次读取。
229.步骤s204,服务层向所述应用层发布所述目标传感数据;
230.在本示例中,服务层获取到目标传感数据后,通过uorb接口发布所述目标传感数据,应用层中订阅所述目标传感数据的主题信息的应用程序通过uorb接口接收所述目标传感数据。
231.步骤s205,应用层通过预设的操作函数接口向控制系统内已注册的第二类传感器下发控制指令;所述控制指令用于触发所述第二类传感器的驱动层调用与所述操作函数接口对应的操作函数,执行所述控制指令,并将执行结果通过所述操作函数接口传输至所述应用层。
232.在本示例中,由于第二类传感器的操作不通用,事件类型不确定,因而不能被sensor服务层统一管理,当应用层的应用程序需要使用系统调用对第二类传感器的字符设备节点直接访问,从而对第二类传感器进行控制。
233.需要说明的是,对于标准类型的传感器,当sensor服务层的控制不能满足产品需求时,即除了激活、采集率设置以及批处理之外,还需要对传感器进行额外的控制,可通过control接口,单独设置控制命令,并设置给该字符设备节点,从而将控制命令传输至传感器的驱动层,以便驱动层对该控制命令进行响应。
234.示例性地,如图9所示,图9是根据一示例性实施例示出的一种控制方法的流程示意图三。
235.步骤s301,启动控制系统;
236.步骤s302,服务层扫描并打开控制系统内所有第一类传感器的字符设备文件,得到文件句柄;
237.步骤s303,服务层向应用层广播所述第一类传感器的传感数据的主题信息,得到广告句柄;
238.步骤s304,将所有的文件句柄和广告句柄加入epoll队列进行监控;
239.步骤s305,判断句柄的句柄类型,若所述句柄为广告句柄,执行步骤s306;若所述句柄为文件句柄,执行步骤s307;
240.步骤s306,根据所述广告句柄,服务层控制对应的传感器的激活状态、采样率以及批处理模式;
241.步骤s305,根据所述文件句柄,服务层控制对应的驱动层获取传感器的传感数据。
242.在本示例中,服务层统一管理控制系统内所有第一类传感器,而对于第二类传感器,由于其操作不通用,传感数据类型不确定,导致其无法被服务层统一管理,因此应用程序需要使用系统调用,以访问所述第二类传感器的字符设备。
243.由于本示例引入了服务层将所述应用层和传感器的驱动层完全解耦,故在进行应用程序开发的过程中,不需要考虑到传感器的驱动程序。下面,本示例还提供了一种软件算法开发的模型,如图10所示,图10是根据一示例性实施例示出的一种应用程序开发的框架示意图。
244.当传感器未校准的传感数据由服务层通过字符设备节点读取,并由uorb接口发布时,校准算法应用程序可以通过订阅未校准的传感数据的主题信息以获取未校准的传感数数据,并在完成对所述未校准的传感数据的校准处理后,将校准的传感数据发布;运动算法应用程序可以通过订阅校准的传感数据的主题信息和未校准的传感数据的主题信息,获取校准的传感数据和未校准的传感数据。
245.如此,通过引入服务层将应用层与传感器的驱动层完全解耦,使得底层的传感器硬件发生更换时,不需要改变上层算法逻辑和任何中间变量,减少工作量,提高应用程序开发效率。
246.本公开实施例还提供一种控制装置。图11是根据一示例性实施例示出的一种控制装置的结构示意图,如图11所示,所述应用于控制系统,所述控制系统包括:应用层、服务层和多个驱动层,所述控制装置100包括:
247.广播模块101,用于服务层向应用层广播传感数据的主题信息,其中,不同传感数据由不同的传感器感测生成;
248.第一获取模块102,用于响应于应用层对至少一个主题信息的订阅请求,服务层控制至少一个所述主题信息对应的驱动层从传感器读取目标传感数据;
249.发布模块103,用于服务层向所述应用层发布所述目标传感数据。
250.可选地,所述驱动层包括:
251.第一子层,其中,不同的所述第一子层,包含不同传感器的的驱动程序,用于与所述传感器交互;
252.第二子层,为不同所述传感器共用的通用驱动子层,通过与所述第一子层交互,提供供传感数据写入的存储空间。
253.可选地,所述存储空间为环形存储空间;
254.在所述环形存储空间的第二存储地址被占用之后,目标传感数据被写入所述环形存储空间的第一存储地址,其中,所述第一存储位置为所述环形存储空间对应的存储区域的起始存储地址;所述第二存储地址为所述环形存储空间对应的存储区域的末尾存储地址。
255.可选地,所述第一获取模块102,用于:
256.服务层向所述第一子层下发控制指令;所述控制指令用于触发所述第一子层从相连的传感器读取目标传感数据,并将所述目标传感数据写入所述第二子层的存储空间内;服务层监测到所述第二子层的存储空间存储的数据更新后,从所述第二子层的存储空间获取所述目标传感数据。
257.可选地,所述第一获取模块102,用于:
258.服务层向所述第一子层下发参数调整指令;所述参数调整指令用于触发第一子层调整采集参数,基于调整后的采集参数从相连传感器读取目标传感数据,并将所述目标传感数据写入所述第二子层的存储空间内;
259.服务层监测到所述第二子层的存储空间存储的数据更新后,从所述第二子层的存储空间获取所述目标传感数据。
260.可选地,所述采集参数包括:
261.传感数据的采集频率;
262.和/或,传感数据的采集模式,其中,不同的采集模式对应服务层从所述环形存储空间读取传感数据的预设长度不同和/或读取方式不同。
263.可选地,所述第一获取模块102,还用于:
264.在监测到所述第二子层的存储空间存储的数据更新后,服务层从所述存储空间的读指针指示的数据读取位置开始,顺序读取所述存储空间中预设长度的传感数据;
265.并将所述读指针移动至当前读取位置的下一位置。
266.可选地,所述广播模块101,用于:
267.服务层获取控制系统内的已注册的第一类传感器的类型信息;
268.基于所述第一类传感器的类型信息,确定所述第一类传感器感测的传感数据的主题信息;其中,所述第一类传感器为仅具备预设功能的传感器;
269.服务层向所述应用层广播所述第一类传感器感测的传感数据的主题信息。
270.可选地,所述装置还包括:第二获取模块,用于:
271.应用层通过预设的操作函数接口向控制系统内已注册的第二类传感器下发控制指令;
272.所述控制指令用于触发所述第二类传感器的驱动层调用与所述操作函数接口对应的操作函数,执行所述控制指令,并将执行结果通过所述操作函数接口传输至所述应用层。
273.图12是根据一示例性实施例示出的一种控制装置的框图。例如,装置800可以是移动电话,移动电脑等。
274.参照图12,装置800可以包括以下一个或多个组件:处理组件802,存储器804,电源组件806,多媒体组件808,音频组件810,输入/输出(i/o)的接口812,传感器组件814,以及通信组件816。
275.处理组件802通常控制装置800的整体操作,诸如与显示,电话呼叫,数据通信,相机操作和记录操作相关联的操作。处理组件802可以包括一个或多个处理器820来执行指令,以完成上述的方法的全部或部分步骤。此外,处理组件802可以包括一个或多个模块,便于处理组件802和其他组件之间的交互。例如,处理组件802可以包括多媒体模块,以方便多媒体组件808和处理组件802之间的交互。
276.存储器804被配置为存储各种类型的数据以支持在设备800的操作。这些数据的示例包括用于在装置800上操作的任何应用程序或方法的指令,联系人数据,电话簿数据,消息,图片,视频等。存储器804可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(sram),电可擦除可编程只读存储器(eeprom),可擦除可编程只读存储器(eprom),可编程只读存储器(prom),只读存储器(rom),磁存储器,快闪存储器,磁盘或光盘。
277.电源组件806为装置800的各种组件提供电力。电源组件806可以包括电源管理系统,一个或多个电源,及其他与为装置800生成、管理和分配电力相关联的组件。
278.多媒体组件808包括在所述装置800和用户之间的提供一个输出接口的屏幕。在一些实施例中,屏幕可以包括液晶显示器(lcd)和触摸面板(tp)。如果屏幕包括触摸面板,屏幕可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。所述触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与所述触摸或滑动操作相关的持续时间和压力。在一些实施例中,多媒体组件808包括一个前置摄像头和/或后置摄像头。当设备800处于操作模式,如拍摄模式或视频模式时,前置摄像头和/或后置摄像头可以接收外部的多媒体数据。每个前置摄像头和后置摄像头可以是一个固定的光学透镜系统或具有焦距和光学变焦能力。
279.音频组件810被配置为输出和/或输入音频信号。例如,音频组件810包括一个麦克风(mic),当装置800处于操作模式,如呼叫模式、记录模式和语音识别模式时,麦克风被配置为接收外部音频信号。所接收的音频信号可以被进一步存储在存储器804或经由通信组件816发送。在一些实施例中,音频组件810还包括一个扬声器,用于输出音频信号。
280.i/o接口812为处理组件802和外围接口模块之间提供接口,上述外围接口模块可以是键盘,点击轮,按钮等。这些按钮可包括但不限于:主页按钮、音量按钮、启动按钮和锁定按钮。
281.传感器组件814包括一个或多个传感器,用于为装置800提供各个方面的状态评估。例如,传感器组件814可以检测到设备800的打开/关闭状态,组件的相对定位,例如所述组件为装置800的显示器和小键盘,传感器组件814还可以检测装置800或装置800一个组件的位置改变,用户与装置800接触的存在或不存在,装置800方位或加速/减速和装置800的温度变化。传感器组件814可以包括接近传感器,被配置用来在没有任何的物理接触时检测附近物体的存在。传感器组件814还可以包括光传感器,如cmos或ccd图像传感器,用于在成像应用中使用。在一些实施例中,该传感器组件814还可以包括加速度传感器,陀螺仪传感器,磁传感器,压力传感器或温度传感器。
282.通信组件816被配置为便于装置800和其他设备之间有线或无线方式的通信。装置800可以接入基于通信标准的无线网络,如wi-fi,2g或3g,或它们的组合。在一个示例性实施例中,通信组件816经由广播信道接收来自外部广播管理系统的广播信号或广播相关信息。在一个示例性实施例中,所述通信组件816还包括近场通信(nfc)模块,以促进短程通信。例如,在nfc模块可基于射频识别(rfid)技术,红外数据协会(irda)技术,超宽带(uwb)技术,蓝牙(bt)技术和其他技术来实现。
283.在示例性实施例中,装置800可以被一个或多个应用专用集成电路(asic)、数字信号处理器(dsp)、数字信号处理设备(dspd)、可编程逻辑器件(pld)、现场可编程门阵列(fpga)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述方法。
284.在示例性实施例中,还提供了一种包括指令的非临时性计算机可读存储介质,例如包括指令的存储器804,上述指令可由装置800的处理器820执行以完成上述方法。例如,所述非临时性计算机可读存储介质可以是rom、随机存取存储器(ram)、cd-rom、磁带、软盘和光数据存储设备等。
285.本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本公开旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。
286.应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。