diff --git a/dmentry.c b/dmentry.c index ba46b82c..f2df8c31 100644 --- a/dmentry.c +++ b/dmentry.c @@ -435,11 +435,9 @@ int dm_entry_load_enabled_notify(unsigned int dm_type, unsigned int amd_version, dm_ctx_init(&dmctx, dm_type, amd_version, instance_mode); dmctx.in_param = ""; - dmctx.add_list_value_change = add_list_value_change; - dmctx.send_active_value_change = send_active_value_change; free_all_list_enabled_lwnotify(); - dm_entry_enabled_notify_check_value_change(&dmctx); + dm_entry_enabled_notify_check_value_change(&dmctx, add_list_value_change, send_active_value_change); dm_entry_enabled_notify(&dmctx); dm_ctx_clean(&dmctx); diff --git a/libbbf_api/dmbbf.c b/libbbf_api/dmbbf.c index 2571c493..066ee36c 100644 --- a/libbbf_api/dmbbf.c +++ b/libbbf_api/dmbbf.c @@ -103,6 +103,9 @@ char dmroot[64] = "Device"; int bbfdatamodel_type = BBFDM_BOTH; unsigned int upnp_in_user_mask = DM_SUPERADMIN_MASK; +void (*api_add_list_value_change)(char *param_name, char *param_data, char *param_type) = NULL; +void (*api_send_active_value_change)(void) = NULL; + struct notification notifications[] = { [0] = {"0", "disabled"}, [1] = {"1", "passive"}, @@ -1827,7 +1830,7 @@ static int enabled_notify_check_param(DMPARAM_ARGS) /********************* * Check enabled notify value change ********************/ -int dm_entry_enabled_notify_check_value_change(struct dmctx *dmctx) +int dm_entry_enabled_notify_check_value_change(struct dmctx *dmctx, void (*add_list_value_change_arg)(char *param_name, char *param_data, char *param_type), void (*send_active_value_change_arg)(void)) { DMOBJ *root = dmctx->dm_entryobj; FILE *fp; @@ -1838,6 +1841,8 @@ int dm_entry_enabled_notify_check_value_change(struct dmctx *dmctx) if (fp == NULL) { return 0; } + api_add_list_value_change = add_list_value_change_arg; + api_send_active_value_change = send_active_value_change_arg; while (fgets(buf, 512, fp) != NULL) { DMNODE node = {.current_object = ""}; @@ -1879,11 +1884,11 @@ static int enabled_notify_check_value_change_param(DMPARAM_ARGS) (get_cmd)(refparam, dmctx, data, instance, &value); if (strcmp(value, dmctx->in_value) != 0) { - if (dmctx->add_list_value_change) { - dmctx->add_list_value_change(refparam, value, DMT_TYPE[type]); + if (api_add_list_value_change) { + api_add_list_value_change(refparam, value, DMT_TYPE[type]); } - if(dmctx->in_notification[0] =='2' && dmctx->send_active_value_change) { - dmctx->send_active_value_change(); + if(dmctx->in_notification[0] =='2' && api_send_active_value_change) { + api_send_active_value_change(); } } dmfree(refparam); diff --git a/libbbf_api/dmbbf.h b/libbbf_api/dmbbf.h index 4019c418..cf382bb4 100644 --- a/libbbf_api/dmbbf.h +++ b/libbbf_api/dmbbf.h @@ -64,6 +64,8 @@ extern struct dm_notif_s DMNONE; extern struct dm_notif_s DMACTIVE; extern struct dm_notif_s DMPASSIVE; +extern void (*api_add_list_value_change)(char *param_name, char *param_data, char *param_type); +extern void (*api_send_active_value_change)(void); #define DMPARAM_ARGS \ struct dmctx *dmctx, \ struct dmnode *node, \ @@ -247,8 +249,6 @@ struct dmctx char all_instances[512]; char *inst_buf[16]; char *instance_wildchar; - void (*add_list_value_change)(char *param_name, char *param_data, char *param_type); - void (*send_active_value_change)(void); }; @@ -560,7 +560,7 @@ int dm_entry_delete_object(struct dmctx *ctx); int dm_entry_set_value(struct dmctx *ctx); int dm_entry_set_notification(struct dmctx *ctx); int dm_entry_enabled_notify(struct dmctx *ctx); -int dm_entry_enabled_notify_check_value_change(struct dmctx *dmctx); +int dm_entry_enabled_notify_check_value_change(struct dmctx *dmctx, void (*add_list_value_change_arg)(char *param_name, char *param_data, char *param_type), void (*send_active_value_change_arg)(void)); int dm_entry_get_linker(struct dmctx *ctx); int dm_entry_get_linker_value(struct dmctx *ctx); #ifdef BBF_TR064