电子设备硬件请求注册管理的装置及方法与流程

文档序号:12747903阅读:267来源:国知局
电子设备硬件请求注册管理的装置及方法与流程

本发明涉及电子设备硬件请求注册管理的装置及方法。



背景技术:

微型电子计算机、移动终端等电子设备在日常生活中发挥着越来越重要的作用,已经有一些技术方案(例如申请号201410140964.6、名称为“电子系统”的中国发明专利申请)将两个甚至两个以上的电子设备连接在一起,作为一个整体工作。将两个电子设备连接在一起工作时,往往一个电子设备操作系统中的软件或程序会调用另一个电子设备的硬件,这就可能产生很多问题。例如,两个电子设备的操作系统不同,彼此间没有通知模式,其中一个电子设备的操作系统无法了解另一个电子设备的硬件状态;很多操作系统没有设置安全验证,可能导致其软件或程序对另一个电子设备的硬件进行了超越权限的操作,造成错误;很多操作系统不支持多进程多线程硬件请求等等。如何有效解决这些问题,尚未见报道。

在说明书“背景技术”部分公开的内容,有助于本领域技术人员理解本发明的技术方案,但不应据此认为这些内容一定属于现有技术或公知常识。



技术实现要素:

为了克服“背景技术”部分所反映的缺陷,本发明提供及电子设备硬件请求注册管理的装置及方法。

电子设备硬件请求注册管理的装置,包括服务端和客户端,所述的服务端用于管理客户端的连接,验证客户端的硬件操作权限,将硬件状态值通知已连接的客户端,还用于监测硬件是否异常,还用于处理内核上报事件;所述的客户端用于提供需求端连接服务端的接口。

进一步的,所述的服务端、客户端和需求端位于第一电子设备,所述的硬件为第二电子设备的硬件,所述的内核上报事件包括第二电子设备接入或脱离第一电子设备以及第二电子设备电源的状态。

进一步的,所述的客户端为动态库。

进一步的,所述的服务端在客户端连接后检测客户端是否异常。

进一步的,所述的服务端通过成员个固定的数组管理客户端的连接。

进一步的,所述的硬件状态值存储在需求端的内存中。

进一步的,所述的客户端包括设定参数,所述的设定参数包括需求端的进程号及客户端的线程号、客户端连接服务端的文件描述符、连接标识、强制关闭标识和回调通知标识。

电子设备硬件请求注册管理的方法,包括:

需求端调用客户端设定的接口,设置客户端的状态为“初始”;

设置客户端状态为“注册中”,连接服务端,如果连接成功则设置客户端状态为“已注册”,如果连接失败则报告错误;

客户端成功连接服务端后,服务端检测客户端是否异常,如果客户端无异常则初始化设定参数;

客户端将硬件状态值存储在需求端的内存中或者回调硬件状态值给需求端。

进一步的,所述的方法设置客户端状态前先加线程锁,设置完成后再解除线程锁。

进一步的,所述的方法还包括,客户端对发出硬件操作请求命令的需求端进行有效性检查,所述的有效性检查包括比对全部或部分设定参数。

由于电子设备硬件请求注册管理的方法,与之前所述的电子设备硬件请求注册管理的装置具有关联性,为了避免不必要的重复,电子设备硬件请求注册管理的方法和电子设备硬件请求注册管理的装置中的一些描述进行了省略。本领域技术人员通过对照,能够对电子设备硬件请求注册管理的装置及方法有清晰、完整的认识。

本发明技术方案中,“包括”、“用于”等词语应按照开放式表达方式理解。本领域技术人员通过阅读本说明书并结合现有技术或公知常识能够获知的内容,本说明书中不再赘述。

本发明提供的电子设备硬件请求注册管理的装置及方法,能够实现第一电子设备操作系统支持多进程多线程访问第二电子设备的硬件,第一电子设备操作系统能够及时了解第二电子设备硬件的状态,同时还能对第一电子设备操作系统的软件或程序操作第二电子设备硬件的权限进行有效的安全验证,避免越权操作产生错误。

附图说明

图1为具体实施方式中服务端、客户端和需求端之间关系的简化示意图。

图2为具体实施方式中电子设备硬件请求注册管理的方法的流程图。

具体实施方式

下面对本发明的实施方式进行进一步的具体说明。但应注意,本发明的范围并不局限于所描述的具体技术方案。任何对所描述的具体技术方案中的技术要素进行相同或等同替换获得的技术方案或本领域技术人员在所描述的具体技术方案的基础上不经过创造性劳动就可以获得的技术方案,都应当视为落入本发明的保护范围。

本发明技术方案特别适用于两个电子设备连接在一起作为一个整体工作的情形。连接在一起的两个电子设备都具有操作系统,第一电子设备的操作系统选取为Linux系统或者在Linux系统基础上开发的Android系统,而第二电子设备的操作系统选取为IOS系统(美国苹果公司开发的操作系统)。由于Linux系统或者Android系统是开源系统,而IOS系统是封闭系统,为了方便实现连接,将第一电子设备设定为主设备而将第二电子设备设定为从设备。在第二电子设备的操作系统中,设置一个专用的软件或程序(以下简称IOS APP)来管理第二电子设备与第一电子设备的连接。

当两个电子设备连接在一起作为一个整体工作时,各电子设备的操作系统调用对方的硬件非常普遍。例如两个电子设备都是手机等移动终端时,经常相互调用对方的摄像头、麦克风、扬声器及各种传感器等硬件。在第一电子设备的操作系统中设置三类软件或程序,一类为服务端(以下简称Server),服务端能够按照预先设定的协议直接调用第二电子设备的硬件;一类为需求端(以下简称Demand),是第一电子设备的操作系统中有调用第二电子设备硬件需求的软件或程序的统称,需求端必须通过服务端来调用第二电子设备的硬件;一类为客户端(以下简称Client),客户端用于提供需求端连接服务端的接口,通常客户端为动态库(包含可由多个程序同时使用的代码和数据的库)。服务端、客户端和需求端之间的关系如图1所示(图1进行了一定的简化)。需求端通过客户端连接服务端的机制,可以视为需求端向服务端注册,服务端和客户端共同构成电子设备硬件请求注册管理的装置。

由于Server的功能较多,通常会设置多个线程分别执行不同的功能。信号是一种软件中断,提供了一种处理异步事件的方法,也是进程间惟一的异步通信方式。在Linux系统中,根据POSIX标准扩展以后的信号机制,不仅可以用来通知某进程发生了什么事件,还可以给进程传递数据。因此在Server中首先配置信号处理函数,根据不同的信号,Server设置三个线程执行不同的功能。

Server的子线程A,用于管理客户端的连接,验证客户端的硬件操作权限。Server和Client使用本地socket(两个程序通过一个双向的通信连接实现数据交换时,这个连接的一端称为一个socket)连接。第一电子设备操作系统中哪些软件或程序有权对第二电子设备的硬件进行设置等操作,在两个电子设备连接之前就可以设定好。由于操作系统中的软件或程序在运行时要么是独立的进程,要么是进程下的若干个线程,而Client为这些进程或线程连接Server提供接口,通过进程号、线程号等信息的完全可以进行硬件操作权限的验证。为了提高安全性,可以采用加密验证的方式。

通常Server对同时连接的Client的数量不做限制,但在一些特殊情况下Server只能同时连接有限个Client,这时子线程A通过成员个固定的数组管理Client的连接。该数组的成员为0、1两个值,0代表无Client连接,1代表已有Client连接。初始数组所有的成员都为0。有Client请求连接时,子线程A查找该数组中有无成员为0,若有则允许Client连接,Client连接成功后将该成员修改为1,Client连接关闭后再将该成员修改为0。如果数组中所有的成员都是1,则不允许新的Client连接。这样,统计数组中为1的成员的个数,就可以知道Server连接了几个Client。此外,Server对Client连接的增加、删除等操作,不需要移动数组成员,实现了O(n)的复杂度。

在Client与Server成功连接后,子线程A还要检测客户端是否异常(通俗的说,即检测Client的死活)。具体的检测方式,可以由子线程A向Client发送预先设定的消息,如果该消息通过socket发送失败,则视为Client异常。对于异常的Client,子线程A直接关闭与其的连接。如果Client为动态库,Demand调用Client提供的接口,Client作为Demand的子线程运行,可能因为自身问题产生崩溃、退出等异常,子线程A在Client成功连接后立即检测Client是否异常,可以有效避免异常Client继续连接Server,浪费资源。对于无异常的Client连接,子线程A读取Client的请求命令。如果Client希望了解第二电子设备的硬件状态,子线程A将按照预先设定的协议获取的第二电子设备硬件的硬件状态值(硬件状态值是预先设定的代表不同硬件状态的参数,往往在第一电子设备和第二电子设备连接之前就设定好了)通知Client。Client可以将硬件状态值存储在需求端的内存(即Demand进程本身使用的内存)中,这样Demand可以直接从自己使用的内存中读取硬件状态值,不必再为此和Server通信。通知的方式可以是独播或广播,广播较为常用,广播的优点一可以初始化Demand需要的各种硬件状态值,二可以检测此时Client是否异常。如果Client希望操作第二电子设备的硬件,子线程A验证Client的硬件操作权限没有问题后,可以按照预先设定的协议,由其自身或转给相关软件或程序执行。

Server的子线程B,用于监测第二电子设备的硬件是否异常(通俗的说,即监测硬件的死活)。监测采用心跳的方式,但不同于传统的心跳,子线程B会监测IOS APP所反映的任何硬件状态的变化(尽管硬件状态的变化不一定就代表硬件异常)。如果子线程B发现第二电子设备的某一硬件异常,可以通知所有已和Server连接的Client,通知的方式同样是独播或广播。

Server的主线程,用于处理内核上报事件,并将相关事件通知已和Server连接的Client。所述的内核上报事件,指由操作系统的内核(操作系统的最基本部分)监测并通知Server的事件。本发明技术方案中,主要的内核上报事件是第二电子设备接入或脱离第一电子设备(由于电子设备的连接经常会涉及霍尔传感器,也可以称为霍尔事件)以及第二电子设备电源的状态(电量充足、电量不足等)。主线程的作用和子线程A、B不同,主线程并不关注第二电子设备某一个具体的硬件,而是关注两个电子设备连接过程中的重大事件并将这些重大事件通知已连接的Client,这些事件对Demand调用第二电子设备的硬件有重大影响。

在注册过程中,可以用设定参数来描述Server或Client需要的一些信息。常见的设定参数包括需求端的进程号及客户端的线程号、客户端连接服务端的文件描述符、连接标识、强制关闭标识和回调通知标识等。可以在Client中设置一个注册链表(以下简称client_register_list),Demand调用Client提供的接口后可以使用该链表,这样Server也可以查看该链表中的信息。该链表的节点用管理结构体(以下简称client_item)描述,client_item的成员包括:

1、需求端的进程号及客户端的线程号。Demand进程有其进程号(以下简称pid),Demand进程或进程下的线程调用Client提供的接口后会形成子线程,该子线程的线程号(以下简称tid)可以视为Client的线程号。pid和tid可以用于支持多进程多线程注册Server,并且可以作为链表进行增加、删除节点等操作的关键字(key)。

2、客户端连接服务端的文件描述符,即Client连接Server的socket文件描述符(以下简称fd)。fd可以用于Server标记Client,还可以作为Client向Server发送请求命令的关键字(key)。

3、连接标识,即Client是否已经连接到Server的标识(以下简称is_registered)。is_registered可以用于状态机的维护。

4、强制关闭标识(以下简称is_force_closed),用于标识Client和Server的连接是否执行了强制关闭。通常Client和Server的连接默认一直存在,不会强制关闭。但在一些特殊情况下,例如业务需要反复重启Demand进程,为了避免浪费资源,Server会强制关闭与Client的连接。

5、回调通知标识(以下简称cbp)。如果Demand采用Hollywood消息模式,不主动获取消息而是以回调的方式被动等待消息,则需要使用本标识。

与传统的本地socket连接相比,Server不仅支持多进程多线程注册,还可以强制关闭和Client的连接,释放Client在Server中申请的资源。

在以上所述技术方案的基础上,可以实现电子设备硬件请求注册管理的方法。电子设备硬件请求注册管理的方法的流程如图2所示,包括:

S201:需求端调用客户端设定的接口,设置客户端的状态为“初始”。

具体的,本步骤中,Client为动态库,提供可供调用的接口。Demand进程或进程下的线程调用该接口后,会启动一个子线程,该子线程维护一个状态机,还可以设置回调结构体以回调的形式通知调用接口的进程或线程。设置Client的状态为“初始(INIT)”并初始化上述回调结构体。

Client的状态,可以设置专用的结构体notify_event表示。notify_event有两个成员,一个是类型(表示Client的状态),一个是数据(表示状态的值)。

S202:设置客户端状态为“注册中”,连接服务端,如果连接成功则设置客户端状态为“已注册”,如果连接失败则报告错误。

具体的,本步骤中,设置Client的状态为“注册中(REGISTERING)”,通过socket的接口连接到Server。如果连接成功,则设置Client的状态为“已注册(REGISTERED)”。如果连接失败会先重试,重试一定次数仍失败,则Client向调用接口的进程或线程报告错误,同时还可以发送错误日志。

S203:客户端成功连接服务端后,服务端检测客户端是否异常,如果客户端无异常则初始化设定参数。

具体的,本步骤中,Client成功连接到Server后,会等待Server的数据,数据按照预先设定的协议发送。通常,Server的子线程A会首先向Client发送预先设定的消息,检测Client是否异常。如果Client收到该消息,可以认为自身与Server的连接无异常,则初始化设定参数,即对client_item的成员初始化,将它们加入到client_register_list中。

S204:客户端将硬件状态值存储在需求端的内存中或者回调硬件状态值给需求端。

具体的,本步骤中,Client进入消息循环,不断接收Server通知的硬件状态值,并针对Demand不同的消息模式采取不同的策略。如果Demand主动获取消息,则Client将硬件状态值存储在Demand进程本身使用的内存中,这样Demand可以直接从内存中读取数据,速度很快。如果Demand采用Hollywood消息模式被动等待消息,则Client收到硬件状态值后立即回调给Demand。

对于第一电子设备操作系统内核以上的软件或程序而言,第二电子设备的硬件被虚化为一个文件。该文件作为公共资源,会被多个通过Server连接过来的Client访问,还会被Server的子线程A和子线程B访问,在这样的设定下有必要使用线程锁对Client进行控制。因此,电子设备硬件请求注册管理的方法有一个特点,所有步骤中涉及到设置Client状态的,在设置Client状态前先加线程锁,设置完成后再解除线程锁。

Demand调用Client的接口,往往还会发出硬件操作请求命令,请求操作第二电子设备的硬件。此时,Client可以对发出硬件操作请求命令的Demand进行有效性检查。有效性检查包括比对保存在client_register_list中的设定参数和Demand实际的设定参数是否一致,两者完全一致才能通过检查。检查可以比对全部设定参数,但通常比对pid、tid、fd等部分设定参数即可。如果设定参数比对不一致,说明Demand未通过Client向Server注册过或者注册存在问题,对于其硬件操作请求命令Client应当拒绝。此外,Client中还可以保存Demand的其他参数,例如预先分配给Demand的ID。如果Demand发出某些特殊的硬件操作请求命令(例如强行设置两个电子设备之间的USB数据通道一直打开),此类硬件操作请求命令的风险较高,除了设定参数外Client还要额外比对ID等其他参数是否一致。

本领域技术人员在以上所描述的具体技术方案的基础上,完全可以构造出其他方案,在此不一一列举。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1