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

把串口做成一个控件并不新鲜,在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=send message x=10 y=150 w=160 h=36 />  send_msg x=180 y=150 w=-200 h=36 text=hello serial />  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); }  return ret_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
【版权声明】本文为zlg开发者社区用户原创内容,未经授权不得转载。

shijidianli在哪些情况下测量吸收比和极化指数
rfid技术怎样实现医疗器械的智能化的控制
相较于比亚迪,金彭在新能源汽车领域有什么优势?
六款值得新手购买的相机推荐
虹科分享 | 更快捷方便的PCAN FD波特率采样点计算工具分享
【Z站推荐】AWTK最新动态:使用serial_widget简化串口编程
一加6和小米8哪个拍照好
华为HiAI人工智能引擎:P20首发兼容,集成多种AI功能
主要锂离子电池厂商研发与生产概要
显示屏SASO-COC认证办理,怎么办理需要哪些资料?
广和通重磅亮相IOTE 2023上海高精度定位技术与应用高峰论坛,荣膺“物联网行业百强企业榜”
PCB SMT-GASKET导电硅胶泡棉8*6*10.5的压力30%测试
矩阵式单相电源调压技术
别再关注魅族的flyme6了 这款性价比超高的手机你值得一看!
CPU温度过高?教你如何关闭超线程功能
ADC的一种简单的热敏电阻接口-A Simple Therm
历时5年,康斯特拟投资2.1亿元建设3条MEMS传感器垂直产业智能制造项目
使用氢燃料电池的拖拉机(图)
长安汽车与京东方合作建立联合创新实验室,合力打造全球领先的智能座舱解决方案
氢氟酸溶液中多孔硅的形成