コード例 #1
0
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;
		}
	}
}
コード例 #2
0
ファイル: vframe_receiver.c プロジェクト: releung/s82_kernel
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;
}
コード例 #3
0
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;
		}
	}
}
コード例 #4
0
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;
}