mirror of
https://dev.iopsys.eu/bbf/bbfdm.git
synced 2025-12-10 07:44:39 +01:00
106 lines
3.7 KiB
C
106 lines
3.7 KiB
C
/*
|
|
* Copyright (C) 2025 iopsys Software Solutions AB
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU Lesser General Public License version 2.1
|
|
* as published by the Free Software Foundation
|
|
*
|
|
* Author: Amin Ben Romdhane <amin.benromdhane@iopsys.eu>
|
|
*
|
|
*/
|
|
|
|
#ifndef __BBFDM_UBUS_H
|
|
#define __BBFDM_UBUS_H
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
typedef void (*bbfdm_ubus_cb)(struct ubus_request *req, int type, struct blob_attr *msg);
|
|
typedef void (*bbfdm_ubus_async_cb)(struct ubus_request *req, int ret);
|
|
|
|
/**
|
|
* @brief Initializes the UBUS context within the BBFDM context.
|
|
*
|
|
* This function establishes a connection to the UBUS system and assigns the
|
|
* resulting context to the provided `bbfdm_ctx`.
|
|
*
|
|
* @param[in,out] bbfdm_ctx Pointer to the BBFDM context to initialize.
|
|
* @return 0 on success, -1 on failure.
|
|
*/
|
|
int bbfdm_init_ubus_ctx(struct bbfdm_ctx *bbfdm_ctx);
|
|
|
|
/**
|
|
* @brief Frees the UBUS context within the BBFDM context.
|
|
*
|
|
* This function releases resources associated with the UBUS context in
|
|
* the provided `bbfdm_ctx`.
|
|
*
|
|
* @param[in,out] bbfdm_ctx Pointer to the BBFDM context to free.
|
|
* @return 0 on success.
|
|
*/
|
|
int bbfdm_free_ubus_ctx(struct bbfdm_ctx *bbfdm_ctx);
|
|
|
|
/**
|
|
* @brief Invokes a UBUS method synchronously.
|
|
*
|
|
* Sends a synchronous request to a UBUS object and invokes the provided callback
|
|
* with the result.
|
|
*
|
|
* @param[in] bbfdm_ctx Pointer to the BBFDM context.
|
|
* @param[in] obj Name of the UBUS object to invoke.
|
|
* @param[in] method Name of the method to invoke.
|
|
* @param[in] msg Pointer to a `blob_attr` message to send as input.
|
|
* @param[in] timeout Timeout for the request in milliseconds.
|
|
* @param[in] data_callback Callback function for handling response data.
|
|
* @param[in] callback_args User-provided arguments to pass to the callback.
|
|
* @return 0 on success, -1 on failure.
|
|
*/
|
|
int bbfdm_ubus_invoke_sync(struct bbfdm_ctx *bbfdm_ctx, const char *obj, const char *method, struct blob_attr *msg, int timeout,
|
|
bbfdm_ubus_cb data_callback, void *callback_args);
|
|
|
|
/**
|
|
* @brief Invokes a UBUS method asynchronously.
|
|
*
|
|
* Sends an asynchronous request to a UBUS object and sets up the provided callbacks
|
|
* for data and completion handling.
|
|
*
|
|
* @param[in] ubus_ctx Pointer to the UBUS context.
|
|
* @param[in] obj Name of the UBUS object to invoke.
|
|
* @param[in] method Name of the method to invoke.
|
|
* @param[in] msg Pointer to a `blob_attr` message to send as input.
|
|
* @param[in] data_callback Callback function for handling response data.
|
|
* @param[in] complete_callback Callback function to call upon request completion.
|
|
* @return 0 on success, -1 on failure.
|
|
*/
|
|
int bbfdm_ubus_invoke_async(struct ubus_context *ubus_ctx, const char *obj, const char *method, struct blob_attr *msg,
|
|
bbfdm_ubus_cb data_callback, bbfdm_ubus_async_cb complete_callback);
|
|
|
|
/**
|
|
* @brief Invokes a synchronous UBUS method.
|
|
*
|
|
* This macro simplifies the process of initializing a context, invoking a UBUS
|
|
* method synchronously, and cleaning up the context.
|
|
*
|
|
* @param obj The name of the UBUS object to invoke.
|
|
* @param method The name of the method to invoke.
|
|
* @param msg Pointer to a `blob_attr` message to send as input.
|
|
* @param data_callback Callback function for handling response data.
|
|
* @param callback_args User-provided arguments to pass to the callback.
|
|
* @return Always returns 0.
|
|
*/
|
|
#define BBFDM_UBUS_INVOKE_SYNC(obj, method, msg, timeout, data_callback, callback_args) \
|
|
do { \
|
|
struct bbfdm_ctx ctx = {0}; \
|
|
memset(&ctx, 0, sizeof(struct bbfdm_ctx)); \
|
|
bbfdm_init_ctx(&ctx); \
|
|
bbfdm_ubus_invoke_sync(&ctx, obj, method, msg, timeout, data_callback, callback_args); \
|
|
bbfdm_free_ctx(&ctx); \
|
|
} while (0)
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif //__BBFDM_UBUS_H
|
|
|