Eina_List *win_list;
Eina_List *input_dev;
+
+ /* output mode */
+ Eina_List *mode_list;
+ int gl;
} E_Info_Client;
typedef struct _E_Win_Info
const char *layer_name; // layer name
} E_Win_Info;
+typedef struct output_mode_info
+{
+ unsigned int hdisplay, hsync_start, hsync_end, htotal;
+ unsigned int vdisplay, vsync_start, vsync_end, vtotal;
+ unsigned int refresh, vscan, clock;
+ unsigned int flags;
+ int current, output, connect;
+ const char *name;
+} E_Info_Output_Mode;
+
#define VALUE_TYPE_FOR_TOPVWINS "uuisiiiiibbiibbbiis"
#define VALUE_TYPE_REQUEST_RESLIST "ui"
#define VALUE_TYPE_REPLY_RESLIST "ssi"
err:
printf("Error Check Args\n%s\n", DUMP_BUFFERS_USAGE);
return;
+}
+
+static E_Info_Output_Mode *
+_e_output_mode_info_new(uint32_t h, uint32_t hsync_start, uint32_t hsync_end, uint32_t htotal,
+ uint32_t v, uint32_t vsync_start, uint32_t vsync_end, uint32_t vtotal,
+ uint32_t refresh, uint32_t vscan, uint32_t clock, uint32_t flags,
+ int current, int output, int connect, const char *name)
+{
+ E_Info_Output_Mode *mode = NULL;
+
+ mode = E_NEW(E_Info_Output_Mode, 1);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(mode, NULL);
+
+ mode->hdisplay = h;
+ mode->hsync_start = hsync_start;
+ mode->hsync_end = hsync_end;
+ mode->htotal = htotal;
+ mode->vdisplay = v;
+ mode->vsync_start = vsync_start;
+ mode->vsync_end = vsync_end;
+ mode->vtotal = vtotal;
+ mode->refresh = refresh;
+ mode->vscan = vscan;
+ mode->clock = clock;
+ mode->flags = flags;
+ mode->current = current;
+ mode->output = output;
+ mode->connect = connect;
+ mode->name = eina_stringshare_add(name);
+
+ return mode;
+}
+
+static void
+_e_output_mode_info_free(E_Info_Output_Mode *mode)
+{
+ EINA_SAFETY_ON_NULL_RETURN(mode);
+
+ if (mode->name)
+ eina_stringshare_del(mode->name);
+
+ E_FREE(mode);
+}
+
+static void
+_cb_output_mode_info(const Eldbus_Message *msg)
+{
+ const char *name = NULL, *text = NULL;
+ Eldbus_Message_Iter *array, *ec;
+ Eina_Bool res;
+ int gl = 0;
+
+ res = eldbus_message_error_get(msg, &name, &text);
+ EINA_SAFETY_ON_TRUE_GOTO(res, finish);
+
+ res = eldbus_message_arguments_get(msg, "a("SIGNATURE_OUTPUT_MODE_SERVER")", &array);
+ EINA_SAFETY_ON_FALSE_GOTO(res, finish);
+
+ while (eldbus_message_iter_get_and_next(array, 'r', &ec))
+ {
+ uint32_t h, hsync_start, hsync_end, htotal;
+ uint32_t v, vsync_start, vsync_end, vtotal;
+ uint32_t refresh, vscan, clock, flag;
+ int current, output, connect;
+ const char *name;
+ E_Info_Output_Mode *mode = NULL;
+ res = eldbus_message_iter_arguments_get(ec,
+ SIGNATURE_OUTPUT_MODE_SERVER,
+ &h, &hsync_start, &hsync_end, &htotal,
+ &v, &vsync_start, &vsync_end, &vtotal,
+ &refresh, &vscan, &clock, &flag, &name,
+ ¤t, &output, &connect, &gl);
+ if (!res)
+ {
+ printf("Failed to get output mode info\n");
+ continue;
+ }
+
+ mode = _e_output_mode_info_new(h, hsync_start, hsync_end, htotal,
+ v, vsync_start, vsync_end, vtotal,
+ refresh, vscan, clock, flag,
+ current, output, connect, name);
+ e_info_client.mode_list = eina_list_append(e_info_client.mode_list, mode);
+ }
+ e_info_client.gl = gl;
+
+finish:
+ if ((name) || (text))
+ {
+ printf("errname:%s errmsg:%s\n", name, text);
+ }
+}
+
+static void
+_e_info_client_proc_output_mode(int argc, char **argv)
+{
+ E_Info_Output_Mode *mode = NULL;
+ Eina_List *l;
+ int output = 0;
+ int idx = 0;
+ char curr;
+
+ if (!_e_info_client_eldbus_message_with_args("output_mode", _cb_output_mode_info,
+ SIGNATURE_OUTPUT_MODE_CLIENT, E_INFO_CMD_OUTPUT_MODE_GET, 0))
+ {
+ printf("_e_info_client_proc_output_mode fail (%d)\n", 1);
+ return;
+ }
+
+ if (!e_info_client.mode_list)
+ {
+ printf("no list\n");
+ return;
+ }
+
+ if (e_info_client.gl == 0)
+ {
+ E_FREE_LIST(e_info_client.mode_list, _e_output_mode_info_free);
+
+ printf("not support output_mode.\n");
+ return;
+ }
+
+ printf("--------------------------------------[ output mode ]---------------------------------------------\n");
+ printf(" idx modename h hss hse htot v vss vse vtot refresh clk vscan preferred current\n");
+ printf("--------------------------------------------------------------------------------------------------\n");
+
+ EINA_LIST_FOREACH(e_info_client.mode_list, l, mode)
+ {
+ if (!mode) return;
+
+ if (output == mode->output)
+ {
+ printf("output %u : ", mode->output);
+ output++;
+ idx = 0;
+
+ if (mode->connect == 1)
+ printf("%s\n", "connected");
+ else
+ {
+ printf("%s\n", "disconnected");
+ continue;
+ }
+ }
+
+ if (mode->current == 1)
+ curr = 'O';
+ else
+ curr = ' ';
+ printf("%3d%13s %5u%5u%5u%5u%5u%5u%5u%5u %3u %8u %2u ",
+ idx++, mode->name,
+ mode->hdisplay, mode->hsync_start, mode->hsync_end, mode->htotal,
+ mode->vdisplay, mode->vsync_start, mode->vsync_end, mode->vtotal,
+ mode->refresh, mode->clock, mode->vscan);
+
+ if (mode->flags == 1)
+ printf("O %c\n", curr);
+ else
+ printf(" %c\n", curr);
+ }
+
+ E_FREE_LIST(e_info_client.mode_list, _e_output_mode_info_free);
+
+ printf("\n");
+
+ return;
}
#ifdef ENABLE_HWC_MULTI
"Dump attach buffers [on:1,off:0] (default path:/tmp/dump_xxx/)",
_e_info_client_proc_buffer_shot
},
+ {
+ "output_mode", NULL,
+ "Get output mode info",
+ _e_info_client_proc_output_mode
+ },
#ifdef ENABLE_HWC_MULTI
{
"hwc_trace",
return reply;
}
+static void
+_output_mode_msg_clients_append(Eldbus_Message_Iter *iter, E_Comp_Screen *e_comp_screen, int gl)
+{
+ Eldbus_Message_Iter *array_of_mode;
+ Eldbus_Message_Iter *struct_of_mode;
+ tdm_display *tdpy;
+ tdm_output *output = NULL;
+ tdm_output_conn_status status;
+ const tdm_output_mode *mode = NULL;
+ const tdm_output_mode *modes = NULL;
+ tdm_error ret = TDM_ERROR_NONE;
+ int i, j, count, mode_count, current;
+ unsigned int preferred;
+
+ eldbus_message_iter_arguments_append(iter, "a("SIGNATURE_OUTPUT_MODE_SERVER")",
+ &array_of_mode);
+
+ if (gl == 0)
+ {
+ eldbus_message_iter_arguments_append(array_of_mode, "("SIGNATURE_OUTPUT_MODE_SERVER")",
+ &struct_of_mode);
+ eldbus_message_iter_arguments_append(struct_of_mode, SIGNATURE_OUTPUT_MODE_SERVER,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "none",
+ 0, 0, 0, 0);
+ eldbus_message_iter_container_close(array_of_mode, struct_of_mode);
+
+ eldbus_message_iter_container_close(iter, array_of_mode);
+
+ return;
+ }
+
+ count = e_comp_screen->num_outputs;
+ tdpy = e_comp_screen->tdisplay;
+
+ for (i = 0; i < count; i++)
+ {
+ output = tdm_display_get_output(tdpy, i, &ret);
+ if (ret != TDM_ERROR_NONE || output == NULL)
+ continue;
+
+ ret = tdm_output_get_conn_status(output, &status);
+ if (ret != TDM_ERROR_NONE)
+ continue;
+
+ if (status == TDM_OUTPUT_CONN_STATUS_DISCONNECTED)
+ {
+ eldbus_message_iter_arguments_append(array_of_mode, "("SIGNATURE_OUTPUT_MODE_SERVER")",
+ &struct_of_mode);
+ eldbus_message_iter_arguments_append(struct_of_mode, SIGNATURE_OUTPUT_MODE_SERVER,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "none",
+ 0, i, 0, 1);
+ eldbus_message_iter_container_close(array_of_mode, struct_of_mode);
+
+ continue;
+ }
+
+ ret = tdm_output_get_mode(output, &mode);
+ if (ret != TDM_ERROR_NONE)
+ continue;
+
+ ret = tdm_output_get_available_modes(output, &modes, &mode_count);
+ if (ret != TDM_ERROR_NONE)
+ continue;
+
+ for (j = 0; j < mode_count; j++)
+ {
+ eldbus_message_iter_arguments_append(array_of_mode, "("SIGNATURE_OUTPUT_MODE_SERVER")",
+ &struct_of_mode);
+ current = 0;
+ if (mode == modes + j) current = 1;
+
+ preferred = 0;
+ if (modes[j].type & TDM_OUTPUT_MODE_TYPE_PREFERRED) preferred = 1;
+
+ eldbus_message_iter_arguments_append(struct_of_mode, SIGNATURE_OUTPUT_MODE_SERVER,
+ modes[j].hdisplay, modes[j].hsync_start, modes[j].hsync_end, modes[j].htotal,
+ modes[j].vdisplay, modes[j].vsync_start, modes[j].vsync_end, modes[j].vtotal,
+ modes[j].vrefresh, modes[j].vscan, modes[j].clock, preferred, modes[j].name,
+ current, i, 1, 1);
+ eldbus_message_iter_container_close(array_of_mode, struct_of_mode);
+ }
+ }
+
+ eldbus_message_iter_container_close(iter, array_of_mode);
+}
+
+static Eldbus_Message *
+_e_info_server_cb_output_mode(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg)
+{
+ Eldbus_Message *reply = eldbus_message_method_return_new(msg);
+ E_Comp_Screen *e_comp_screen = NULL;
+ tdm_display *tdpy = NULL;
+ int mode = 0;
+ int count = 0;
+
+ if (!eldbus_message_arguments_get(msg, SIGNATURE_OUTPUT_MODE_CLIENT, &mode, &count))
+ {
+ ERR("Error getting arguments.");
+ return reply;
+ }
+
+ if (mode == E_INFO_CMD_OUTPUT_MODE_GET)
+ {
+ e_comp_screen = e_comp->e_comp_screen;
+ tdpy = e_comp_screen->tdisplay;
+
+ if (tdpy != NULL)
+ _output_mode_msg_clients_append(eldbus_message_iter_get(reply), e_comp_screen, 1);
+ else
+ _output_mode_msg_clients_append(eldbus_message_iter_get(reply), e_comp_screen, 0);
+ }
+
+ return reply;
+}
+
#ifdef ENABLE_HWC_MULTI
static Eldbus_Message *
e_info_server_cb_hwc_trace_message(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg)
{ "punch", ELDBUS_ARGS({"iiiiiiiii", "punch_geometry"}), NULL, _e_info_server_cb_punch, 0},
{ "transform_message", ELDBUS_ARGS({"siiiiiiii", "transform_message"}), NULL, e_info_server_cb_transform_message, 0},
{ "dump_buffers", ELDBUS_ARGS({"iis", "start"}), NULL, _e_info_server_cb_buffer_dump, 0 },
+ { "output_mode", ELDBUS_ARGS({SIGNATURE_OUTPUT_MODE_CLIENT, "output mode"}), ELDBUS_ARGS({"a("SIGNATURE_OUTPUT_MODE_SERVER")", "array of ec"}), _e_info_server_cb_output_mode, 0 },
#ifdef ENABLE_HWC_MULTI
{ "hwc_trace_message", ELDBUS_ARGS({"i", "hwc_trace_message"}), NULL, e_info_server_cb_hwc_trace_message, 0},
{ "hwc", ELDBUS_ARGS({"i", "hwc"}), NULL, e_info_server_cb_hwc, 0},
*/
#define SIGNATURE_SCRSAVER_SERVER "s" /* s: result string from server */
+/* ------------------------------------------------------------------------- */
+/* OUTPUT_MODE */
+/* ------------------------------------------------------------------------- */
+#define USAGE_OUTPUT_MODE \
+ "enlightenment_info -output_mode\n"
+
+typedef enum _E_Info_Cmd_Output_Mode
+{
+ E_INFO_CMD_OUTPUT_MODE_UNKNOWN,
+ E_INFO_CMD_OUTPUT_MODE_GET
+} E_Info_Cmd_Output_Mode;
+
+#define SIGNATURE_OUTPUT_MODE_CLIENT "ii" /* i: E_Info_Cmd_Output_Mode
+ * i: mode number
+ */
+#define SIGNATURE_OUTPUT_MODE_SERVER "uuuuuuuuuuuusiiii" /* u: h value of outputmode
+ * u: hsync_start value of outputmode
+ * u: hsync_end value of outputmode
+ * u: htotal value of outputmode
+ * u: v value of outputmode
+ * u: vsync_start value of outputmode
+ * u: vsync_end value of outputmode
+ * u: vtotal value of outputmode
+ * u: refresh value of outputmode
+ * u: vscan value of outputmode
+ * u: clock value of outputmode
+ * u: flag value of outputmode
+ * s: name(resolution) of outputmode
+ * i: check flag for current set mode
+ * i: output id
+ * i: check flag for output connection
+ * i: check flag for gl support
+ */
+
+
#define USAGE_SLOT \
"(start | list | create | modify | del \n" \
"\t\t\t raise | lower | add_ec_t | add_ec_r | del_ec | focus\n" \