【问题标题】:mainloop_add_fd() in BlueZBlueZ 中的 mainloop_add_fd()
【发布时间】:2017-06-08 05:32:30
【问题描述】:

在 BlueZ 工具/btgatt-client.c
我正在使用此文件连接到设备并读取数据,并且我想禁用交互式命令提示符。

我可以连接,但要获取数据注册通知 0x00xx,我必须通过 cmd 窗口输入,然后调用 prompt_read_cb,我该如何自动执行此操作? prompt_read_cb总是等待cmd窗口事件发生,如何绕过??

if (mainloop_add_fd(fileno(stdin),EPOLLIN | EPOLLRDHUP | EPOLLHUP | 
EPOLLERR,prompt_read_cb, cli, NULL) < 0)`
{
    fprintf(stderr, "Failed to initialize console\n");
    return EXIT_FAILURE;
}

【问题讨论】:

  • 欢迎来到 StackOverflow。请采取tour,学习提出好问题stackoverflow.com/help/how-to-ask,制作minimal reproducible example。尤其是寻找有关措辞、注释和降价格式的提示,以提高可读性。

标签: c linux bluetooth-lowenergy bluez


【解决方案1】:

我正在尝试为无头 HRM 接收器做同样的事情。我对 btgatt-client.c 的大部分内容进行了编码,因此我只需在 ready_cb() 函数中请求与设备的连接并在设备上注册通知,然后修改 notify_cb() 以完全按照我的意愿使用数据(本质上是推入共享内存)。

在没有从 shell 运行任何标准输入请求的情况下,这可以正常工作,但是当您从 systemd 运行它时,对 mainloop_add_fd() 的调用会返回错误并且程序退出。我尝试注释掉调用,发送一个我打开但为空的文件,或者发送一个空文件描述符,所有这些都导致主循环退出。

但是,如果我只是简单地使用标准输入调用 mainloop_add_fd() 并忽略它在从 systemd 运行时返回的错误,则该过程将继续并且似乎可以工作。请注意,我还将 prompt_read_cp() 设为无操作,但如果有必要,我还没有深入研究它。 HTH。

【讨论】:

    猜你喜欢
    • 2014-08-27
    • 1970-01-01
    • 2015-05-08
    • 2015-06-28
    • 2013-10-20
    • 2020-12-09
    • 2019-08-31
    • 1970-01-01
    相关资源
    最近更新 更多