本发明涉及数据通信技术领域,尤其涉及一种数据通信方法、一种数据通信装置、一种多设备级联系统和一种数据通信系统。
背景技术:
目前在led(lightemittingdiode,发光二极管)显示屏控制领域中,嵌入式视频处理器一般用来支持大型led显示屏。在实际应用中,一台设备无法满足带载需求时,就需要多个嵌入式视频处理器级联在一起实现超大屏幕的输出。多个嵌入式设备(嵌入式视频处理器)之间的级联有多种方式,常见的有以太网级联和usb(universalserialbus,通用串行总线)级联。现有技术中的应用场景为一主多从,一般由pc作为主设备,级联多个嵌入式视频处理器作为从设备,但这样的方式无法满足多个级联的内嵌控制软件的嵌入式设备之间的数据通信。
技术实现要素:
因此,为克服现有技术中的至少部分缺陷和不足,本发明实施例提供了一种数据通信方法、一种数据通信装置、一种多设备级联系统和一种数据通信系统。
一方面,本发明实施例提供的一种数据通信方法,应用于一种嵌入式设备,且所述嵌入式设备包括usb从接口和usb主接口;所述数据通信方法包括:启动数据通信控制进程;在所述数据通信控制进程中创建第一消息队列和第二消息队列;在所述数据通信控制进程中创建第一线程、第二线程和第三线程,其中所述第一线程用于从对应所述usb从接口的第一缓存读取数据包,所述第二线程用于从对应所述usb主接口的第二缓存读取数据包;响应于所述第一线程从所述第一缓存读取到数据包,由所述第一线程向所述第一消息队列添加关联第一数据包的待处理队列项,其中所述第一数据包为由所述第一线程从所述第一缓存读取到的所述数据包;由所述第三线程根据所述第一消息队列中的所述待处理队列项获取所述第一数据包,并判断所述第一数据包是否属于自身的数据包;响应于所述第一数据包属于自身的数据包,由所述第三线程响应所述第一数据包得到第一反馈数据包,并将所述第一反馈数据包传送至所述usb从接口以供输出。
本实施例提供的数据通信方法通过启动数据通信控制进程,在所述数据通信控制进程中创建三个线程,通过第一线程和第二线程分别读取usb主、从接口的数据包、第三线程判断处理数据包并传送转发,实现了多个级联的内嵌控制软件的嵌入式设备之间的数据通信。此外,通过在数据通信控制进程中创建消息队列,第三线程通过消息队列获取第一线程读取的数据包,提高了数据传输的响应速度和稳定性,大大提高了数据通信的效率。
在本发明的一个实施例中,所述数据通信方法还包括:响应于所述第一数据包不属于自身的数据包,由所述第三线程将所述第一数据包传送至所述usb主接口以供输出至后级嵌入式设备;响应于所述第二线程从所述第二缓存读取到数据包,由所述第二线程向所述第二消息队列添加关联第二数据包的待处理队列项,其中所述第二数据包为由所述第二线程从所述第二缓存读取到的所述数据包、且为对应所述第一数据包的反馈数据包;由所述第三线程根据所述第二消息队列中的所述待处理队列项获取所述第二数据包,并判断所述第二数据包是否属于自身的数据包;响应于所述第二数据包不属于自身的数据包,由所述第三线程将所述第二数据包传送至所述usb从接口以供输出。
在本发明的一个实施例中,所述第一消息队列和所述第二消息队列分别为双向循环链表。
另一方面,本发明实施例提供的一种数据通信装置,包括:启动模块,用于启动数据通信控制进程;第一创建模块,用于在所述数据通信控制进程中创建第一消息队列和第二消息队列;第二创建模块,用于在所述数据通信控制进程中创建第一线程、第二线程和第三线程,其中所述第一线程用于从对应usb从接口的第一缓存读取数据包,所述第二线程用于从对应usb主接口的第二缓存读取数据包;第一添加模块,用于响应于所述第一线程从所述第一缓存读取到数据包,由所述第一线程向所述第一消息队列添加关联第一数据包的待处理队列项,其中所述第一数据包为由所述第一线程从所述第一缓存读取到的所述数据包;第一获取模块,用于由所述第三线程根据所述第一消息队列中的所述待处理队列项获取所述第一数据包,并判断所述第一数据包是否属于自身的数据包;处理模块,用于响应于所述第一数据包属于自身的数据包,由所述第三线程响应所述第一数据包得到第一反馈数据包,并将所述第一反馈数据包传送至所述usb从接口以供输出。
本实施例的数据通信装置设置有启动模块、第一创建模块、第二创建模块、第一添加模块、第一获取模块和处理模块,从而可以通过启动数据通信控制进程,在所述数据通信控制进程中创建三个线程,通过第一线程和第二线程分别读取usb主、从接口的数据包、第三线程判断处理数据包并传送转发,实现了多个级联的内嵌控制软件的嵌入式设备之间的数据通信。此外,通过在数据通信控制进程中创建消息队列,第三线程通过消息队列获取第一线程读取的数据包,提高了数据传输的响应速度和稳定性,大大提高了数据通信的效率。
在本发明的一个实施例中,所述数据通信装置还包括:第一传送模块,用于响应于所述第一数据包不属于自身的数据包,由所述第三线程将所述第一数据包传送至所述usb主接口以供输出至后级嵌入式设备;第二添加模块,用于响应于所述第二线程从所述第二缓存读取到数据包,由所述第二线程向所述第二消息队列添加关联第二数据包的待处理队列项,其中所述第二数据包为由所述第二线程从所述第二缓存读取到的所述数据包、且为对应所述第一数据包的反馈数据包;第二获取模块,用于由所述第三线程根据所述第二消息队列中的所述待处理队列项获取所述第二数据包,并判断所述第二数据包是否属于自身的数据包;第二传送模块,用于响应于所述第二数据包不属于自身的数据包,由所述第三线程将所述第二数据包传送至所述usb从接口以供输出。
在本发明的一个实施例中,所述第一消息队列和所述第二消息队列分别为双向循环链表。
再一方面,本发明实施例提供的一种多设备级联系统,包括:依次级联的多个嵌入式设备;其中,所述多个嵌入式设备包括前级嵌入式设备和后级嵌入式设备;所述前级嵌入式设备包括第一嵌入式处理器和连接所述第一嵌入式处理器的第一usb从接口和第一usb主接口;所述后级嵌入式设备包括第二嵌入式处理器和连接所述第二嵌入式处理器的第二usb从接口和第二usb主接口,且所述第二usb从接口通过线缆连接所述前级嵌入式设备的所述第一usb主接口;所述第一嵌入式处理器用于:启动数据通信控制进程;在所述数据通信控制进程中创建第一消息队列和第二消息队列;在所述数据通信控制进程中创建第一线程、第二线程和第三线程,其中所述第一线程用于从对应所述第一usb从接口的第一缓存读取数据包,所述第二线程用于从对应所述第一usb主接口的第二缓存读取数据包;响应于所述第一线程从所述第一缓存读取到数据包,由所述第一线程向所述第一消息队列添加关联第一数据包的待处理队列项,其中所述第一数据包为由所述第一线程从所述第一缓存读取到的所述数据包;由所述第三线程根据所述第一消息队列中的所述待处理队列项获取所述第一数据包,并判断所述第一数据包是否属于自身的数据包;响应于所述第一数据包不属于自身的数据包,由所述第三线程将所述第一数据包传送至所述第一usb主接口以供输出至所述后级嵌入式设备;响应于所述第二线程从所述第二缓存读取到数据包,由所述第二线程向所述第二消息队列添加关联第二数据包的待处理队列项,其中所述第二数据包为由所述第二线程从所述第二缓存读取到的所述数据包、且为对应所述第一数据包的反馈数据包;由所述第三线程根据所述第二消息队列中的所述待处理队列项获取所述第二数据包,并判断所述第二数据包是否属于自身的数据包;响应于所述第二数据包不属于自身的数据包,由所述第三线程将所述第二数据包传送至所述第一usb从接口以供输出。
本实施例的多设备级联系统包括依次级联的多个嵌入式设备,级联的多个嵌入式设备通过前级嵌入式设备启动数据通信控制进程,在所述数据通信控制进程中创建三个线程,通过第一线程和第二线程分别读取usb主、从接口的数据包、第三线程判断处理数据包并传送转发,实现了多个级联的内嵌控制软件的嵌入式设备之间的数据通信。此外,通过在数据通信控制进程中创建消息队列,第三线程通过消息队列获取第一线程读取的数据包,提高了数据传输的响应速度和稳定性,大大提高了数据通信的效率。
在本发明的一个实施例中,所述第一消息队列和所述第二消息队列分别为双向循环链表。
在本发明的一个实施例中,所述第一嵌入式处理器和所述第二嵌入式处理器分别安装有linux操作系统。
又一方面,本发明实施例提供的一种数据通信系统,包括:处理器和存储器;其中,所述存储器存储由所述处理器执行的指令,且所述指令使得所述处理器执行操作以进行如前述的数据通信方法。
又一方面,本发明实施例提供的一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机程序,存储的所述计算机程序被处理器执行时能够实现如前述的数据通信方法。
上述一个或多个技术方案可以具有以下优点或有益效果:通过启动数据通信控制进程,在所述数据通信控制进程中创建三个线程,通过第一线程和第二线程分别读取usb主、从接口的数据包、第三线程判断处理数据包并传送转发,实现了多个级联的内嵌控制软件的嵌入式设备之间的数据通信。此外,通过在数据通信控制进程中创建消息队列,第三线程分别通过第一消息队列和第二消息队列获取第一线程和第二线程读取的数据包,提高了数据传输的响应速度和稳定性,大大提高了数据通信的效率。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明第一实施例的一种数据通信方法的流程示意图。
图2为本发明第一实施例的另一种数据通信方法的部分流程示意图。
图3为本发明第一实施例的一种多设备级联系统的结构示意图。
图4为图3中的多设备级联系统中的部分嵌入式设备之间的连接示意图。
图5为本发明第二实施例提供的一种数据通信装置的模块示意图。
图6为本发明第二实施例提供的另一种数据通信装置的模块示意图。
图7为本发明第三实施例提供的一种数据通信系统的结构示意图。
图8为本发明第四实施例提供的一种计算机可读存储介质的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
【第一实施例】
如图1所示,本发明第一实施例提供的一种数据通信方法,一般应用于多个级联的嵌入式设备,用于实现多个级联的嵌入式设备之间的数据通信,提高数据通信效率。所述数据通信方法应用于一种嵌入式设备,且所述嵌入式设备包括usb从接口和usb主接口,所述数据通信方法包括以下步骤:
s11,启动数据通信控制进程;
s12,在所述数据通信控制进程中创建第一消息队列和第二消息队列;
s13,在所述数据通信控制进程中创建第一线程、第二线程和第三线程,其中所述第一线程用于从对应所述usb从接口的第一缓存读取数据包,所述第二线程用于从对应所述usb主接口的第二缓存读取数据包;
s14,响应于所述第一线程从所述第一缓存读取到数据包,由所述第一线程向所述第一消息队列添加关联第一数据包的待处理队列项,其中所述第一数据包为由所述第一线程从所述第一缓存读取到的所述数据包;
s15,由所述第三线程根据所述第一消息队列中的所述待处理队列项获取所述第一数据包,并判断所述第一数据包是否属于自身的数据包;
s16,响应于所述第一数据包属于自身的数据包,由所述第三线程响应所述第一数据包得到第一反馈数据包,并将所述第一反馈数据包传送至所述usb从接口以供输出。
如图2所示,所述数据通信方法还包括步骤:
s17,响应于所述第一数据包不属于自身的数据包,由所述第三线程将所述第一数据包传送至所述usb主接口以供输出至后级嵌入式设备;
s18,响应于所述第二线程从所述第二缓存读取到数据包,由所述第二线程向所述第二消息队列添加关联第二数据包的待处理队列项,其中所述第二数据包为由所述第二线程从所述第二缓存读取到的所述数据包、且为对应所述第一数据包的反馈数据包;
s19,由所述第三线程根据所述第二消息队列中的所述待处理队列项获取所述第二数据包,并判断所述第二数据包是否属于自身的数据包;
s20,响应于所述第二数据包不属于自身的数据包,由所述第三线程将所述第二数据包传送至所述usb从接口以供输出。
在本实施例的一个具体实施方式中,所述第一消息队列和所述第二消息队列分别为双向循环链表。
为了便于更清楚地理解本实施例的数据通信方法,下面结合图3和图4,以本实施例的数据通信方法应用于多设备级联系统为例,对本实施例的数据通信方法进行详细说明。
图3示出了一种多设备级联系统,包括依次级联的多个嵌入式设备,多个嵌入式设备之间通过usb级联。具体地,参见图4,其示出了级联的多个嵌入式设备中的嵌入式设备n-1即前级嵌入式设备和嵌入式设备n即后级嵌入式设备。所述前级嵌入式设备包括第一嵌入式处理器和连接所述第一嵌入式处理器的第一usb从接口和第一usb主接口;所述后级嵌入式设备包括第二嵌入式处理器和连接所述第二嵌入式处理器的第二usb从接口和第二usb主接口,且所述第二usb从接口通过线缆可例如usb线连接所述前级嵌入式设备的所述第一usb主接口。
需要说明的是,上述前级嵌入式设备n-1和后级嵌入式设备n可例如为相同的嵌入式设备,第一嵌入式处理器和第二嵌入式处理器可例如为相同的嵌入式处理器,第一usb从接口和第二usb从接口可例如为相同的usb从接口,第一usb主接口和第二usb主接口可例如为相同的usb主接口。当然,本发明实施例并不以此为限。
具体地,以前级嵌入式设备为例,第一嵌入式处理器可例如为arm(advancedriscmachines)处理器,第一嵌入式处理器上可例如安装有linux操作系统,linux操作系统上可例如安装有控制软件;第一usb从接口可例如为usbotg接口,可例如使用mtp(mediatransferprotocol,媒体传输协议)驱动实现usb从接口的数据收发;第一usb主接口可例如为usbhost接口,可例如使用libusb实现usb主接口的数据收发。当然,本发明实施例并不以此为限。
为了方便说明,下面以前级嵌入式设备通过第一usb从接口连接上位机(例如pc)、通过第一usb主接口连接后级嵌入式设备的第二usb从接口为例,对前级嵌入式设备的数据通信过程进行描述。需要说明的是,第一usb从接口可以连接其他嵌入式设备,也可以连接上位机(例如pc),本发明实施例并不以此为限。
具体地,前级嵌入式设备可例如在开机启动时启动数据通信控制进程。在所述数据通信控制进程中创建第一消息队列和第二消息队列,其中,第一消息队列和第二消息队列分别为双向循环链表。在所述数据通信控制进程中创建第一线程、第二线程和第三线程,其中,第一线程用于从对应第一usb从接口的第一缓存读取数据包,即第一线程阻塞等待来自上位机通过第一usb从接口发送的数据包,第二线程用于从对应第一usb主接口的第二缓存读取数据包,即第二线程阻塞等待来自后级嵌入式处理器通过第一usb主接口发送的数据包,第三线程用于处理第一线程和第二线程接收的数据包。通过第一线程和第二线程分别阻塞等待第一usb从接口和第一usb主接口的数据包,大大提升了数据收发的效率。
当上位机发送第一数据包至第一usb从接口时,第一线程从第一usb从接口对应的第一缓存读取第一数据包,并向第一消息队列添加关联第一数据包的待处理队列项。第三线程根据第一消息队列中的待处理队列项获取第一数据包,并判断第一数据包是否属于自身的数据包,即判断第一数据包是否为发送给前级嵌入式设备的数据包。具体地,数据包可例如包括源地址和目标地址,第三线程根据目标地址判断第一数据包是否属于自身的数据包。
当判断第一数据包属于自身数据包时,前级嵌入式设备对第一数据包进行处理或根据第一数据包实现控制需求并收集数据进行反馈。具体地,由第三线程响应第一数据包得到第一反馈数据包,并将第一反馈数据包传送至第一usb从接口以供输出至上位机。
当判断第一数据包不属于自身数据包时,前级嵌入式处理器将第一数据包转发至后级嵌入式设备。具体地,由第三线程将所述第一数据包传送至第一usb主接口以供输出至后级嵌入式设备。
后级嵌入式设备接收第一数据包的过程与上述前级嵌入式设备类似,具体过程在此不再赘述。
承上述,当后级嵌入式设备将第一数据包的反馈包即第二数据包发送至前级嵌入式设备的第一usb主接口时,第二线程从第一usb主接口对应的第二缓存读取到第二数据包,并向第二消息队列添加关联第二数据包的待处理队列项。第三线程根据第二消息队列中的待处理队列项获取第二数据包,并判断第二数据包是否属于自身的数据包,当判断第二数据包不属于自身的数据包时,将第二数据包转发至上位机,具体地,由第三线程将第二数据包传输至第一usb从接口以供输出至上位机。
通过上述过程实现了级联的多个嵌入式设备之间的数据收发。值得一提的是,为了满足大数据量传输的需求,可以设置嵌入式设备中的所述第一缓冲和所述第二缓存的大小,来满足不同大小的数据包的传输。可例如设置第一缓存和第二缓存的大小分别为10m,这样一来发送端可按照自身业务需求进行数据包发送,10m以内大小的数据包都按照一包的方式传输,接收端自适应读取数据包大小。通过设置缓存的大小,使得数据传输大小自适应,大大提高了数据通信的交互速率。
此外,usb从接口和usb主接口使用了不同的usb驱动实现数据通信,为usb级联通信提供了支持。usb从接口可例如使用mtp驱动实现数据的收发;usb主接口可例如使用libusb无驱设计实现数据的收发,具体可例如通过以下步骤实现设备初始化、连接和读写等操作:libusb进行初始化;获取当前设备列表;查找目标设备;获取目标设备的端口信息;打开目标设备;探测目标设备的内核驱动程序;申请连接接口;加载连接接口的内核驱动程序;进行循环读写。在未查找到目标设备或未探测到目标设备的内核驱动程序时libusb退出。当然,以上仅为举例说明,本发明并不以此为限。
综上所述,本实施例的数据通信方法通过启动数据通信控制进程,在所述数据通信控制进程中创建三个线程,通过第一线程和第二线程分别读取usb主、从接口的数据包、第三线程判断处理数据包并传送转发,实现了多个级联的内嵌控制软件的嵌入式设备之间的数据通信。此外,通过在数据通信控制进程中创建消息队列,第三线程分别通过第一消息队列和第二消息队列获取第一线程和第二线程读取的数据包,提高了数据传输的响应速度和稳定性,大大提高了数据通信的效率。
【第二实施例】
如图5所示,本发明第二实施例提供了一种数据通信装置100。数据通信装置100例如包括启动模块101、第一创建模块102、第二创建模块103、第一添加模块104、第一获取模块105和处理模块106。
启动模块101,用于启动数据通信控制进程。
第一创建模块102,用于在所述数据通信控制进程中创建第一消息队列和第二消息队列。
第二创建模块103,用于在所述数据通信控制进程中创建第一线程、第二线程和第三线程,其中所述第一线程用于从对应usb从接口的第一缓存读取数据包,所述第二线程用于从对应usb主接口的第二缓存读取数据包。
第一添加模块104,用于响应于所述第一线程从所述第一缓存读取到数据包,由所述第一线程向所述第一消息队列添加关联第一数据包的待处理队列项,其中所述第一数据包为由所述第一线程从所述第一缓存读取到的所述数据包。
第一获取模块105,用于由所述第三线程根据所述第一消息队列中的所述待处理队列项获取所述第一数据包,并判断所述第一数据包是否属于自身的数据包。
处理模块106,用于响应于所述第一数据包属于自身的数据包,由所述第三线程响应所述第一数据包得到第一反馈数据包,并将所述第一反馈数据包传送至所述usb从接口以供输出。
参见图6,数据通信装置100还包括:第一传送模块107、第二添加模块108、第二获取模块109和第二传送模块110。
第一传送模块107,用于响应于所述第一数据包不属于自身的数据包,由所述第三线程将所述第一数据包传送至所述usb主接口以供输出至后级嵌入式设备。
第二添加模块108,用于响应于所述第二线程从所述第二缓存读取到数据包,由所述第二线程向所述第二消息队列添加关联第二数据包的待处理队列项,其中所述第二数据包为由所述第二线程从所述第二缓存读取到的所述数据包、且为对应所述第一数据包的反馈数据包。
第二获取模块109,用于由所述第三线程根据所述第二消息队列中的所述待处理队列项获取所述第二数据包,并判断所述第二数据包是否属于自身的数据包。
第二传送模块110,用于响应于所述第二数据包不属于自身的数据包,由所述第三线程将所述第二数据包传送至所述usb从接口以供输出。
在本实施例的一个具体实施方式中,所述第一消息队列和所述第二消息队列分别为双向循环链表。
本实施例中的数据通信装置100中的各模块之间的具体工作过程和技术效果参见前述第一实施例的描述。
【第三实施例】
参见图7,本发明第三实施例提供了一种数据通信系统200。数据通信系统200例如包括存储器220和与存储器220连接的处理器210。存储器220可例如为非易失性存储器,其上存储有计算机程序221。处理器210可例如为嵌入式处理器。处理器210运行计算机程序221时执行前述第一实施例中的数据通信方法。
【第四实施例】
如图8所示,本发明第四实施例提供了一种计算机可读存储介质300。计算机可读存储介质300例如为非易失性存储器,其例如为:磁介质(如硬盘、软盘和磁带),光介质(如cdrom盘和dvd),磁光介质(如光盘)以及专门构造为用于存储和执行计算机可执行指令的硬件装置(如只读存储器(rom)、随机存取存储器(ram)、闪存等)。计算机可读存储介质300上存储有计算机可执行指令310。计算机可读存储介质300可由一个或多个处理器或处理装置来执行计算机可执行指令310,以实施前述第一实施例中的数据通信方法。
此外,可以理解的是,前述各个实施例仅为本发明的示例性说明,在技术特征不冲突、结构不矛盾、不违背本发明的发明目的前提下,各个实施例的技术方案可以任意组合、搭配使用。
在本发明所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多路单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多路网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元/模块可以集成在一个处理单元/模块中,也可以是各个单元/模块单独物理存在,也可以两个或两个以上单元/模块集成在一个单元/模块中。上述集成的单元/模块既可以采用硬件的形式实现,也可以采用硬件加软件功能单元/模块的形式实现。
上述以软件功能单元/模块的形式实现的集成的单元/模块,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)的一个或多个处理器执行本申请各个实施例所述方法的部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-onlymemory,简称rom)、随机存取存储器(randomaccessmemory,简称ram)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。