text="Open Device" x="10" y="100" w="160" h="36" />
"device" x="180" y="100" w="-200" h="36" text="/dev/ttys032" />text="Send Message" x="10" y="150" w="160" h="36" />
"send_msg" x="180" y="150" w="-200" h="36" text="hello serial" />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]
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" />x="5" y="123" w="303" h="101" />
"send" text="hello serial" x="5" y="273" w="200" h="34" />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开发者社区用户原创内容,未经授权不得转载。欢迎更多用户到社区交流互动、创作博文,一经采用,可获得百元京东E卡。
地址:https://developer.zlg.cn(长按复制到PC端打开)