Ejemplo n.º 1
0
bool menu_item::get_display_data(unsigned n,const ptr_list_base<metadb_handle> & data,string_base & out,unsigned & displayflags,const GUID & caller)
{
	bool rv;
	menu_item_v2 * this_v2 = service_query_t(menu_item_v2,this);
	if (this_v2)
	{
		rv = this_v2->get_display_data(n,data,out,displayflags,caller);
		this_v2->service_release();
	}
	else
	{
		rv = get_display_data(n,data,out,displayflags);
	}
	return rv;
}
Ejemplo n.º 2
0
void client_msg(const char *key, json_t *value)
{
    int len, ret, pos;
    char *jsonstr;
    json_t *jval, *display_data;
    jval = json_object();
    
    /* send out display data whenever anything else goes out */
    display_data = get_display_data();
    if (display_data) {
	json_object_set_new(jval, "display", display_data);
	display_data = NULL;
    }
    
    /* actual message content */
    json_object_set_new(jval, key, value);
    jsonstr = json_dumps(jval, JSON_COMPACT);
    json_decref(jval);
    
    if (can_send_msg) {
	len = strlen(jsonstr);
	pos = 0;
	do {
	    ret = write(outfd, &jsonstr[pos], len - pos);
	    if (ret == -1 && (errno == EINTR || errno == EAGAIN))
		continue;
	    else if (ret == -1 || ret == 0) { /* bad news */
		/* since we just found we can't write output to the pipe,
		 * prevent any more tries */
		close(infd);
		close(outfd);
		infd = outfd = -1;
		exit_client(NULL); /* Goodbye. */
	    }
	    pos += ret;
	} while(pos < len);
    }
    /* this message is sent; don't send another */
    can_send_msg = FALSE;
    
    free(jsonstr);
}
Ejemplo n.º 3
0
int omapfb_set_update_mode(struct fb_info *fbi,
                           enum omapfb_update_mode mode)
{
    struct omap_dss_device *display = fb2display(fbi);
    struct omapfb_info *ofbi = FB2OFB(fbi);
    struct omapfb2_device *fbdev = ofbi->fbdev;
    struct omapfb_display_data *d;
    int r;

    if (!display)
        return -EINVAL;

    if (mode != OMAPFB_AUTO_UPDATE && mode != OMAPFB_MANUAL_UPDATE)
        return -EINVAL;

    omapfb_lock(fbdev);

    d = get_display_data(fbdev, display);

    if (d->update_mode == mode) {
        omapfb_unlock(fbdev);
        return 0;
    }

    r = 0;

    if (display->caps & OMAP_DSS_DISPLAY_CAP_MANUAL_UPDATE) {
        if (mode == OMAPFB_AUTO_UPDATE)
            omapfb_start_auto_update(fbdev, display);
        else /* MANUAL_UPDATE */
            omapfb_stop_auto_update(fbdev, display);

        d->update_mode = mode;
    } else { /* AUTO_UPDATE */
        if (mode == OMAPFB_MANUAL_UPDATE)
            r = -EINVAL;
    }

    omapfb_unlock(fbdev);

    return r;
}
Ejemplo n.º 4
0
int omapfb_get_update_mode(struct fb_info *fbi,
                           enum omapfb_update_mode *mode)
{
    struct omap_dss_device *display = fb2display(fbi);
    struct omapfb_info *ofbi = FB2OFB(fbi);
    struct omapfb2_device *fbdev = ofbi->fbdev;
    struct omapfb_display_data *d;

    if (!display)
        return -EINVAL;

    omapfb_lock(fbdev);

    d = get_display_data(fbdev, display);

    *mode = d->update_mode;

    omapfb_unlock(fbdev);

    return 0;
}