tdm_helper: Add hwc properities to backend infomation 98/320298/1
authorChangyeon Lee <cyeon.lee@samsung.com>
Wed, 26 Feb 2025 07:58:08 +0000 (16:58 +0900)
committerChangyeon Lee <cyeon.lee@samsung.com>
Wed, 26 Feb 2025 07:58:50 +0000 (16:58 +0900)
Change-Id: I95a529c2ea1e58c64d59b4253d79fb4afdfe2ad5

src/tdm_helper.c

index 7c1861429094e952484e88c7cf9d630a5e03c0cd..544c0492bfbf11c88e54d4881fce3f488322846a 100644 (file)
@@ -753,13 +753,18 @@ _tdm_helper_get_backend_information(tdm_private_module *private_module, char *re
 {
        tdm_backend_module *module_data;
        tdm_func_output *func_output;
+       tdm_func_hwc *func_hwc;
        tdm_private_output *private_output = NULL;
+       tdm_private_hwc *private_hwc = NULL;
        tdm_private_pp *private_pp = NULL;
        tdm_private_capture *private_capture = NULL;
+       const tdm_prop *props;
+       int props_count = 0;
        tdm_error ret;
        int i;
 
        func_output = &private_module->func_output;
+       func_hwc = &private_module->func_hwc;
 
        /* module information */
        module_data = private_module->module_data;
@@ -857,6 +862,53 @@ _tdm_helper_get_backend_information(tdm_private_module *private_module, char *re
                                }
                        }
                }
+
+               private_hwc = private_output->private_hwc;
+               if (private_module->use_hal_tdm) {
+                       ret = (tdm_error)hal_tdm_hwc_get_available_properties((hal_tdm_hwc *)private_hwc->hwc_backend, (const hal_tdm_prop **)&props, &props_count);
+               } else {
+                       TDM_DBG_RETURN_VAL_IF_FAIL(func_hwc->hwc_get_available_properties, reply);
+                       ret = func_hwc->hwc_get_available_properties(private_hwc->hwc_backend, &props, &props_count);
+               }
+               TDM_DBG_RETURN_VAL_IF_FAIL(ret == TDM_ERROR_NONE, reply);
+
+               TDM_SNPRINTF(reply, len, "\t%d hwc properties:\n", props_count);
+               if (props_count > 0) {
+                       TDM_SNPRINTF(reply, len, "\t\tname\ttype\tidx\tvalue\n");
+                       for (i = 0; i < props_count; i++) {
+                               tdm_value value;
+                               if (private_module->use_hal_tdm) {
+                                       ret = (tdm_error)hal_tdm_hwc_get_property((hal_tdm_hwc *)private_hwc->hwc_backend, props[i].id, (hal_tdm_value *)&value);
+                               } else {
+                                       TDM_DBG_RETURN_VAL_IF_FAIL(func_hwc->hwc_get_property, reply);
+                                       ret = func_hwc->hwc_get_property(private_hwc->hwc_backend, props[i].id, &value);
+                               }
+                               TDM_DBG_RETURN_VAL_IF_FAIL(ret == TDM_ERROR_NONE, reply);
+
+                               TDM_SNPRINTF(reply, len, "\t\t%s\t%s\t%u\t",
+                                                       props[i].name,
+                                                       tdm_value_type_str(props[i].type),
+                                                       props[i].id);
+                               switch (props[i].type) {
+                                       case TDM_VALUE_TYPE_PTR:
+                                               TDM_SNPRINTF(reply, len, "%p\n", value.ptr);
+                                               break;
+                                       case TDM_VALUE_TYPE_INT32:
+                                               TDM_SNPRINTF(reply, len, "%d\n", value.s32);
+                                               break;
+                                       case TDM_VALUE_TYPE_INT64:
+                                               TDM_SNPRINTF(reply, len, "%"PRId64"\n", value.s64);
+                                               break;
+                                       case TDM_VALUE_TYPE_UINT64:
+                                               TDM_SNPRINTF(reply, len, "%"PRIu64"\n", value.u64);
+                                               break;
+                                       case TDM_VALUE_TYPE_UINT32:
+                                       default:
+                                               TDM_SNPRINTF(reply, len, "%u\n", value.u32);
+                                               break;
+                                       }
+                       }
+               }
        }
        if (LIST_IS_EMPTY(&private_module->output_list))
                TDM_SNPRINTF(reply, len, "(no output)\n");