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

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

3天内不再提示

AWTK控件serial_widget的使用方法

AGk5_ZLG_zhiyua 来源:ZLG致远电子 作者:ZLG开发者社区 2022-08-05 12:09 次阅读

把串口做成一个控件并不新鲜,在VB里有个通信组件,就是用来简化串口编程的。最近AWTK也提供了这样一个控件serial_widget,本文介绍一下它的使用方法。


基本功能

我们编写一个简单的应用程序,它有两个功能:
  • 把收到的数据显示出来。
  • 把界面输入的数据发送给对方。


UI界面描述文件d524a6a4-1471-11ed-ba43-dac502259ad0.png
  "open" text="Open Device" x="10" y="100" w="160" h="36" />  "device"x="180"y="100"w="-200"h="36"text="/dev/ttys032"/>"send"text="SendMessage"x="10"y="150"w="160"h="36"/>  "send_msg"x="180"y="150"w="-200"h="36"text="helloserial"/>  "recv_msg"x="c"y="b:100"w="90%"h="100"/>  "serial"/>

接收数据

先注册数据事件的处理函数。

widget_child_on(win, "serial", EVT_DATA, on_data, win);

在处理函数中读取数据并显示到界面上。


static ret_t on_data(void* ctx, event_t* e) { char text[128] = {0}; widget_t* win = WIDGET(ctx); serial_widget_t* serial = SERIAL_WIDGET(e->target); widget_t* label = widget_lookup(win, "recv_msg", TRUE); int32_t len = tk_istream_read(serial->istream, text, sizeof(text)-1); if(len > 0) {    text[len] = '0';    widget_set_text_utf8(label, text);  }returnRET_OK;}

发送数据

从界面读取数据,并发送到串口


static ret_t on_send(void* ctx, event_t* e) { char text[128] = {0}; widget_t* win = WIDGET(ctx); serial_widget_t* serial = SERIAL_WIDGET(widget_lookup(win, "serial", TRUE)); widget_t* edit = widget_lookup(win, "send_msg", TRUE);  widget_get_text_utf8(edit, text, sizeof(text)-1);  tk_ostream_write_len(serial->ostream, text, strlen(text), 3000); return RET_OK;}

完整代码请参考 serial 可以下载 awtk-c-demos 编译运行。


./bin/demo_serial


测试

下面操作是在 Linux/MacOS 上测试的,Windows 下需要安装虚拟串口软件,具体做法有些不同,请自行调整。

使用socat创建虚拟串口


socat -d -d pty,raw,echo=0 pty,raw,echo=0

该命令会生成两个设备文件,对应串口的两端(每次生成的设备名可能不同)。


2022/07/08 16:32:33 socat[1879] N PTY is /dev/ttys0322022/07/08 16:32:33 socat[1879] N PTY is /dev/ttys0332022/07/08 16:32:33 socat[1879] N starting data transfer loop with FDs [5,5] and [7,7]
在AWTK 这端我们使用设备/dev/ttys032
在另外一端读取数据
打开一个新的终端,并运行下面的命令(有数据时自动显示出来):

cat /dev/ttys033
在另外一端发送数据

打开一个新的终端,并运行下面的命令(发送当前时间字符串):


date >/dev/ttys033


使用fscript进行串口编程

也可以使用 fscript 进行串口编程(配合 AWBlock 就简单了)。AWTK 里提供一个与前面功能相同的例子,总体来看要简洁不少。

  "打开设备" x="16" y="15" w="76" h="34" >    "on:click">      var device = widget_get('device', 'text')      widget_set('serial','device', device)        "device" x="119" y="13" w="178" h="38" text="/dev/ttys028" />  "recv" x="5" y="123" w="303" h="101" />  "send" text="hello serial" x="5" y="273" w="200" h="34" />  "button" tr_text="send" x="220" y="274" w="81" h="34" >    "on:click">      var os = widget_get('serial','ostream')      var msg = widget_get('send', 'text')      ostream_write_string(os, msg)        "serial">    "on:data">      var is = widget_get('self','istream')      var msg = istream_read_string(is, 100, 0)      widget_set('recv', 'text', msg)      

在 AWTK 根目录下可以运行该例子,测试方法与前面相同。


./bin/preview_ui design/default/ui/serial.xml


移植

目前串口只实现了Windows, Linux, MacOS, Android 和 AWorks 等平台,其它平台需要自己移植。

请参考AWorks平台的移植:

src/platforms/aworkslp/serial_helper.c

审核编辑:汤梓红

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

    关注

    18

    文章

    6023

    浏览量

    135949
  • 串口
    +关注

    关注

    14

    文章

    1551

    浏览量

    76415

原文标题:【Z站推荐】AWTK最新动态:使用serial_widget简化串口编程

文章出处:【微信号:ZLG_zhiyuan,微信公众号:ZLG致远电子】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    急求labview中表格控件使用方法

    请问谁有labview中表格控件使用方法的教程最后走再有写例子,可以发给我一份吗?谢谢
    发表于 08-22 10:46

    emWin实例速成教程007_Graph波形曲线图形控件使用方法

    emWin实例速成教程007_Graph波形曲线图形控件使用方法
    发表于 11-09 12:37

    emWin实例速成教程008_IconView图标控件使用方法

    emWin实例速成教程008_IconView图标控件使用方法
    发表于 11-09 12:39

    emWin实例速成教程009_ListView列表框控件使用方法

    emWin实例速成教程009_ListView列表框控件使用方法
    发表于 11-09 12:40

    emWin实例速成教程010_Menu标题菜单控件使用方法

    emWin实例速成教程010_Menu标题菜单控件使用方法
    发表于 11-09 12:42

    emWin实例速成教程011_Multipage多页控件使用方法

    emWin实例速成教程011_Multipage多页控件使用方法
    发表于 11-09 12:44

    关于表格控件的一些使用方法

    关于表格控件的一些使用方法,里面有源程序,说明文档,不足之处,希望指点指点
    发表于 09-20 22:57

    实现iOS-Widget方法详解

    一、Widget总览 Widget 是 iOS8 推出第一版,在iOS 10 进行大幅度的优化 Widget可以让用户更快地访问到其感兴趣的内容,官方的说法是用来呈现功能比较简单的,交互性不强的东西
    发表于 09-25 17:20 0次下载
    实现iOS-<b class='flag-5'>Widget</b>的<b class='flag-5'>方法</b>详解

    AWTK基本性能测试及在Linux下AWTK与Qt的性能对比

    先在AWorks系统下分别测试AWTK的Debug版本和Release版本,进行AWTK自身对比,然后在Linux系统下测试AWTK,与AWorks平台进行简单对比,对比AWTK跨平台
    发表于 03-09 09:53 7044次阅读
    <b class='flag-5'>AWTK</b>基本性能测试及在Linux下<b class='flag-5'>AWTK</b>与Qt的性能对比

    【Z站推荐】AWTK最新动态:使用serial_widget简化串口编程

    把串口做成一个控件并不新鲜,在VB里有个通信组件,就是用来简化串口编程的。最近AWTK也提供了这样一个控件serial_widget,本文介绍一下它的
    的头像 发表于 08-08 10:06 857次阅读
    【Z站推荐】<b class='flag-5'>AWTK</b>最新动态:使用<b class='flag-5'>serial_widget</b>简化串口编程

    AWTK使用经验】如何播放视频或摄像头画面

    目前想在ZTP800示教器的AWTK程序中实现播放视频或者播放摄像头画面的效果,可以借助AWTK的mutable_image控件或usb_camera控件来显示画
    的头像 发表于 07-04 08:25 601次阅读
    【<b class='flag-5'>AWTK</b>使用经验】如何播放视频或摄像头画面

    AWTK使用经验】如何实现序列帧动画

    目前想在AWTK中显示炫酷流畅的图片动画,此时可以用video_image控件来播放序列帧动画。本篇文章将介绍该控件的原理和使用方法。图1ZTP800示教器运行v
    的头像 发表于 07-18 08:25 401次阅读
    【<b class='flag-5'>AWTK</b>使用经验】如何实现序列帧动画

    图片动画控件和Video image控件使用方法

    在UI开发过程中,序列帧基本是绕不开的,AWTK 支持多种方法实现序列帧显示,本文介绍图片动画控件和Video image控件使用方法
    的头像 发表于 08-06 16:44 851次阅读
    图片动画<b class='flag-5'>控件</b>和Video image<b class='flag-5'>控件</b>的<b class='flag-5'>使用方法</b>

    AWTK最新动态】AWTK 1.8版本发布

    AWTK是一套基于C语言开发的跨平台GUI框架,目前正式推出1.8版本。本次更新不仅对许多细节进行了优化,还增添了众多重要特性和文档资料。此外,还引入了三款创新控件和两个与AWTK相关项目。A
    的头像 发表于 08-30 12:48 423次阅读
    【<b class='flag-5'>AWTK</b>最新动态】<b class='flag-5'>AWTK</b> 1.8版本发布

    AWTK 最新动态:支持浏览器控件

    导读AWTK浏览器控件,基于webview项目实现,将浏览器嵌入到AWTK应用程序中,让开发者可以方便的集成在线帮助和调用地图等功能。awtk-widget-web-view是基于we
    的头像 发表于 11-20 01:05 186次阅读
    <b class='flag-5'>AWTK</b> 最新动态:支持浏览器<b class='flag-5'>控件</b>