CN102819430B - 一种在linux环境下实现串行通信接口的装置及方法 - Google Patents
一种在linux环境下实现串行通信接口的装置及方法 Download PDFInfo
- Publication number
- CN102819430B CN102819430B CN201210234336.5A CN201210234336A CN102819430B CN 102819430 B CN102819430 B CN 102819430B CN 201210234336 A CN201210234336 A CN 201210234336A CN 102819430 B CN102819430 B CN 102819430B
- Authority
- CN
- China
- Prior art keywords
- module
- glib
- serial
- serial ports
- busapi
- 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.)
- Expired - Fee Related
Links
Landscapes
- Debugging And Monitoring (AREA)
- Information Transfer Systems (AREA)
Abstract
本发明涉及在linux环境下实现串行通信接口的装置,该装置基于glib库并使用d-bus作为进程间通信软件,包括:通过串口与微处理器进行通信的串口设备模块;glib模块,使用glib库设置串口缓冲与读取机制;d-bus?API模块,使用d-bus?API实现glib模块与上层应用模块之间的通信;上层应用模块,使用各种支持d-bus技术的语言编写相应的应用代码以实现所需要的串口功能。本发明使得用户可以实现自己需要的UI与相应的功能,便于设备开发时的调试与使用。
Description
技术领域
本发明属于计算机领域,尤其涉及一种在linux环境下实现串行通信接口的装置及方法。
背景技术
串行通信接口简称串口,是计算机上最常用的一种接口,具有成本低廉,使用简单,只需要一对传输线就可以实现双向通信等优点。由于这些优点,有很多设备使用串口与计算机进行通信,包括蓝牙设备,GPS设备,GPRS设备等等。目前,由于通用串行总线的易用性与支持热插拔和即插即用等优点,这些设备逐渐地使用通用串行总线虚拟出串口与计算机进行通信。目前各个linux发行版中一般自带使用异步传输协议与串口的软件,比如支持xmodem协议的minicom,等。但是这些软件仅仅具有简单的输入输出功能,不能满足设备开发时的调试与使用需求。
发明内容
鉴于现有技术的缺陷,本发明提供一种在linux环境下实现串行通信接口的装置,该装置基于glib库,并使用d-bus作为进程间通信软件,包括:
串口设备模块,通过串口与微处理器进行通信;
glib模块,使用glib库设置串口缓冲与读取机制;
d-busAPI模块,使用d-busAPI实现glib模块与上层应用模块之间的通信;
上层应用模块,使用各种支持d-bus技术的语言编写相应的应用代码以实现所需要的串口功能。
进一步,根据本发明的装置,在操作系统的用户层通过read函数获得串口设备描述符,设置串口参数,与串口建立通信关系,并保存相关参数。
进一步,本发明装置中所述glib模块进一步包括,
第一模块,用于使用glib库的GkeyFile技术将串口参数保存成可读写配置文件;以及
第二模块,用于使用glib库的GIO技术对串口设备进行缓存,并实现串口设备和本装置之间的数据交互。
进一步,本发明装置中所述d-busAPI模块,进一步用于在glib模块和上层应用模块之间,使用glib-d-bus技术,以d-busAPI实现各功能模块;所述各功能模块包括:串口参数保存模块、GPS协议解析功能模块、用户自定义协议栈测试模块、蓝牙测试功能模块、文件传输功能模块、定时发送与接收功能模块、输入输出同步、异步显示模块、Modem功能模块。
进一步,本发明装置中所述上层应用模块,进一步用于针对所述各功能模块的d-busAPI,使用各种图形框架实现相应功能模块的图形界面和python脚本。
此外,本发明还提供了一种在linux环境下实现串行通信接口的方法,该方法基于glib库并使用d-bus作为进程间通信软件,该方法包括:步骤(1)在操作系统的用户层通过read函数获得串口设备描述符,设置串口参数,与串口建立通信关系,并保存相关参数;步骤(2)用于使用glib库的GkeyFile技术将串口参数保存成可读写配置文件;步骤(3)用于使用glib库的GIO技术对串口设备进行缓存,并实现串口设备和本装置之间的数据交互;步骤(4)用于在glib模块和上层应用模块之间,使用glib-d-bus技术,以d-busAPI实现各功能模块;步骤(5)用于针对所述各功能模块的d-busAPI,使用各种图形框架实现相应功能模块的图形界面和python脚本。
进一步,本发明所述方法中的步骤(4)中所述各功能模块包括:串口参数保存模块、GPS协议解析功能模块、用户自定义协议栈测试模块、蓝牙测试功能模块、文件传输功能模块、定时发送与接收功能模块、输入输出同步、异步显示模块、Modem功能模块。
本发明通过glib实现对通用串行总线虚拟的串口、实际串口、其他虚拟串口实现可移植的调试软件核心逻辑、建立在核心逻辑上的D-BusAPI以及通过D-Bus的各种banding技术在各个banding下面实现的调试或者应用。由于所有功能模块都使用d-busAPI实现,所以通过支持d-bus的语言,本发明设计的串口模块使得用户可以实现自己需要的用户界面UI与相应的功能,便于设备开发时的调试与使用。
附图说明
图1是根据本发明的实现串行通信接口的装置的结构示意图;
图2是根据本发明的装置实现所需的各功能的示意图;
图3是本发明所述方法的流程图;
图4是本发明方法实现的串行通信接口的结构示意图。
具体实施方式
为了更详细说明本发明的实施或者表示本发明的技术细节,下面对本发明中所使用的技术进行详细说明。
Glib库是GTK+和GNOME工程的基础底层核心程序库,是一个综合用途的实用的轻量级的C程序库,它提供C语言的常用的数据结构的定义、相关的处理函数,有趣而实用的宏,可移植的封装和一些运行时机能,如事件循环、线程、动态调用、对象系统等的API(应用程序编程接口)。它能够在类UNIX的操作系统平台(如LINUX,HP-UNIX等),WINDOWS,OS2和BeOS等操作系统上运行。
D-Bus是freedesktop下开源的LinuxIPC通信机制,使用GPL许可证发行。本身Linux的IPC通信机制包括,管道(fifo),共享内存,信号量,消息队列,Socket等。D-Bus最主要的用途是在Linux桌面环境为进程提供通信,同时能将Linux桌面环境和Linux内核事件作为消息传递到进程。D-Bus是一个消息总线系统,其功能已涵盖进程间通信的所有需求,并具备一些特殊的用途。D-Bus是3层架构的进程间通信系统,包括:
1、接口层。接口层由函数库libdbus提供,进程可通过该库使用D-Bus的能力。函数库libdbus用于两个应用程序呼叫联系和交互消息。
2、总线层。总线层由D-Bus总线守护进程(Messagebusdaemon)提供,总线守护进程可同时与多个应用程序相连,并能把来自一个应用程序的消息路由到0或者多个其他程序。
3、包装层。包括一系列基于特定应用程序框架的Wrapper库,比如libdbus-glib,libdbus-python。
目前支持d-bus的图形界面框架包括,QT,java,GTK+等等。
本发明目的是实现一种在linux环境下实现串行通信接口的方法,其使用glib技术完成串口通信逻辑,以d-bus作为进程间通信基础,实现基于d-bus的API。本发明通过glib实现对通用串行总线虚拟的串口、实际串口、其他虚拟串口实现可移植的调试软件核心逻辑、建立在核心逻辑上的D-BusAPI以及通过D-Bus的各种banding技术在各个banding下面实现的调试或者应用。
图1是根据本发明的实现串行通信接口的装置的结构示意图。
该图示意一种从下向上,从底层到上层的串口调试工具层次结构图。在底层,串口设备通过串口与微处理器进行通信。在中间层,使用glib库设置串口缓冲与读取机制。而在上层应用层和中间层之间,使用先进的d-bus技术作为通信的桥梁。最后在上层应用层,可以使用各种支持d-bus技术的语言编写相应的应用代码以实现所需要的功能。
图2是根据本发明的装置实现所需的各功能的示意图。
以下从串口参数保存模块开始,按顺时针的顺序对图2所示各模块进行说明。
1、串口参数保存模块:一般的,普通软件只能保存串口的波特率,校验位等简单参数。本发明先获得串行通信设备ID,并将串口参数和设备ID通过glib的GkeyFile结构体,以配置文件的方式存放到指定文件夹下,默认配置文件名为serial-[设备ID名]。这样下次启动时,可以根据不同的设备ID号读取不同的串口参数对串口进行自动初始化。本发明的串口参数设置,串口缓冲区设置以及参数保存函数都实现了d-busAPI。
2、GPS协议解析功能模块:通用的GPS串行通信设备一般支持NMEA协议,本发明为了方便产品设计与开发,将NMEA协议解析功能作为一个模块集成到本发明中。通过分析NMEA协议,通过本发明可以得到当前GPS可查找的卫星数目,地理位置信息,日历等参数。作为一个选项,本发明将这些参数以d-busAPI的形式实现。通过调用不同的API,可以获取相应的参数。
3、用户自定义协议栈测试模块:目前,相当一部分的串行通信设备是由客户自己开发的,客户为与这些设备进行通信,需定义自己的通信协议。为满足这样的需求,本发明定义了一套d-busAPI来定义协议栈,本发明的软件可以通过得到的协议与串行通信设备进行通信。
4、蓝牙测试功能模块:目前,大部分的蓝牙设备也使用串行总线进行通信,并且使用Bluez软件作为蓝牙协议栈。本发明为了方便用户进行蓝牙测试,实现了蓝牙配对,音乐播放,文件传输等常用蓝牙功能,其中以d-busAPI实现这些功能。
5、文件传输功能模块:部分串行通信设备是作为数据传输用的,所以本发明通过glib的Garray结构实现了一个d-busAPI来支持文件的传输。
6、定时发送与接收功能模块:在某些情况下,比如压力测试时,需要使用到定时发送与接收的功能。为满足这种需要,本发明通过glib的timer工具实现了一种定时发送接收的d-busAPI。
7、输入输出同步、异步显示模块:本发明将串行总线输出数据进行行缓存,可以实现将对应输入行进行输出,也可以直接获得全部输出。同样的这种功能也以d-busAPI的形式实现。
此外还包括Modem功能模块:目前,Modem设备大多以串行总线实现控制接口,本发明根据标准的3GPP协议集成了短信发送功能。这样,用户可以通过短信的收发测试Modem设备。并且,本发明也集成了一般常用的Modem命令,通过d-busAPI可以获得Modem的信号强度,Modem时间,短信查看,短信发送,来电查看,电话拨打,Modem使能以及Modem休眠等功能。
最后,对串口的各功能模块进行d-busAPI封装,针对上述实现的API,使用各图形框架设计图形界面。通过d-busAPI可实现java图形界面、QT图形界面、GTK+图形界面、python脚本。
由于上述所有功能都实现了d-busAPI,所以通过支持d-bus的语言,本发明设计的串口模块使得用户可以实现自己需要的用户界面UI与相应的功能。
图3是本发明所述方法的流程图。其基于glib库,并使用d-bus作为进程间通信软件。以下也按照由下至上的方式对图3进行说明。最下方是串口设备。首先,在操作系统的用户层通过read函数获得串口设备描述符;然后,通过人工设置串口参数与串口建立通信关系,并保存相关参数;使用glib库的GkeyFile技术将串口参数保存成可读写配置文件;使用glib库的GIO技术对串口设备进行缓存,并实现串口设备和本发明装置之间的数据交互;在中间层的glib库和上层应用之间,使用glib-dbus技术实现本发明各功能模块的d-busAPI;最后,在最上方,利用d-busAPI实现各种图形框架下的软件与python调试工具等。因此,用户可以通过本发明实现的d-busAPI实现自己的UI与相应功能。
图4是本发明方法实现的串行通信接口的结构示意图。图4最下方表示本发明方法支持的各种Linux版本,例如,Android、Meego、Moblin、Maemo、支持d-bus的操作系统,等等。中间的三个方框表示本发明的方法中各功能是依据glib和d-bus技术实现,其支持串口设备、glib核心逻辑、d-busAPI。最上方表示本发明的方法可以支持通过java,QT,GTK+,python等软件编写的UI程序。
本发明基于glib技术和使用d-bus实现相关结构的API。包括实现了文件传输、GPS、modem等功能。其使用了glib来进行主要逻辑编写,使用d-bus实现进程间通信与API接口。最后对应不同的图形框架实现相应的程序。这样保证了本发明在linux及其衍伸版本下的通用性。使用glib实现串行通信逻辑,并给出D-BusAPI,其显著特点是使程序员能够通过调用API来实现复杂的串口操作,并且具有D-BusAPI的软件可以在linux的多个发行版及其衍伸版(比如android、maemo、moblin、meego等等)中实现其图形界面。
以上是对本发明的优选实施例进行的详细描述,但本领域的普通技术人员应该意识到,在本发明的范围内和精神指导下,各种改进、添加和替换都是可能的,例如调整接口调用顺序、改变消息格式和内容、使用不同的编程语言(如C、C++、Java等)实现等。这些都在本发明的权利要求所限定的保护范围内。
Claims (4)
1.一种在linux环境下实现串行通信接口的装置,该装置基于glib库并使用d-bus作为进程间通信软件,其特征在于,包括:
串口设备模块,通过串口与微处理器进行通信;
glib模块,使用glib库设置串口缓冲与读取机制;
d-busAPI模块,使用d-busAPI实现glib模块与上层应用模块之间的通信;
上层应用模块,使用各种支持d-bus技术的语言编写相应的应用代码以实现所需要的串口功能;
所述glib模块进一步包括第一模块,用于使用glib库的GkeyFile技术将串口参数保存成可读写配置文件;以及
第二模块,用于使用glib库的GIO技术对串口设备进行缓存,并实现串口设备和本装置之间的数据交互;
所述d-busAPI模块,进一步用于在glib模块和上层应用模块之间,使用glib-d-bus技术,以d-busAPI实现各功能模块;所述各功能模块包括:
串口参数保存模块、GPS协议解析功能模块、用户自定义协议栈测试模块、蓝牙测试功能模块、文件传输功能模块、定时发送与接收功能模块、输入输出同步、异步显示模块、Modem功能模块;
所述串口参数保存模块先获得串行通信设备ID,将串口参数和设备ID通过glib的GkeyFile结构体,以配置文件的方式存放到指定文件夹下,串口参数设置、串口缓冲区设置以及参数保存函数以d-busAPI实现;
所述GPS协议解析功能模块得到当前GPS可查找的卫星数目、地理位置信息和日历参数,将所述卫星数目、地理位置信息和日历参数以d-busAPI的形式实现,通过调用不同的API,可以获取相应的参数;
所述用户自定义协议栈测试模块定义一套d-busAPI来定义协议栈;
所述蓝牙测试功能模块以d-busAPI实现蓝牙配对、音乐播放、文件传输功能;
所述文件传输功能模块通过glib的Garray结构以d-busAPI支持文件传输。
2.根据权利要求1所述的装置,其特征在于:
在操作系统的用户层通过read函数获得串口设备描述符,设置串口参数,与串口建立通信关系,并保存相关参数。
3.根据权利要求1所述的装置,其特征在于:所述上层应用模块,进一步用于针对所述各功能模块的d-busAPI,使用图形框架实现相应功能模块的图形界面和python脚本。
4.一种在linux环境下实现串行通信接口的方法,该方法基于glib库并使用d-bus作为进程间通信软件,其特征在于,包括:
步骤(1)在操作系统的用户层通过read函数获得串口设备描述符,设置串口参数,与串口建立通信关系,并保存相关参数;
步骤(2)使用glib库的GkeyFile技术将串口参数保存成可读写配置文件;
步骤(3)使用glib库的GIO技术对串口设备进行缓存,并实现串口设备和本装置之间的数据交互;
步骤(4)在glib模块和上层应用模块之间,使用glib-d-bus技术,以d-busAPI实现各功能模块;
步骤(5)针对所述各功能模块的d-busAPI,使用图形框架实现相应功能模块的图形界面和python脚本;
步骤(4)中所述各功能模块包括:串口参数保存模块、GPS协议解析功能模块、用户自定义协议栈测试模块、蓝牙测试功能模块、文件传输功能模块、定时发送与接收功能模块、输入输出同步、异步显示模块、Modem功能模块;
所述串口参数保存模块先获得串行通信设备ID,将串口参数和设备ID通过glib的GkeyFile结构体,以配置文件的方式存放到指定文件夹下,串口参数设置、串口缓冲区设置以及参数保存函数以d-busAPI实现;
所述GPS协议解析功能模块得到当前GPS可查找的卫星数目、地理位置信息和日历参数,将所述卫星数目、地理位置信息和日历参数以d-busAPI的形式实现,通过调用不同的API,可以获取相应的参数;
所述用户自定义协议栈测试模块定义一套d-busAPI来定义协议栈;
所述蓝牙测试功能模块以d-busAPI实现蓝牙配对、音乐播放、文件传输功能;
所述文件传输功能模块通过glib的Garray结构以d-busAPI支持文件传输。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210234336.5A CN102819430B (zh) | 2012-07-06 | 2012-07-06 | 一种在linux环境下实现串行通信接口的装置及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210234336.5A CN102819430B (zh) | 2012-07-06 | 2012-07-06 | 一种在linux环境下实现串行通信接口的装置及方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102819430A CN102819430A (zh) | 2012-12-12 |
CN102819430B true CN102819430B (zh) | 2016-05-04 |
Family
ID=47303555
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210234336.5A Expired - Fee Related CN102819430B (zh) | 2012-07-06 | 2012-07-06 | 一种在linux环境下实现串行通信接口的装置及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102819430B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103970545B (zh) * | 2014-05-26 | 2017-03-29 | 天津七一二通信广播股份有限公司 | 采用JNI调用方式在Android系统中使用LTE Modem的方法 |
CN104484184A (zh) * | 2014-12-26 | 2015-04-01 | 上海斐讯数据通信技术有限公司 | 一种嵌入式系统的shell设计方法 |
CN106254335B (zh) * | 2016-07-29 | 2019-03-29 | 北京赛佰特科技有限公司 | 基于物联网的跨平台应用程序接口调用方法 |
CN107577578B (zh) * | 2017-09-15 | 2022-02-18 | 郑州云海信息技术有限公司 | 统计nfs操作字时延的方法、装置、设备以及存储介质 |
CN111124984A (zh) * | 2019-12-24 | 2020-05-08 | 广州小鹏汽车科技有限公司 | 多车载微控制单元间的通信方法及系统 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101763269A (zh) * | 2010-01-27 | 2010-06-30 | 中兴通讯股份有限公司 | 一种软件安装包的制作方法 |
CN102541587A (zh) * | 2011-11-23 | 2012-07-04 | 中标软件有限公司 | 龙芯平台下安装linux操作系统的方法 |
-
2012
- 2012-07-06 CN CN201210234336.5A patent/CN102819430B/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101763269A (zh) * | 2010-01-27 | 2010-06-30 | 中兴通讯股份有限公司 | 一种软件安装包的制作方法 |
CN102541587A (zh) * | 2011-11-23 | 2012-07-04 | 中标软件有限公司 | 龙芯平台下安装linux操作系统的方法 |
Non-Patent Citations (2)
Title |
---|
基于Linux架构的手机总线通信机制的研究及应用;郭维科;《中国优秀硕士论文全文数据库》;20110715;正文第2.3节,正文第3.3-3.4节 * |
基于Linux的开源智能终端软件栈研究;罗喧等;《电信科学》;20100331;第7-15页 * |
Also Published As
Publication number | Publication date |
---|---|
CN102819430A (zh) | 2012-12-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102819430B (zh) | 一种在linux环境下实现串行通信接口的装置及方法 | |
US9619304B2 (en) | Automatic connections between application components | |
US20200057658A1 (en) | Method and system for loading resources | |
CN108572818A (zh) | 一种用户界面渲染方法及装置 | |
TWI453603B (zh) | 平台無關之資訊處理系統,其通訊方法,及其電腦程式產品 | |
CN107133174A (zh) | 测试用例代码自动生成装置与方法 | |
CN103353839A (zh) | 一种基于Android系统的通用串行设备通信模块 | |
JP2004532456A (ja) | 開発およびテストシステム並びに方法 | |
CN106790599A (zh) | 一种基于多核无锁环形缓冲区的共生虚拟机通信方法 | |
RU2315367C2 (ru) | Способ и устройство, предназначенные для эмулирования подвижного устройства | |
TW200404225A (en) | Dynamic wizard interface system and method | |
KR101691063B1 (ko) | 콜백을 이용하는 isa 브리징 | |
CN107623738A (zh) | 一种面向安卓应用的WebView桥接口污点映射及分析方法 | |
CN113553257B (zh) | 测试方法、装置、存储介质及电子设备 | |
CN106648569A (zh) | 目标序列化实现方法和装置 | |
CN109918338B (zh) | 安全芯片操作系统测试装置 | |
CN107391272A (zh) | 多进程数据交互的方法和终端 | |
CN103279382B (zh) | 原生方式访问资源的方法、Java端、原生端及系统 | |
US20170017483A1 (en) | Automatic import of third party analytics | |
US7886304B1 (en) | Method and system implementing efficient remote procedure call and emulation system therefor | |
CN115840590A (zh) | 基于安卓和ios跨端混合的方法、系统、设备及存储介质 | |
Florian et al. | An open-source hardware/software architecture for remote control of SoC-FPGA based systems | |
CN112988604B (zh) | 对象测试方法、测试系统、电子设备及可读存储介质 | |
CN110018909A (zh) | 用于使用内核代理的硬件控制的系统和方法 | |
Hu et al. | Enabling ZigBee communications in android devices |
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 | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20160504 Termination date: 20180706 |