ubus應用-第一篇ubus簡單理解


這篇文章介紹了關於blobmsg的內容,屬於libubox庫,是libubus的依賴庫,在關於消息的傳遞中會使用到相關內容
https://www.cnblogs.com/embedded-linux/p/6792359.html)
這篇文章講了三種ubus使用的實例,內含代碼
https://blog.csdn.net/jasonchen_gbd/article/details/46055885)

首先明確一下,文章中提到的“Object”是一個“ubus_object”結構體,這個結構體有很多成員,但是目前我在例子中只看到以下幾個成員的使用。

ubus_object.name :obj的名字,字符串
ubus_object.type :另外一個結構體指針,是和methods有關的結構體
ubus_object.methods :obj的一些方法,結構體數組
ubus_object. n_methods: obj方法數量
ubus_object. subscribe_cb :obj的methods被訂閱時的回調函數

【第一種使用場景】subscriber和notifier


Notifier:發送消息的一方,使用以下函數
ubus_add_object()
ubus_notify():通知消息
Subscriber: 訂閱(接收)消息的一方,使用以下函數
ubus_register_subscriber()
ubus_lookup_id()
ubus_subscribe():訂閱消息
*函數使用方法自行調查

【第二種使用場景】invoke(遠程調用)

Pro1作為被調用者,需要有一個obj
Pro2作為調用者可以使用ubus_invoke()函數進行調用pro1的某個method。
/*
主要使用函數ubus_invoke()的聲明如下:
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);
其中cb參數是消息回調函數,其函數類型定義為:
typedef void (
ubus_data_handler_t)(struct ubus_request *req, int type, struct blob_attr *msg);
參數type是請求消息的類型,如UBUS_MSG_INVOKE,UBUS_MSG_DATA等。
參數msg存放從服務端得到的回復消息,struct blob_attr類型,同樣用blobmsg_parse()來解析。
參數req保存了請求方的消息屬性,其中req->priv即ubus_invoke()中的priv參數,
用這個參數可以零活的傳遞一些額外的數據。
*/

【第三種使用場景】event方式廣播通知

在event方式廣播通知下,pro1向pro2,pro3和pro4廣播名為"add_device"的事件,但是在三個其他進程中只有pro2對這個event注冊了監聽,所以也只有pro2會對這個事件進行處理。
Pro1廣播event函數:ubus _send_event()
pro2對這個event注冊監聽:ubus_register_event_handler()

以上


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM