Giveda® Embedded Midware  1.2.0
本文档受《版权法》、《版权公约》保护。深圳技达®版权所有
 全部  命名空间 文件 函数 变量 类型定义 枚举 枚举值 友元 宏定义 
Giveda®嵌入式中间件是一个高度可裁剪的、重量级的、嵌入式软件开发平台,并且,它为开发者提供了类似Qt的API。

背景与简介

Qt是欧洲人创始的一个优秀的c++开发框架,社区庞大,资源丰富;但Qt太重量级了(Qt需要很多的RAM和ROM)。我很欣赏Qt的优雅,她提供的API非常直观、符合工程师的直觉、简单易用。在汲取了Qt精华的基础上,我做了“Giveda®嵌入式中间件”这个产品,它为开发者提供了类似Qt的API;它不仅仅是一个图形库,它还为你提供了非常友好易用的、人性化的tcp/udp/bluetooth方面的API接口,它是一个适用于MCU开发的重量级软件开发平台。为了更好适用于MCU开发,Giveda®嵌入式中间件包含了一个非常优秀的工程裁剪和配置系统,支持精确裁剪。

Qt最早诞生在桌面领域,获得了很大成功,虽然Qt没能利用好自己的优势、在移动端操作系统的竞争中落败了,但时至今日Qt都依然是开发跨平台桌面应用的最佳选择。
我希望“Giveda®嵌入式中间件”能够像Qt一样成为一个别具一格的产品。我谨以此产品向Qt致敬,致敬Qt为世界做出的杰出贡献。

作者
明心,2008年软考排名全国前50的嵌入式系统设计师;
2015年获得深圳科创委资助;
2016年中国创新创业大赛电子信息行业全国总决赛入围者;
2018年获得宝安区科技局给予的“创客团队”资助;
GOSP项目作者; 2020年,GOSP成为码云GVP项目;
联系方式:lei@giveda.com
版本
1.2.0
日期
开始于2014, 2014 ~ 2019

开源协作模型

在 本项目中,参与者被划分为如下角色:
*) 会员:凡为本项目提供资源支持和/或人力支持的个人或实体,皆为本项目会员。
*) 常务理事:负责项目的演进、整体目标、组织架构、日常事务。常务理事暂由发起人担任,随着项目发展,要吸收其他会员共同作为常务理事。
*) 普通参与者:除了会员和常务理事外的其他参与者,皆为普通参与者。

会员可获得如下收益:
*) 授权许可费的免除或优惠。
*) 深度参与本项目开发过程,缩短自身产品的开发周期。
*) 人才培养、社区荣誉。
*) 会员间的知识产权共享。
*) 本项目的知识产权归全体会员共有,会员根据自身对项目的不同贡献而享有不等比例的产权。

授权许可协议(举报可得重金奖励)

本协议适用于未被列入《exceptions/black list》的普通参与者,被列入《exceptions/black list》的个人和实体不适用本协议。
对于那些不涉及任何商业目的或商业行为的个人学习用途,在没有分发的情况下,使用者遵守 GNU AGPL v3.0 即可。
如果涉及任何商业行为或商业目的,那么大家在商言商,采用如下商业许可协议,以保护开源生态中各方的合法权益:
*) 这是一个开源软件,我们希望它有用,但不提供质量保证(哪怕是隐含的或显而易见的质量保证)。虽然不提供质量保证,但并不意味着你能利用此点去侵害我们的商誉;如果需要质量保证,你可以购买商业版本。作为著作权人(以下简称我们),我们已经尽到了告知义务。一旦发现有人侵犯或者试图侵犯我们商誉,我们必将利用行政和法律手段死磕到底。
*) 除了法律允许免费使用的情形,任何用到本软件全部或部分代码的行为,都需要向我们付费购买许可;禁止未经许可将本软件全部或部分翻译成其它编程语言;分发权不能免费获得,禁止在未经许可的情况下以任何形式(包括但不限于源码形式、二进制形式等)私下或公开向别人分发本软件全部或部分代码。
*) 除非交易双方在《许可合同》中另有约定,否则的话,对本软件的任何修改、任何基于本软件全部或部分代码的衍生品、任何基于本软件全部或部分代码开发得到的作品、(通过任何形式)引用了本软件全部或部分代码的作品等都需要及时向我们定向开源,并同时向我们授权,允许我们以此相同协议对外公开以上软件代码和/或作品,允许我们自由使用以上软件代码和/或作品,允许我们将其授权给我们的客户进行自由使用。基于我们并不知道是谁在使用本开源软件,为了保护你的权益,你应当及时与我方商谈、签订《许可合同》。及时主动联系我方商谈签订《许可合同》是你的义务。
*) 商业许可实行按年对公司(老板)收费。主动联系我们并付费的价格为市场价格。被人举报的被动付费价格为惩罚性价格(市场价格的10倍)。举报情形包括但不限于:违反本授权协议等。
*) 举报者可获得不低于成交额30%的现金奖励。
*) 中国的出口法律和法规适用于我们的发行版,并且随着产品和技术再出口到其它地区依旧保持有效。我们保留禁止任一用户使用以上开源软件的权利。
*) 解释权归我方所有。因你方违反本协议造成我方损失的,你方负完全责任。
只有完全同意以上协议,你才可以使用本软件。
如果不同意以上协议,不要使用本软件。

 

Hello World示例

就从一个最简单的hello world示例开始

参见
hello_world.cpp

特色介绍——支持远程显示

利用“Giveda®嵌入式中间件”提供的远程桌面功能,您可以在手机上查看和操作MCU设备的图形界面(远程桌面)。
换句话说,使用“Giveda®嵌入式中间件”的远程桌面功能,您可以将MCU设备的图形界面显示到手机、平板、或PC等任何有屏的设备上。
需要GUI界面、但却没有硬件显示屏的设备,可以使用智能手机作为该设备的显示屏。
利用“Giveda®嵌入式中间件”提供的远程桌面功能,可以实现一个统一的手机APP能够操控不同厂商的不同设备。

 

开发环境搭建

首先,你需要从如下网址下载 SDK: http://giveda.com/get-giveda-gui.php
SDK是一个压缩包,比如 Giveda_Remote_GUI_v1.0.tar.gz。
在全英文路径中解压上述压缩包,得到Giveda_Remote_GUI_v1.0目录。请确保Giveda_Remote_GUI_v1.0目录的绝对路径中没有任何中文字符,
比如/home/lei/下载/Giveda_Remote_GUI_v1.0/这样的带有中文的路径是不允许的,带中文的路径会导致编译出错。
如果编译出错,请检查编译路径中是不是存在非英文字符。
进入Giveda_Remote_GUI_v1.0/code目录,该目录的结构如下:
|
├── code                                code里面包含了所有的代码
├── README.txt                    Read Me 帮助文档
└── remote-client                 远程控制客户端
进入Giveda_Remote_GUI_v1.0/code目录,该目录的结构如下:
├
├── doc                                  开发手册
├── example                          example
└── pics                                  lib pic dir(给远程控制客户端传入这个路径)
进入Giveda_Remote_GUI_v1.0/code/example目录,该目录的结构如下:
|
├── gCtrlButton                      窗体和按钮
├── gCtrlIconView                  图标视图、按钮
├── gCtrlItem                          文字标签、图片标签、滚动字幕、按钮
├── gCtrlLineEdit                    输入框、input box、按钮
├── gCtrlListBox                     列表视图、按钮
├── gCtrlMsgBox                    对话框、窗体、按钮
├── gCtrlProgressBar             进度条、按钮
├── gCtrlRadioButton             单选按钮
└── hello_world                      hello_world(最简单的示例程序)
你可以进入以上任一目录然后进行编译。比如你想编译gCtrlButton,就顺序执行如下命令:
cd  gCtrlButton
cmake ./                                    #每次你修改替换了图片后,都需要再次执行cmake
make
./gCtrlButton                             #执行编译得到的可执行软件
上述程序的输出如下:
#该程序作为远程控制的服务端,已经打开了本机的36000端口,等待远程控制客户端连接
Giveda: listening on tcp/udp port[36000]
#当前还没有远程控制客户端连接
Giveda warning: [paintEvent(), line 167] there is no screen[-1]
#当使用远程控制客户端连接时,需要用到这个设备型号。
device model=[gCtrlButton]
SDK里面有一个使用Qt4编写的远程控制客户端remote-client.qt4,它的用法如下:
usage: ./remote-client.qt4 lib_pic_dir app_pic_dir
其中,lib_pic_dir是固定的,统一为Giveda_Remote_GUI_v1.0/pics;对于不同的app,app_pic_dir是不同的,
app_pic_dir的格式如下:Giveda_Remote_GUI_v1.0/code/example/设备型号/pics/
上述gCtrlButton远程控制服务端所对应的app_pic_dir为Giveda_Remote_GUI_v1.0/code/example/gCtrlButton/pics/
现在,我们来启动远程控制客户端,连接上述gCtrlButton远程控制服务端。执行如下命令:
cd Giveda_Remote_GUI_v1.0/remote-client/
./remote-client.qt4  ../code/pics/  ../code/example/gCtrlButton/pics/
远程控制客户端remote-client.qt4的界面如下:

远程控制客户端remote-client.qt4的界面

输入远程控制服务端的IP地址和端口号,点击连接,即可进行远程控制。

好了,简易的指导就到这里了,现在去开始你自己的尝试吧!
如果出现连接出错提示,请检查IP地址和端口号是否正确。如果界面显示异常,请检查你传递给remote-client.qt4的lib_pic_dir和app_pic_dir
以上SDK中使用到了Qt-4.8.6。向Qt致敬!
以上SDK在ubuntu 14.04 x86_64下测试通过,基于以上SDK开发出来的应用软件具有高度的可移植性。
你尽可在linux下完成产品的开发和调试工作(linux下面做开发还是很方便高效的),深圳技达®保证让你能够一次开发,到处运行。
如果开发遇到问题、或者需要其它软硬件平台的版本,请联系lei@giveda.com
 

功能模块指引

Giveda®嵌入式中间件为开发者提供了类似Qt的API,具体的,包括如下功能模块:

窗口及GUI控件

Giveda®嵌入式中间件包含了所有常用的GUI控件,并可以快速组装新控件。

参见
GCtrlButton GCtrlForm GCtrlLineEdit GCtrlListBox GCtrlMsgBox GCtrlProgressBar
GCtrlRadioButtonGroup GCtrlImage GCtrlPixmap GCtrlText GCtrlScrollText GMItem GMCtrlItem
GMContainerItem GMPixmap GMImage GMText GMScrollText

GDI API及字体和图片处理

Giveda®嵌入式中间件包含了一个非常优秀的裁剪系统,支持文件级和函数级的裁剪。如果您的MCU硬件配置非常之低,那么,
您可以选择将其它模块裁剪掉,只保留GDI这一块,以适应您的MCU硬件配置。只保留GDI这一块的话,初步预估需要几KB到
几十KB的RAM和ROM,CPU频率几十MHz。

参见
GBrush GColor GFont GFontMetrics GImage GPaintDevice GPainter GPoint GRect
GRegion GSize

显卡和屏幕驱动

Giveda®嵌入式中间件可以灵活适配各种显卡和硬件屏幕驱动。
此模块暂无文档。

事件及事件处理系统

Giveda®嵌入式中间件包含了一个支持函数级裁剪的事件及事件处理系统

参见
GEvent GInputHandler GUIEvtLoop GMouseEvent GKeyEvent GPaintEvent GTapEvent
GSwipeEvent GGestureScrollEvent

对象管理系统

使Giveda®嵌入式中间件区别于其它同类框架的关键一点是,Giveda®嵌入式中间件使用了Giveda®信号槽。
利用“Giveda®信号槽”,开发者在不依赖ANSI c++之外的任何机制和工具的前提下,即可实现对象之间的解耦合。
“Giveda®信号槽”支持ANSI c++并向后兼容(支持ANSI c++及其后续所有c++标准;ANSI c++即ISO c++98)。
可以自豪地讲,“Giveda®信号槽”支持市面上所有的c++编译器。

参见
GObject

人性化的tcp/udp API

Giveda®嵌入式中间件不仅仅是一个图形库,它还为你提供了非常友好易用的、人性化的tcp/udp方面的API接口。

参见
GTcpServer GTcpSocket GUdpSocket

人性化的bluetooth API

Giveda®嵌入式中间件不仅仅是一个图形库,它还为你提供了非常友好易用的、人性化的bluetooth方面的API接口。
(此模块文档暂不公开)
 

其它常用工具类

Giveda®嵌入式中间件不仅仅是一个图形库,它还为你提供了非常友好易用的、人性化的工具API接口。

参见
GMap GPtrList GRegExp GRWLock GSharedData GString GTimer