把串口做成一个控件并不新鲜,在VB里有个通信组件,就是用来简化串口编程的。最近AWTK也提供了这样一个控件serial_widget,本文介绍一下它的使用方法。
基本功能
我们编写一个简单的应用程序,它有两个功能:
- 把收到的数据显示出来。
- 把界面输入的数据发送给对方。
UI界面描述文件
"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进行串口编程
"打开设备" 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文章
6488浏览量
140350 -
串口
+关注
关注
15文章
1628浏览量
83565
原文标题:【Z站推荐】AWTK最新动态:使用serial_widget简化串口编程
文章出处:【微信号:ZLG_zhiyuan,微信公众号:ZLG致远电子】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
热点推荐
实现iOS-Widget的方法详解
一、Widget总览 Widget 是 iOS8 推出第一版,在iOS 10 进行大幅度的优化 Widget可以让用户更快地访问到其感兴趣的内容,官方的说法是用来呈现功能比较简单的,交互性不强的东西
发表于 09-25 17:20
•0次下载
AWTK基本性能测试及在Linux下AWTK与Qt的性能对比
先在AWorks系统下分别测试AWTK的Debug版本和Release版本,进行AWTK自身对比,然后在Linux系统下测试AWTK,与AWorks平台进行简单对比,对比AWTK跨平台
发表于 03-09 09:53
•7853次阅读
【Z站推荐】AWTK最新动态:使用serial_widget简化串口编程
把串口做成一个控件并不新鲜,在VB里有个通信组件,就是用来简化串口编程的。最近AWTK也提供了这样一个控件serial_widget,本文介绍一下它的
【AWTK使用经验】如何播放视频或摄像头画面
目前想在ZTP800示教器的AWTK程序中实现播放视频或者播放摄像头画面的效果,可以借助AWTK的mutable_image控件或usb_camera控件来显示画
【AWTK使用经验】如何实现序列帧动画
目前想在AWTK中显示炫酷流畅的图片动画,此时可以用video_image控件来播放序列帧动画。本篇文章将介绍该控件的原理和使用方法。图1ZTP800示教器运行v
【AWTK最新动态】AWTK 1.8版本发布
AWTK是一套基于C语言开发的跨平台GUI框架,目前正式推出1.8版本。本次更新不仅对许多细节进行了优化,还增添了众多重要特性和文档资料。此外,还引入了三款创新控件和两个与AWTK相关项目。A
AWTK 最新动态:支持浏览器控件
导读AWTK浏览器控件,基于webview项目实现,将浏览器嵌入到AWTK应用程序中,让开发者可以方便的集成在线帮助和调用地图等功能。awtk-widget-web-view是基于we
AWTK控件serial_widget的使用方法
评论