在bluez tools/btgatt client.c中
我正在使用此文件连接到设备并读取数据,我想禁用交互式命令提示符。
我可以连接,但要获得数据寄存器notify 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;
}
最佳答案
我正试图做同样的事情,为一个无头人力资源管理接收器。我打开了btgatt client.c的大部分代码,以便在ready_cb()函数中,简单地请求到设备的连接并向设备注册了通知,然后修改了notify_cb(),以便对数据执行我想要的操作(本质上是推入共享内存)。
这个操作很好,没有任何从shell中运行的请求,但是当你从它运行它时,这个调用会返回一个错误,程序退出。我试着评论这个调用,发送一个打开的文件,但是NULL,或者发送一个空文件描述符,所有这些都导致主循环退出。
但是,如果我只是用stdin调用mainloop_add_fd(),并忽略它在从systemd运行时返回的错误,则进程将继续并似乎正常工作。注意,我还将prompt_read_cp()设为禁止操作,但如果有必要的话,我还没有深入研究。哦。