0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

LittleVgl GUI中实现嵌入中文输入法框架

TopSemic嵌入式 来源:AET网站 作者:jicheng0622 2022-04-02 09:42 次阅读

时隔一年多终于又冒泡了,哎,随着工作越来越忙,自己踏实坐下来写点东西真是越来越费劲,这篇文章也是准备了好久好久才打算发表出来(不瞒大家,东西做完好久了,文章憋了一年了,当真“高产”出,咳咳),本来想着好久不见该好好扯点儿闲皮捞点儿闲嗑,结果儿子跑来旁边唠唠叨叨的把我灵感都整没了。。。最近国内疫情严重,还有东航的事件,再回首身边家人朋友同事,真心感谢静好的岁月,也感谢负重前行的人,希望疫情早点结束,待到春花浪漫时,生活处处有生机,不多说了,talk is cheap, let's writing...

LittleVgl作为一款开源免费的嵌入式GUI得到越来越多工程师的厚爱,我们可以看到很多小型HMI项目或者一些开源社区都在使用它作为GUI的框架,同时也受益于用户群的不断扩大以及一些半导体原厂的青睐(通俗点就是说有赞助有钱儿了),LittleVgl本身也在快速的不断更新迭代,易用的组件和相关的辅助开发工具在不断的增加,而RT1050/1060/1170系列作为一款带有LCD控制器的平台,自然成为了LittleVgl最佳的载体之一了。

LittleVgl本身的组件已经很丰富了,但是遗憾的是一直没有加入对中文输入法Keyboard的支持(看了下它在Github上的Contributor List没有华人),这让它在我们国内的应用有了一些限制(注意在某组件上显示中文和真正的中文输入法是不同的概念),所以本项目旨在解决该问题,即把一个简单轻量的中文输入法框架嵌入到LittleVgl并跑在RT1050平台上,并把它开源开放出来,所以不要小看了我的“公益心”,哈哈。

下面进入正题,首先把测试环境给出来,方便有兴趣有能力的朋友可以自行搭建(当然应一部分偷懒的强烈需求,文章后面我随附赠了完整的移植好的工程),然后我再一步一步地给出如何移植这套框架到用户自己的工程里,当然我已经把代码本身做了很多优化,尽量减小环境依赖,力求最少步骤的移植过程,“理论上”来讲不太会出现移植后编译出一堆Error的问题,咳咳。。。下面我们赶紧开整吧:

测试环境:

SDK版本:SDK_v2.9.1

SDK参考例程:boardsevkbimxrt1050littlevgl_exampleslittlevgl_demo_widgets

LittleVgl版本:v7.4.0

IDE工具:Keil_v5.31

开发板:MIMXRT1050-EVK + 480*272 RGB LCD屏

软件说明:

我们先看下这套中文输入法所需的几个文件,如下图所示,.c和.h文件加起来一共7个,其中nxp_logo.c只是我额外加的一个NXP的官方logo图标转成的C数组文件供littleVgl调用显示,属于锦上添花的东西,可有可无,真正跟输入法相关的是剩下的6个文件,下面我们逐一介绍下这几个文件的作用:

ac302460-b18b-11ec-aa7f-dac502259ad0.png

1. qwerty_py.c/.h,实际上这两个文件才是这套全键盘拼音中文输入法的核心框架,实现了对输入的拼音字母进行索引匹配对应的汉字候选列表,这部分我是移植了如下链接中网友分享的代码,所以这两个文件我的角色只是一个大自然搬运工,不过说实话我是很感激该网友的无私分享的(这也是我一直推崇开源分享精神的源动力),之前对平时使用的各种输入法里面的算法原理一直充满好奇,直到看了这篇文章后才豁然开朗,“So that is what it is!”,让我获益匪浅(可能人的学习曲线和知识体系就是这样一点一滴的积累吧),而且更关键的是,如果让我继续往下开发诸如拼音联想和多汉字输入等功能的话,我更多关心的可能只是逻辑搭建的工作量问题,而不是纠结于Yes or No的问题了,因为咱已经了解了其最底层的工作原理了,所以很多复杂的事情,我们如果能抽丝剥茧的找到其最底层的本质(虽然这真的很难),那很多让人抓耳挠腮的问题很快就可以理清思路。说到这里我思维又发散了,呵呵,我想起让Linus Torvalds等一波老大神们一直头疼的Linux内核维护后继无人的问题,其实我的个人理解有很大一部分原因是如今的Linux太庞大了以至于几乎没有后辈的人对Linux的理解能赶上这些老辈大神,而这些老辈大神的最大优势是他们创建了Linux最早期的底层框架而且难能可贵的是一直在follow Linux每个版本的历史。总之,推荐大家看看如下这篇文章吧(实际上主要内容也都是代码),希望能各有所获;

https://www.amobbs.com/thread-5668320-1-1.html?_dsign=0939dcbd

2. lv_chs_keyboard.c/.c文件,这部分就是我的工作了(咱也不能啥都搬运…,这是体现咱的value的东西不是),我把它当作littleVgl的一个补充组件来写的,里面的大多数API参考官方littlevgl的lv_keyboard.c,所谓的文章开头的嵌入中文输入法到LittleVgl GUI环境中实际上就是这两个文件干的活,即将上面提到qwerty.c/.h实现的拼音输入法与LittleVgl框架结合到一块,起到一个桥梁的作用,所以如果你想把这套中文输入法嵌入到其他GUI环境中的话(比如emWin,GUIX,TouchGFX等),那主要的工作就是参考这两个文件的内容了;

3. lv_font_NotoSansCJKsc_Regular.c字体文件,虽然littleVgl官方源码包里自带了一个中文字体文件(lvglsrclv_fontlv_font_simsun_16_cjk.c),但是它只包含了1000个左右最常用的字,我实际体验了下很多我们想用的字都找不到,所以这个时候就需要自己去做一个更全一点的字体库了。这里面涉及到两个问题需要考虑,第一是很多我们常见的中文字体是收费的(咱PC机的Microsoft Office套件里的中文字体都是微软付费买的,所以咱也理解下早年正版Windows为啥辣么贵了,那你问为啥现在便宜了?因为人家现在不靠这个赚钱了呗),第二个是字体转换工具的问题,我们网上找到的字体都是TTF或者OTF格式的,但littleVgl是不认的,需要转换成它支持的字体格式。

对于第一个问题,我网上搜了好久最终选择了目前用的比较多的Google开源免费的字体,Google真乃金主也,它维护的网站里面字体各种各样啥都有且是开源免费的,如下链接,我选择的是NotoSansCJKsc字体(最后面的sc表示simplified Chinese,简体中文),然后它里面又包含了各种字形(regular, bold, light等),可以根据需要自行选择,整个包很大(100多MB),拆分成不同字形的就小了(每个14~16MB左右);

https://www.google.com/get/noto/

ac43f6c0-b18b-11ec-aa7f-dac502259ad0.png

对于第二个字体转换工具的问题,LittleVgl官方自带了一个字体转换工具(online font converter),我个人觉着不太好用(对OTF字体支持的不行),这里推荐阿里大神自己做的一个LittleVgl字体转换工具(LvglFontTool),非常方便好用,且支持加入Awesome图标;

http://www.lfly.xyz/forum.php?mod=viewthread&tid=24&extra=page%3D1

ac59af2e-b18b-11ec-aa7f-dac502259ad0.png

关于字体这部分我需要再补充个问题,就是它占用的memory大小,毕竟我们是在嵌入式MCU平台Flash和RAM的资源是受限的,如下图所示,该字体文件占用大概1Mbytes的rodata空间(即可寻址的Flash空间,当然该大小可以通过在上图转换工具中增减一些文字来调 整),所以在移植本套输入法之前需要预留足够的Flash空间,当然对RT平台来说这部分还好,毕竟其本身就外扩至少几MB空间的QSPI Flash作为存储空间的。

ac6e70da-b18b-11ec-aa7f-dac502259ad0.png

4. lv_demo_chineseinput.c/.h文件,这两个文件属于应用层实现了,主要关注该文件中下图的ta_event_cb函数(即textarea事件的callback,点击文本框的输入时回调),在里面我们需要按照1,2,3去调用即可(这三步的API均在lv_chs_keyboard.c/h文件里实现);

ac90d9cc-b18b-11ec-aa7f-dac502259ad0.png

至此,这套全键盘拼音中文输入法框架所需的几个文件就介绍完了,用户只需要把这几个文件放到自己的工程设置好文件搜索路径,并参考随本文档附带的代码工程示例,再结合自己产品的GUI样式,把这套中文输入法嵌入到自己应用当中。下面链接为本项目github仓库,觉着不错的别吝啬您的小星星,star me!好了,就扯到这儿了,本文首发ChinaAET,续发于CSDN:https://blog.csdn.net/jicheng0622/article/details/123851560和博客园:https://www.cnblogs.com/jicheng0622/p/16078169.html,未完待续!

https://github.com/jicheng0622/Chinese-Input-Method-Framework-on-MCU-based-LittleVgl-GUI

aca20012-b18b-11ec-aa7f-dac502259ad0.png

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5068

    文章

    19013

    浏览量

    303094
  • 开源
    +关注

    关注

    3

    文章

    3244

    浏览量

    42381
  • GUI
    GUI
    +关注

    关注

    3

    文章

    648

    浏览量

    39535

原文标题:LittleVgl GUI中实现嵌入中文输入法框架

文章出处:【微信号:TopSemic,微信公众号:TopSemic嵌入式】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    【AWTK使用经验】如何使用系统输入法与开启最大化窗口功能

    导读AWTK是基于C语言开发的跨平台GUI框架。AWTK使用经验系列文章将介绍开发AWTK过程中一些常见问题与解决方案。AWTK具有跨平台的性质,不仅可以开发嵌入式设备的程序,也可以开发
    的头像 发表于 11-14 01:05 126次阅读
    【AWTK使用经验】如何使用系统<b class='flag-5'>输入法</b>与开启最大化窗口功能

    微软拼音输入法导致KiCad卡死

    “ 在Windows10切换到微软拼音输入法,即使是英文输入状态,操作KICAD会随机卡死。现象是鼠标没反应了,啥也做不了,只能结束进程。” 问题描述 在KiCad 6及之后的版本,当IME为
    的头像 发表于 11-12 12:23 162次阅读
    微软拼音<b class='flag-5'>输入法</b>导致KiCad卡死

    龙芯的虚拟linux没有中文字库和输入法

    近日收到龙芯发来的linux虚拟系统的demo,里面没有中文字库和汉字输入法,语言更新也更新不了,是不是还要自己重装虚拟linux系统?
    发表于 11-06 15:12

    瑞芯微RK3566鸿蒙开发板Android11修改第三方输入法为默认输入法

    本文适用于触觉智能所有支持Android11系统的开发板修改第三方输入法为默认输入法。本次使用的是触觉智能的Purple Pi OH鸿蒙开源主板,搭载了瑞芯微RK3566芯片,类树莓派设计,是Laval官方社区主荐的一款鸿蒙开发板。
    的头像 发表于 09-24 09:43 344次阅读
    瑞芯微RK3566鸿蒙开发板Android11修改第三方<b class='flag-5'>输入法</b>为默认<b class='flag-5'>输入法</b>

    七大嵌入GUI盘点

    MiniGUI-Standalone三种运行模式运行。它对中文的支持很友好,支持GB2312与BIG5字符集,其他字符集也可以轻松加入。 Qt for MCU 是一个专为嵌入式微控制器(MCU)设计的图形框架和工具包,它
    发表于 09-02 10:58

    【AWTK使用经验】如何添加中文输入法

    目前需要在AWTK程序中用到中文输入法,并且要自定义输入法的联想词,此时需要用到AWStudio添加软键盘和输入法。下面将介绍如何使用AWStudio在项目中添加
    的头像 发表于 06-20 08:25 983次阅读
    【AWTK使用经验】如何添加<b class='flag-5'>中文输入法</b>

    炬芯科技携手趣戴科技推动LiteGfx GUI框架嵌入式终端智能设备上应用

    炬芯科技与上海趣戴科技有限公司(简称“趣戴科技”)建立紧密合作关系,双方携手推动LiteGfx GUI框架嵌入式终端智能设备上应用,降低智能手表设备GUI界面的开发门槛。该
    的头像 发表于 06-04 16:12 980次阅读

    鸿蒙Ability Kit(程序框架服务)【ExtensionAbility组件】

    ExtensionAbility组件是基于特定场景(例如服务卡片、输入法等)提供的应用组件,以便满足更多的使用场景。
    的头像 发表于 06-04 15:54 479次阅读
    鸿蒙Ability Kit(程序<b class='flag-5'>框架</b>服务)【ExtensionAbility组件】

    分享几个嵌入式中常用的GUI

    一、什么是GUIGUI是图形用户界面(GraphicalUserInterface,简称GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。通过GUI
    的头像 发表于 04-06 08:09 1372次阅读
    分享几个<b class='flag-5'>嵌入</b>式中常用的<b class='flag-5'>GUI</b>

    魅族21 Pro启动Flyme 10.5内测,新增AI灵动键、AI辅助输入功能

     在新的AI灵动键功能,魅族从手势导航改成了将AI灵动键整合到mBack导航,短按或长按mBack即可呼叫Aicy;而AI辅助输则把输入法下方添加了一个新型工具条,用户可以更快地打开输入
    的头像 发表于 03-04 15:36 1366次阅读

    【飞腾派4G版免费试用】+越品越有味道的体验

    输入法 图6 完成添加 此时,选取右上角的输入法图标,将EN输入法切换到拼音输入法就可以使用中文输入法了。 图7切换
    发表于 01-13 21:10

    【飞腾派4G版免费试用】ibus中文输入法安装

    为例,如下图: 不知道什么原因,ibus中文输入法有时会出现bug,可能是系统兼容性的问题,切换到EN再切换回来就恢复正常了。
    发表于 01-11 22:23

    详解全志R128 GUI图形系统—LVGL篇

    LVGL 是一个免费的开源图形库,提供了创建嵌入GUI 所需的一切,具有易于使用的图形元素,美观的视觉效果和低内存占用,采用MIT 许可协议,可以访问LittlevGL官网获取更多资料。
    的头像 发表于 12-11 14:49 2896次阅读
    详解全志R128 <b class='flag-5'>GUI</b>图形系统—LVGL篇

    谁说单片机不能图形编程,介绍MCU的TOP 5图形GUI库!

    LittlevGL(LVGL) 是一款开源的嵌入式图形用户界面(GUI)库,专为嵌入式系统设计。LVGL以其轻量级、灵活性和强大的功能而备受开发者青睐,资源够的情况下可移植到所有MCU
    的头像 发表于 12-07 10:42 7584次阅读
    谁说单片机不能图形编程,介绍MCU的TOP 5图形<b class='flag-5'>GUI</b>库!

    嵌入GUI特训营』开营啦!是学霸就有奖拿,快来挑战一下!

    ! ↓↓↓ 点击这里,马上入营! 精品课程 在“嵌入GUI特训营”,通过NXP资深工程师主讲的7堂精品技术课程,你将会—— 了解GUI热点技术和开发技巧 结识免费的
    的头像 发表于 12-01 09:15 429次阅读
    『<b class='flag-5'>嵌入</b>式<b class='flag-5'>GUI</b>特训营』开营啦!是学霸就有奖拿,快来挑战一下!