11#ifndef __TBOX_DBUS_H__
12#define __TBOX_DBUS_H__
34#define TBOX_DBUS_METHOD_RETURN_TIMEOUT_SEC 2U
312 char* recv_action, uint32_t recv_action_len);
340#define DBUS_CHECK_OR_RESULT_WITH_ERROR(tag, expr, result, message, error) \
345 TBOX_LOGE(tag, message ", check failed: %s in %s at %d", #expr, __FILE__, __LINE__); \
346 (result)->type = TBOX_DBUS_TYPE_INT32; \
347 (result)->type_info.i32 = (error); \
368#define DBUS_CHECK_RET_OR_RESULT_WITH_MESSAGE(tag, ret, result, message) \
369 DBUS_CHECK_OR_RESULT_WITH_ERROR(tag, TBOX_OK == (ret), result, message, (ret))
388#define DBUS_CHECK_TYPE_OR_RESULT_WITH_MESSAGE(tag, etype, param, result, message) \
391 if ((etype) != (param)->type) \
393 TBOX_LOGE(tag, message ", wrong type(%c), expected(%c)", (param)->type, (etype)); \
394 (result)->type = TBOX_DBUS_TYPE_INT32; \
395 (result)->type_info.i32 = DBUS_ERROR_REMOTE_WRONG_TYPE; \
419#define DBUS_CHECK_TYPE_OR_RETURN_WITH_ERROR(tag, etype, param, message, error) \
422 if ((etype) != (param)->type) \
424 TBOX_LOGE(tag, message ", wrong type(%c), expected(%c)", (param)->type, (etype)); \
425 if (TBOX_DBUS_TYPE_STRING == (param)->type) \
427 TBOX_LOGE(tag, "error message: %s", (param)->type_info.str); \
428 tbox_dbus_free_param(param); \
430 if (TBOX_DBUS_TYPE_ARRAY == (param)->type) \
432 tbox_dbus_free_param(param); \
int tbox_dbus_get_message(DBusMessageIter *iter, tbox_dbus_param_t *param)
从消息迭代器读取一个参数
void tbox_dbus_handle_message(const tbox_dbus_handle_map_t *handle_map, const char *need_module, int32_t timeout)
根据映射表分发并处理接收到的 D-Bus 消息
bool tbox_dbus_check_message_match(DBusMessage *msg, bool is_signal, const char *module, const char *action)
检查消息是否匹配指定模块和动作
tbox_dbus_type_t
D-Bus 参数类型
Definition dbus.h:40
int tbox_dbus_recv_no_reply(const char *need_module, int32_t timeout, bool need_signal, tbox_dbus_param_t *msg_param, char *recv_action, uint32_t recv_action_len)
接收无需回复的 D-Bus 消息
int tbox_dbus_call_set(const char *dest, const char *module, const char *action, tbox_dbus_param_t *param, uint32_t timeout)
通过 D-Bus 方法调用执行 set 操作
int tbox_dbus_send_signal(const char *module, const char *action, tbox_dbus_param_t *param)
发送 D-Bus 信号
int tbox_dbus_send_message_end(bool is_signal, DBusMessage *msg, tbox_dbus_param_t *return_param, int32_t timeout)
完成 D-Bus 消息发送并等待回复
int tbox_dbus_set_message(DBusMessageIter *iter, const tbox_dbus_param_t *param)
向消息迭代器写入一个参数
int tbox_dbus_get_message_begin(DBusMessageIter *iter, DBusMessage **msg, tbox_dbus_recv_info_t *recv_info, int32_t timeout)
开始接收 D-Bus 消息(首参数)
int tbox_dbus_call_get(const char *dest, const char *module, const char *action, tbox_dbus_param_t *return_param, uint32_t timeout)
通过 D-Bus 方法调用执行 get 操作
int tbox_dbus_send_message_begin(const tbox_dbus_send_info_t *send_info, DBusMessage **msg, DBusMessageIter *iter)
开始构造并发送 D-Bus 消息(首参数)
int tbox_dbus_get_message_end(DBusMessage *msg, tbox_dbus_param_t *return_param)
完成 D-Bus 消息接收并发送方法返回
int tbox_dbus_connect(const char *app_name)
连接 D-Bus 服务
int tbox_dbus_set_receive_match(const char *filter)
添加接收消息匹配规则
void tbox_dbus_send_no_reply(const char *dest, const char *module, const char *action, tbox_dbus_param_t *param)
发送无需回复的 D-Bus 方法调用
void tbox_dbus_free_param(tbox_dbus_param_t *param)
释放参数中动态分配的内存
void tbox_dbus_free_message(DBusMessage *msg)
释放 D-Bus 消息对象
void(* tbox_dbus_handler_t)(tbox_dbus_param_t *msg_param, tbox_dbus_param_t *return_param)
接收消息处理回调
Definition dbus.h:79
int tbox_dbus_send_message(const tbox_dbus_send_info_t *send_info, tbox_dbus_param_t *return_param, int32_t timeout)
发送 D-Bus 消息并等待回复
void tbox_dbus_disconnect(void)
断开 D-Bus 服务连接
int tbox_dbus_delete_receive_match(const char *filter)
删除接收消息匹配规则
bool tbox_dbus_check_next_message(DBusMessageIter *iter)
检查消息迭代器是否还有下一个参数
const char * tbox_dbus_get_connection_name(void)
获取当前连接的唯一名称
@ TBOX_DBUS_TYPE_INT32
有符号 32 位整数类型
Definition dbus.h:43
@ TBOX_DBUS_TYPE_UINT8
无符号 8 位整数类型
Definition dbus.h:46
@ TBOX_DBUS_TYPE_UINT16
无符号 16 位整数类型
Definition dbus.h:44
@ TBOX_DBUS_TYPE_BOOL
布尔类型
Definition dbus.h:47
@ TBOX_DBUS_TYPE_INVALID
无效类型
Definition dbus.h:49
@ TBOX_DBUS_TYPE_STRING
字符串类型
Definition dbus.h:41
@ TBOX_DBUS_TYPE_ARRAY
数组类型
Definition dbus.h:48
@ TBOX_DBUS_TYPE_UINT32
无符号 32 位整数类型
Definition dbus.h:42
@ TBOX_DBUS_TYPE_INT16
有符号 16 位整数类型
Definition dbus.h:45
消息处理映射表项
Definition dbus.h:85
const char * module
模块名
Definition dbus.h:86
const char * action
动作名
Definition dbus.h:87
tbox_dbus_handler_t handler
处理回调
Definition dbus.h:88
D-Bus 消息参数
Definition dbus.h:56
uint32_t array_len
数组长度
Definition dbus.h:59
uint16_t u16
无符号 16 位整数
Definition dbus.h:64
uint32_t u32
无符号 32 位整数
Definition dbus.h:62
tbox_dbus_type_t type
参数类型
Definition dbus.h:57
char * str
字符串
Definition dbus.h:68
uint8_t u8
无符号 8 位整数
Definition dbus.h:66
void * array
数组数据
Definition dbus.h:69
int32_t i32
有符号 32 位整数
Definition dbus.h:63
int16_t i16
有符号 16 位整数
Definition dbus.h:65
bool b
布尔值
Definition dbus.h:67
tbox_dbus_type_t array_type
数组元素类型
Definition dbus.h:58
接收消息描述
Definition dbus.h:107
tbox_dbus_param_t param
参数
Definition dbus.h:110
const char * action
动作名
Definition dbus.h:109
const char * module
模块名
Definition dbus.h:108
发送消息描述
Definition dbus.h:95
tbox_dbus_param_t * param
参数,可为空
Definition dbus.h:100
const char * dest
目标服务名
Definition dbus.h:97
const char * action
动作名
Definition dbus.h:99
const char * module
模块名
Definition dbus.h:98
bool is_signal
是否为信号
Definition dbus.h:96