* #include <eom.h>\r
*\r
* @section CAPI_UI_EOM_MODULE_OVERVIEW Overview\r
- * The External Output Manager (EOM) is for managing external outputs.\r
+ * The External Output Manager (EOM) is for managing external outputs.\n\r
* User can get the information of external outputs and control them via\r
- * eom API.\r
+ * eom API.\n\n\r
+ *\r
+ * Features :\n\r
+ * - Get information.(output ID, type, resolution, physical size etc)\n\r
+ * - Receive state changing informagtion by callback function. (add, remove, mode change, attribute change)\n\r
+ * - Use external output device.(set attribute, set external window)\n\r
+ */\r
*\r
- * @sample code\r
-#include <stdio.h>\r
-#include <gio/gio.h>\r
-#include <eom.h>\r
-#include <Elementary.h>\r
-#include <Ecore_X.h>\r
-\r
-typedef struct\r
-{\r
- Evas_Object *external_window;\r
-\r
- int hdmi_output_id;\r
- int virtual_output_id;\r
-} SampleInfo;\r
-\r
-static void\r
-set_external_rect_bg_window (Evas_Object* win)\r
-{\r
- Evas_Object *bg, *rect;\r
-\r
- bg = elm_bg_add (win);\r
- elm_win_resize_object_add (win, bg);\r
- evas_object_size_hint_weight_set (bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);\r
- evas_object_show (bg);\r
-\r
- rect = evas_object_rectangle_add (evas_object_evas_get(win));\r
- evas_object_color_set (rect, 0, 0, 0, 0);\r
- evas_object_render_op_set (rect, EVAS_RENDER_COPY);\r
-\r
- elm_win_resize_object_add (win, rect);\r
- evas_object_size_hint_weight_set (rect, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);\r
- evas_object_show (rect);\r
- evas_object_show (win);\r
-}\r
-\r
-static void\r
-sample_notify_cb_output_add (eom_output_id output_id, void *user_data)\r
-{\r
- SampleInfo *info = (SampleInfo*)user_data;\r
-\r
- if (info->hdmi_output_id != output_id)\r
- {\r
- printf ("OUTPUT ADDED. SKIP. my output ID is %d\n", info->hdmi_output_id);\r
- return;\r
- }\r
-\r
- printf ("output(%d) connected\n", output_id);\r
-\r
- if (!info->external_window)\r
- {\r
- info->external_window = elm_win_add(NULL, "external_win", ELM_WIN_BASIC);\r
- if (eom_set_output_window(info->hdmi_output_id, info->external_window) == EOM_ERROR_NONE)\r
- {\r
- set_external_rect_bg_window(info->external_window);\r
- }\r
- else\r
- {\r
- evas_object_del (info->external_window);\r
- info->external_window = NULL;\r
- }\r
- }\r
-}\r
-\r
-static void\r
-sample_notify_cb_output_remove (eom_output_id output_id, void *user_data)\r
-{\r
- SampleInfo *info = (SampleInfo*)user_data;\r
-\r
- if (info->hdmi_output_id != output_id)\r
- {\r
- printf ("OUTPUT REMOVED. SKIP. my output ID is %d\n", info->hdmi_output_id);\r
- return;\r
- }\r
-\r
- printf ("output(%d) disconnected\n", output_id);\r
-\r
- if (info->external_window)\r
- {\r
- evas_object_del (info->external_window);\r
- info->external_window = NULL;\r
- }\r
-}\r
-\r
-static void\r
-sample_notify_cb_mode_changed (eom_output_id output_id, void *user_data)\r
-{\r
- SampleInfo *info = (SampleInfo*)user_data;\r
- eom_output_mode_e mode = EOM_OUTPUT_MODE_NONE;\r
-\r
- if (info->hdmi_output_id != output_id)\r
- {\r
- printf ("MODE CHANGED. SKIP. my output ID is %d\n", info->hdmi_output_id);\r
- return;\r
- }\r
-\r
- eom_get_output_mode(output_id, &mode);\r
- printf ("output(%d) mode changed(%d)\n", output_id, mode);\r
-}\r
-\r
-static void\r
-sample_notify_cb_attribute_changed (eom_output_id output_id, void *user_data)\r
-{\r
- SampleInfo *info = (SampleInfo*)user_data;\r
- eom_output_attribute_e attribute = EOM_OUTPUT_ATTRIBUTE_NONE;\r
- eom_output_attribute_state_e state = EOM_OUTPUT_ATTRIBUTE_STATE_NONE;\r
-\r
- if (info->hdmi_output_id != output_id)\r
- {\r
- printf ("ATTR CHANGED. SKIP. my output ID is %d\n", info->hdmi_output_id);\r
- return;\r
- }\r
-\r
- eom_get_output_attribute(output_id, &attribute);\r
- eom_get_output_attribute_state(output_id, &state);\r
-\r
- printf ("output(%d) attribute changed(%d, %d)\n", output_id, attribute, state);\r
- if (state == EOM_OUTPUT_ATTRIBUTE_STATE_ACTIVE)\r
- {\r
- //active : display image to external window\n");\r
- }\r
- else if (state == EOM_OUTPUT_ATTRIBUTE_STATE_INACTIVE)\r
- {\r
- //inactive : stop displaying image to external window and destroy external window\r
- if (info->external_window)\r
- {\r
- sample_destroy_window (info->external_window);\r
- info->external_window = NULL;\r
- }\r
- }\r
- else if (state == EOM_OUTPUT_ATTRIBUTE_STATE_LOST)\r
- {\r
- //lost : stop displaying image to external window, destroy external window and unset callbacks\r
- if (info->external_window)\r
- {\r
- sample_destroy_window (info->external_window);\r
- info->external_window = NULL;\r
- }\r
-\r
- eom_unset_output_added_cb(sample_notify_cb_output_add);\r
- eom_unset_output_removed_cb(sample_notify_cb_output_remove);\r
- eom_unset_mode_changed_cb(sample_notify_cb_mode_changed);\r
- eom_unset_attribute_changed_cb(sample_notify_cb_attribute_changed);\r
-\r
- eom_deinit ();\r
- }\r
-}\r
-\r
-int\r
-sample_get_output_id (const char *output_name)\r
-{\r
- eom_output_id *output_ids = NULL;\r
- eom_output_id output_id = 0;\r
- eom_output_type_e output_type = EOM_OUTPUT_TYPE_UNKNOWN;\r
- int id_cnt = 0;\r
- int i;\r
-\r
- // get output_ids\r
- output_ids = eom_get_eom_output_ids(&id_cnt);\r
- if (id_cnt == 0)\r
- {\r
- printf ("no external outputs supported\n");\r
- return 0;\r
- }\r
-\r
- // find output ids interested\r
- for (i = 0; i < id_cnt; i++)\r
- {\r
- eom_get_output_type(output_ids[i], &output_type);\r
- if (!strncmp(output_name, "HDMI", 4))\r
- {\r
- if (output_type == EOM_OUTPUT_TYPE_HDMIA || output_type == EOM_OUTPUT_TYPE_HDMIB)\r
- {\r
- output_id = output_ids[i];\r
- break;\r
- }\r
- }\r
- else if (!strncmp(output_name, "Virtual", 7))\r
- {\r
- if (output_type == EOM_OUTPUT_TYPE_VIRTUAL)\r
- {\r
- output_id = output_ids[i];\r
- break;\r
- }\r
- }\r
- }\r
-\r
- if (output_ids)\r
- free (output_ids);\r
-\r
- return output_id;\r
-}\r
-\r
-int\r
-elm_main(int argc, char **argv)\r
-{\r
- SampleInfo *info;\r
- eom_error_e ret;\r
- eom_output_mode_e output_mode = EOM_OUTPUT_MODE_NONE;\r
- memset (info, 0x00, sizeof(SampleInfo));\r
-\r
- if (eom_init () != EOM_ERROR_NONE)\r
- return 0;\r
-\r
- // get output id\r
- info->hdmi_output_id = sample_get_output_id ("HDMI");\r
- if (info->hdmi_output_id == 0)\r
- {\r
- printf ("error : HDMI output id is NULL.\n");\r
- eom_deinit ();\r
- return 0;\r
- }\r
- ret = eom_set_output_attribute(info->hdmi_output_id, EOM_OUTPUT_ATTRIBUTE_NORMAL);\r
- if (ret != EOM_ERROR_NONE)\r
- {\r
- printf ("Set attribute fail. Cannot use external output\n");\r
- eom_deinit ();\r
- return 0;\r
- }\r
-\r
- if (ret == EOM_ERROR_NONE)\r
- {\r
- eom_get_output_mode(info->hdmi_output_id, &output_mode);\r
- if (output_mode != EOM_OUTPUT_MODE_NONE)\r
- {\r
- //create external window(info->external_window)\r
- info->external_window = elm_win_add(NULL, "external_win", ELM_WIN_BASIC);\r
- if (eom_set_output_window(info->hdmi_output_id, info->external_window) == EOM_ERROR_NONE)\r
- {\r
- set_external_rect_bg_window(info->external_window);\r
- }\r
- else\r
- {\r
- evas_object_del (info->external_window);\r
- info->external_window = NULL;\r
- }\r
- }\r
-\r
- eom_set_output_added_cb(sample_notify_cb_output_add, info);\r
- eom_set_output_removed_cb(sample_notify_cb_output_remove, info);\r
- eom_set_mode_changed_cb(sample_notify_cb_mode_changed, info);\r
- eom_set_attribute_changed_cb(sample_notify_cb_attribute_changed, info);\r
- }\r
-\r
- elm_run();\r
-\r
- if (ret == EOM_ERROR_NONE)\r
- {\r
- eom_unset_output_added_cb(sample_notify_cb_output_add);\r
- eom_unset_output_removed_cb(sample_notify_cb_output_remove);\r
- eom_unset_mode_changed_cb(sample_notify_cb_mode_changed);\r
- eom_unset_attribute_changed_cb(sample_notify_cb_attribute_changed);\r
-\r
- eom_deinit ();\r
- }\r
-\r
- elm_shutdown();\r
-\r
- return 0;\r
-}\r
- * @endcode\r
*/\r
\r
#endif /* __UI_EOM_DOC_H__ */\r