* @code
#include <tdm_backend.h>
- static tdm_func_display drm_func_display = {
- drm_display_get_capabilitiy,
- ...
- };
-
- static tdm_func_output drm_func_output = {
- drm_output_get_capability,
- ...
- };
-
- static tdm_func_layer drm_func_layer = {
- drm_layer_get_capability,
- ...
- };
-
static tdm_drm_data *drm_data;
tdm_backend_data*
tdm_drm_init(tdm_display *dpy, tdm_error *error)
{
+ tdm_func_display drm_func_display;
+ tdm_func_output drm_func_output;
+ tdm_func_layer drm_func_layer;
+
...
drm_data = calloc(1, sizeof(tdm_drm_data));
...
+
+ memset(&drm_func_display, 0, sizeof(drm_func_display));
+ drm_func_display.display_get_capabilitiy = drm_display_get_capabilitiy;
+ ...
ret = tdm_backend_register_func_display(dpy, &drm_func_display);
if (ret != TDM_ERROR_NONE)
goto failed;
+
+ memset(&drm_func_output, 0, sizeof(drm_func_output));
+ drm_func_output.output_get_capability = drm_output_get_capability;
+ ...
ret = tdm_backend_register_func_output(dpy, &drm_func_output);
if (ret != TDM_ERROR_NONE)
goto failed;
+
+ memset(&drm_func_layer, 0, sizeof(drm_func_layer));
+ drm_func_layer.layer_get_capability = drm_layer_get_capability;
+ ...
ret = tdm_backend_register_func_layer(dpy, &drm_func_layer);
if (ret != TDM_ERROR_NONE)
goto failed;
* @return #TDM_ERROR_NONE if success. Otherwise, error value.
* @see output_set_vblank_handler, tdm_output_vblank_handler
* @remark
- * A backend module @b SHOULD call a user vblank handler after interval vblanks.
+ * If this function returns TDM_ERROR_NONE, a backend module @b SHOULD call
+ * a user vblank handler with the user data of this function after interval
+ * vblanks.
*/
tdm_error (*output_wait_vblank)(tdm_output *output, int interval, int sync,
void *user_data);
* @return #TDM_ERROR_NONE if success. Otherwise, error value.
* @see output_set_commit_handler, tdm_output_commit_handler
* @remark
- * A backend module @b SHOULD call a user commit handler after all change of
- * a output object are applied.
+ * When this function is called, a backend module @b SHOULD apply the all
+ * changes of the given output object to screen as well as the layer changes
+ * of this output.
+ * If this function returns TDM_ERROR_NONE, a backend module @b SHOULD call
+ * a user commit handler with the user data of this function after all
+ * changes of the given output object are applied.
*/
tdm_error (*output_commit)(tdm_output *output, int sync, void *user_data);
/**
* @brief Set a output connection status handler
- * @details The handler will be called when the connection status of a
- * output object is changed.
+ * @details A backend module need to call the output status handler when the
+ * output connection status has been changed to let the TDM frontend know
+ * the change.
* @param[in] output A output object
* @param[in] func A output status handler
* @param[in] user_data The user data
* @return #TDM_ERROR_NONE if success. Otherwise, error value.
+ * @since 1.1.0
*/
tdm_error (*output_set_status_handler)(tdm_output *output,
tdm_output_status_handler func,
tdm_buffer_remove_destroy_handler(tbm_surface_h buffer,
tdm_buffer_destroy_handler func, void *user_data);
-
+/**
+ * @brief Add a FD handler for activity on the given file descriptor
+ * @param[in] dpy A display object
+ * @param[in] fd A file descriptor
+ * @param[in] mask to monitor FD
+ * @param[in] func A FD handler function
+ * @param[in] user_data user data
+ * @param[out] error #TDM_ERROR_NONE if success. Otherwise, error value.
+ * @return A FD event source
+ * @see #tdm_event_loop_source_fd_update, #tdm_event_loop_source_remove
+ */
tdm_event_loop_source*
tdm_event_loop_add_fd_handler(tdm_display *dpy, int fd, tdm_event_loop_mask mask,
tdm_event_loop_fd_handler func, void *user_data,
tdm_error *error);
+/**
+ * @brief Update the mask of the given FD event source
+ * @param[in] source The given FD event source
+ * @param[in] mask to monitor FD
+ * @return #TDM_ERROR_NONE if success. Otherwise, error value.
+ */
tdm_error
tdm_event_loop_source_fd_update(tdm_event_loop_source *source, tdm_event_loop_mask mask);
+/**
+ * @brief Add a timer handler
+ * @param[in] dpy A display object
+ * @param[in] func A timer handler function
+ * @param[in] user_data user data
+ * @param[out] error #TDM_ERROR_NONE if success. Otherwise, error value.
+ * @return A timer event source
+ * @see #tdm_event_loop_source_timer_update, #tdm_event_loop_source_remove
+ */
tdm_event_loop_source*
tdm_event_loop_add_timer_handler(tdm_display *dpy, tdm_event_loop_timer_handler func,
void *user_data, tdm_error *error);
+/**
+ * @brief Update the millisecond delay time of the given timer event source.
+ * @param[in] source The given timer event source
+ * @param[in] ms_delay The millisecond delay time. zero "0" disarms the timer.
+ * @return #TDM_ERROR_NONE if success. Otherwise, error value.
+ */
tdm_error
tdm_event_loop_source_timer_update(tdm_event_loop_source *source, int ms_delay);
+/**
+ * @brief Remove the given event source
+ * @param[in] source The given event source
+ * @see #tdm_event_loop_add_fd_handler, #tdm_event_loop_add_timer_handler
+ */
void
tdm_event_loop_source_remove(tdm_event_loop_source *source);