void vf_unreg_provider(struct vframe_provider_s *prov) { struct vframe_provider_s *p = NULL; struct vframe_receiver_s *receiver = NULL; int i; for (i = 0; i < MAX_PROVIDER_NUM; i++) { p = provider_table[i]; if (p && !strcmp(p->name, prov->name)) { provider_table[i] = NULL; if (vfm_debug_flag & 1) pr_err("%s:%s\n", __func__, prov->name); receiver = vf_get_receiver(prov->name); if (receiver && receiver->ops && receiver->ops->event_cb) { receiver->ops->event_cb( VFRAME_EVENT_PROVIDER_UNREG, NULL, receiver->op_arg); } else{ pr_err("%s Error to notify receiver\n", __func__); } vf_update_active_map(); break; } } }
int vf_notify_receiver(const char* provider_name, int event_type, void* data) { int ret = -1; vframe_receiver_t* receiver = NULL; receiver = vf_get_receiver(provider_name); if(receiver) { if(receiver->ops && receiver->ops->event_cb) { ret = receiver->ops->event_cb(event_type, data, receiver->op_arg); } } else { pr_err("Error: %s, fail to get receiver of provider %s\n", __func__, provider_name); } return ret; }
void vf_light_unreg_provider(struct vframe_provider_s *prov) { struct vframe_provider_s *p = NULL; struct vframe_receiver_s *receiver = NULL; int i; for (i = 0; i < MAX_PROVIDER_NUM; i++) { p = provider_table[i]; if (p && !strcmp(p->name, prov->name)) { if (vfm_debug_flag & 1) pr_err("%s:%s\n", __func__, prov->name); receiver = vf_get_receiver(p->name); if (receiver && receiver->ops && receiver->ops->event_cb) { receiver->ops->event_cb( VFRAME_EVENT_PROVIDER_LIGHT_UNREG, NULL, receiver->op_arg); } break; } } }
int vf_reg_provider(struct vframe_provider_s *prov) { struct vframe_provider_s *p = NULL; struct vframe_receiver_s *receiver = NULL; int i; if (!prov || !prov->name) return -1; for (i = 0; i < MAX_PROVIDER_NUM; i++) { p = provider_table[i]; if (p) { if (!strcmp(p->name, prov->name)) return -1; } } for (i = 0; i < MAX_PROVIDER_NUM; i++) { if (provider_table[i] == NULL) { provider_table[i] = prov; break; } } if (i < MAX_PROVIDER_NUM) { vf_update_active_map(); receiver = vf_get_receiver(prov->name); if (receiver && receiver->ops && receiver->ops->event_cb) { receiver->ops->event_cb(VFRAME_EVENT_PROVIDER_REG, (void *)prov->name, receiver->op_arg); } else{ pr_err("%s Error to notify receiver\n", __func__); } if (vfm_debug_flag & 1) pr_err("%s:%s\n", __func__, prov->name); } else{ pr_err("%s: Error, provider_table full\n", __func__); } return 0; }