int uterm_display_set_dpms(struct uterm_display *disp, int state) { if (!disp || !display_is_conn(disp)) return -EINVAL; return VIDEO_CALL(disp->ops->set_dpms, 0, disp, state); }
int mode_new(struct uterm_mode **out, const struct mode_ops *ops) { struct uterm_mode *mode; int ret; if (!out || !ops) return -EINVAL; mode = malloc(sizeof(*mode)); if (!mode) return -ENOMEM; memset(mode, 0, sizeof(*mode)); mode->ref = 1; mode->ops = ops; ret = VIDEO_CALL(mode->ops->init, 0, mode); if (ret) goto err_free; *out = mode; return 0; err_free: free(mode); return ret; }
unsigned int uterm_mode_get_height(const struct uterm_mode *mode) { if (!mode) return 0; return VIDEO_CALL(mode->ops->get_height, 0, mode); }
void uterm_video_poll(struct uterm_video *video) { if (!video) return; VIDEO_CALL(video->ops->poll, 0, video); }
const char *uterm_mode_get_name(const struct uterm_mode *mode) { if (!mode) return NULL; return VIDEO_CALL(mode->ops->get_name, NULL, mode); }
int uterm_screen_swap(struct uterm_screen *screen) { if (!screen || !display_is_online(screen->disp)) return -EINVAL; return VIDEO_CALL(screen->disp->ops->swap, 0, screen->disp); }
int display_new(struct uterm_display **out, const struct display_ops *ops) { struct uterm_display *disp; int ret; if (!out || !ops) return -EINVAL; disp = malloc(sizeof(*disp)); if (!disp) return -ENOMEM; memset(disp, 0, sizeof(*disp)); disp->ref = 1; disp->ops = ops; ret = VIDEO_CALL(disp->ops->init, 0, disp); if (ret) goto err_free; log_info("new display %p", disp); *out = disp; return 0; err_free: free(disp); return ret; }
void uterm_display_deactivate(struct uterm_display *disp) { if (!disp || !display_is_online(disp)) return; VIDEO_CALL(disp->ops->deactivate, 0, disp); }
int uterm_screen_use(struct uterm_screen *screen) { if (!screen || !display_is_online(screen->disp)) return -EINVAL; return VIDEO_CALL(screen->disp->ops->use, -EOPNOTSUPP, screen->disp); }
SHL_EXPORT int uterm_display_fake_blend(struct uterm_display *disp, const struct uterm_video_buffer *buf, unsigned int x, unsigned int y, uint8_t fr, uint8_t fg, uint8_t fb, uint8_t br, uint8_t bg, uint8_t bb) { struct uterm_video_blend_req req; if (!disp || !display_is_online(disp) || !video_is_awake(disp->video)) return -EINVAL; memset(&req, 0, sizeof(req)); req.buf = buf; req.x = x; req.y = y; req.fr = fr; req.fg = fg; req.fb = fb; req.br = br; req.bg = bg; req.bb = bb; return VIDEO_CALL(disp->ops->fake_blendv, -EOPNOTSUPP, disp, &req, 1); }
int uterm_display_use(struct uterm_display *disp) { if (!disp || !display_is_online(disp)) return -EINVAL; return VIDEO_CALL(disp->ops->use, -EOPNOTSUPP, disp); }
int uterm_display_swap(struct uterm_display *disp) { if (!disp || !display_is_online(disp)) return -EINVAL; return VIDEO_CALL(disp->ops->swap, 0, disp); }
void uterm_video_segfault(struct uterm_video *video) { if (!video) return; VIDEO_CALL(video->ops->segfault, 0, video); }
SHL_EXPORT int uterm_display_set_dpms(struct uterm_display *disp, int state) { if (!disp || !display_is_online(disp) || !video_is_awake(disp->video)) return -EINVAL; return VIDEO_CALL(disp->ops->set_dpms, 0, disp, state); }
void uterm_mode_unref(struct uterm_mode *mode) { if (!mode || !mode->ref || --mode->ref) return; VIDEO_CALL(mode->ops->destroy, 0, mode); free(mode); }
SHL_EXPORT int uterm_display_swap(struct uterm_display *disp, bool immediate) { if (!disp || !display_is_online(disp) || !video_is_awake(disp->video)) return -EINVAL; return VIDEO_CALL(disp->ops->swap, 0, disp, immediate); }
SHL_EXPORT int uterm_display_use(struct uterm_display *disp, bool *opengl) { if (!disp || !display_is_online(disp)) return -EINVAL; return VIDEO_CALL(disp->ops->use, -EOPNOTSUPP, disp, opengl); }
SHL_EXPORT unsigned int uterm_mode_get_width(const struct uterm_mode *mode) { if (!mode) return 0; return VIDEO_CALL(mode->ops->get_width, 0, mode); }
void uterm_video_sleep(struct uterm_video *video) { if (!video || !video_is_awake(video)) return; VIDEO_CB(video, NULL, UTERM_SLEEP); VIDEO_CALL(video->ops->sleep, 0, video); }
int uterm_screen_blendv(struct uterm_screen *screen, const struct uterm_video_blend_req *req, size_t num) { if (!screen) return -EINVAL; return VIDEO_CALL(screen->disp->ops->blendv, -EOPNOTSUPP, screen->disp, req, num); }
int uterm_display_fake_blendv(struct uterm_display *disp, const struct uterm_video_blend_req *req, size_t num) { if (!disp) return -EINVAL; return VIDEO_CALL(disp->ops->fake_blendv, -EOPNOTSUPP, disp, req, num); }
SHL_EXPORT int uterm_display_blit(struct uterm_display *disp, const struct uterm_video_buffer *buf, unsigned int x, unsigned int y) { if (!disp || !display_is_online(disp) || !video_is_awake(disp->video)) return -EINVAL; return VIDEO_CALL(disp->ops->blit, -EOPNOTSUPP, disp, buf, x, y); }
SHL_EXPORT int uterm_display_fake_blendv(struct uterm_display *disp, const struct uterm_video_blend_req *req, size_t num) { if (!disp || !display_is_online(disp) || !video_is_awake(disp->video)) return -EINVAL; return VIDEO_CALL(disp->ops->fake_blendv, -EOPNOTSUPP, disp, req, num); }
int uterm_display_activate(struct uterm_display *disp, struct uterm_mode *mode) { if (!disp || !display_is_conn(disp) || display_is_online(disp)) return -EINVAL; if (!mode) mode = disp->default_mode; return VIDEO_CALL(disp->ops->activate, 0, disp, mode); }
int uterm_screen_blit(struct uterm_screen *screen, const struct uterm_video_buffer *buf, unsigned int x, unsigned int y) { if (!screen) return -EINVAL; return VIDEO_CALL(screen->disp->ops->blit, -EOPNOTSUPP, screen->disp, buf, x, y); }
int uterm_screen_fill(struct uterm_screen *screen, uint8_t r, uint8_t g, uint8_t b, unsigned int x, unsigned int y, unsigned int width, unsigned int height) { if (!screen) return -EINVAL; return VIDEO_CALL(screen->disp->ops->fill, -EOPNOTSUPP, screen->disp, r, g, b, x, y, width, height); }
SHL_EXPORT int uterm_display_get_buffers(struct uterm_display *disp, struct uterm_video_buffer *buffer, unsigned int formats) { if (!disp || !display_is_online(disp) || !buffer) return -EINVAL; return VIDEO_CALL(disp->ops->get_buffers, -EOPNOTSUPP, disp, buffer, formats); }
SHL_EXPORT int uterm_display_fill(struct uterm_display *disp, uint8_t r, uint8_t g, uint8_t b, unsigned int x, unsigned int y, unsigned int width, unsigned int height) { if (!disp || !display_is_online(disp) || !video_is_awake(disp->video)) return -EINVAL; return VIDEO_CALL(disp->ops->fill, -EOPNOTSUPP, disp, r, g, b, x, y, width, height); }
SHL_EXPORT void uterm_video_sleep(struct uterm_video *video) { if (!video || !video_is_awake(video)) return; log_debug("go asleep"); VIDEO_CB(video, NULL, UTERM_SLEEP); video->flags &= ~VIDEO_AWAKE; VIDEO_CALL(video->ops->sleep, 0, video); }
int uterm_screen_blend(struct uterm_screen *screen, const struct uterm_video_buffer *buf, unsigned int x, unsigned int y, uint8_t fr, uint8_t fg, uint8_t fb, uint8_t br, uint8_t bg, uint8_t bb) { if (!screen) return -EINVAL; return VIDEO_CALL(screen->disp->ops->blend, -EOPNOTSUPP, screen->disp, buf, x, y, fr, fg, fb, br, bg, bb); }