2017/02/17

[OpenWrt] ubus_invoke()使用介紹

一直在網路上找不到詳細介紹ubus_invoke的資料;在研究OpenWrt一段時間之後,決定把一些心得記錄下來。


這次要來討論ubus_invoke這個函數,其實這個函數的功能跟在console直接下ubus call {method}的方式是同樣道理的。

在libubus.h中有詳細的函數參數
/* invoke a method on a specific object */
int ubus_invoke(struct ubus_context *ctx, uint32_t obj, const char *method,
                struct blob_attr *msg, ubus_data_handler_t cb, void *priv,
                int timeout);
其中
ctx: 建立的ubus連線
obj: 建立連線之後的id -> 也就代表想要呼叫的object
method: 此次要呼叫的函數
msg: JSON格式的資料內容
cb: 經由ubus_send_reply之後要處理的流程函數
priv: 傳遞進去cb的參數
timeout: 要等待ubus_send_reply多久

我覺得比較有趣的是timeout的部分,因為之前並沒有特別注意,就只是設定1000 or 2000,意思是1秒或2秒,但事實上我一直在納悶為什麼有一個函數對應的ubus_send_reply收不到,因為這函數要處理約15秒,結果問題是出在timeout值的設定,把timeout調成20秒就可以收到reply了。

沒有留言:

張貼留言