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; }
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); }
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; }
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; }