簡體   English   中英

BlueZ中的mainloop_add_fd()

[英]mainloop_add_fd() in BlueZ

在BlueZ tools / 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;
}

對於無頭HRM接收器,我正在嘗試做同樣的事情。 我沒有編寫很多btgatt-client.c,因此我只是在ready_cb()函數中請求與設備的連接並向設備注冊通知,然后修改notify_cb()以完全按照我想要的方式執行數據(基本上是推入共享內存)。

這沒有任何stdin請求從shell運行時工作正常,但是當你從systemd運行它時,對mainloop_add_fd()的調用會返回一個錯誤並退出程序。 我試着注釋掉這個調用,發送一個我打開但是為null的文件,或發送一個空文件描述符,所有這些都導致mainloop退出。

但是,如果我只是用stdin調用mainloop_add_fd()並忽略它從systemd運行時返回的錯誤,則該過程繼續並且似乎正常工作。 注意我也將prompt_read_cp()設置為無操作,如果有必要,我還沒有挖到它。 HTH。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM