diff --git a/dmentry.c b/dmentry.c index a6c790e4..fa0a56c6 100644 --- a/dmentry.c +++ b/dmentry.c @@ -384,12 +384,14 @@ int dm_entry_apply(struct dmctx *ctx, int cmd, char *arg1, char *arg2) return fault; } -int dm_entry_load_enabled_notify(unsigned int dm_type, unsigned int amd_version, int instance_mode) +int dm_entry_load_enabled_notify(unsigned int dm_type, unsigned int amd_version, int instance_mode, void (*add_list_value_change)(char *param_name, char *param_data, char *param_type), void (*send_active_value_change)(void)) { struct dmctx dmctx = {0}; 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); diff --git a/dmentry.h b/dmentry.h index e6eae627..2acff840 100644 --- a/dmentry.h +++ b/dmentry.h @@ -30,7 +30,7 @@ int dm_ctx_init(struct dmctx *ctx, unsigned int dm_type, unsigned int amd_versio int dm_ctx_init_sub(struct dmctx *ctx, unsigned int dm_type, unsigned int amd_version, unsigned int instance_mode); int dm_entry_param_method(struct dmctx *ctx, int cmd, char *inparam, char *arg1, char *arg2); int dm_entry_apply(struct dmctx *ctx, int cmd, char *arg1, char *arg2); -int dm_entry_load_enabled_notify(unsigned int dm_type, unsigned int amd_version, int instance_mode); +int dm_entry_load_enabled_notify(unsigned int dm_type, unsigned int amd_version, int instance_mode, void (*add_list_value_change)(char *param_name, char *param_data, char *param_type), void (*send_active_value_change)(void)); int dm_entry_reload_enabled_notify(unsigned int dm_type, unsigned int amd_version, int instance_mode); int adm_entry_get_linker_param(struct dmctx *ctx, char *param, char *linker, char **value); int adm_entry_get_linker_value(struct dmctx *ctx, char *param, char **value); diff --git a/libbbf_api/dmbbf.c b/libbbf_api/dmbbf.c index c0633f8a..2571c493 100644 --- a/libbbf_api/dmbbf.c +++ b/libbbf_api/dmbbf.c @@ -1877,13 +1877,15 @@ static int enabled_notify_check_value_change_param(DMPARAM_ARGS) return FAULT_9005; } (get_cmd)(refparam, dmctx, data, instance, &value); -#if 0 + if (strcmp(value, dmctx->in_value) != 0) { - add_list_value_change(refparam, value, DMT_TYPE[type]); - if(dmctx->in_notification[0] =='2') - send_active_value_change(); + if (dmctx->add_list_value_change) { + dmctx->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(); + } } -#endif dmfree(refparam); return 0; } diff --git a/libbbf_api/dmbbf.h b/libbbf_api/dmbbf.h index bcaefc6c..b6ec559e 100644 --- a/libbbf_api/dmbbf.h +++ b/libbbf_api/dmbbf.h @@ -219,6 +219,8 @@ struct dmctx int (*method_obj)(DMOBJECT_ARGS); int (*checkobj)(DMOBJECT_ARGS); int (*checkleaf)(DMOBJECT_ARGS); + void (*add_list_value_change)(char *param_name, char *param_data, char *param_type); + void (*send_active_value_change)(void); struct list_head list_parameter; struct list_head set_list_tmp; struct list_head list_fault_param; @@ -592,8 +594,6 @@ void free_all_list_enabled_lwnotify(); int dm_link_inst_obj(struct dmctx *dmctx, DMNODE *parent_node, void *data, char *instance); void dm_check_dynamic_obj(struct dmctx *dmctx, DMNODE *parent_node, DMOBJ *entryobj, char *full_obj, char *obj, DMOBJ **root_entry, int *obj_found); int free_dm_browse_node_dynamic_object_tree(DMNODE *parent_node, DMOBJ *entryobj); -void add_list_value_change(char *param_name, char *param_data, char *param_type); -void send_active_value_change(void); #ifdef BBF_TR064 void dm_upnp_apply_config(void); void add_list_upnp_param_track(struct dmctx *dmctx, struct list_head *pchead, char *param, char *key, char *value, unsigned int isobj);