Change 'coupled-sink-ip' attribute. 67/193167/3
authorHyunsoo Park <hance.park@samsung.com>
Thu, 15 Nov 2018 12:49:52 +0000 (21:49 +0900)
committerHyunsoo Park <hance.park@samsung.com>
Wed, 28 Nov 2018 12:43:03 +0000 (21:43 +0900)
I changed 'coupled-sink-ip' to both 'status' and 'address' paramters.
Because it is component of 'wfd-coupled-sink' spec. It will be combined into 'coupled-sink-cap' following spec.

Change-Id: I72928254fd36e626d0c0ce8169cb7c93e87b4736
Signed-off-by: Hyunsoo Park <hance.park@samsung.com>
src/include/mm_wfd_sink.h
src/include/mm_wfd_sink_ini.h
src/include/mm_wfd_sink_priv.h
src/mm_wfd_sink.c
src/mm_wfd_sink_ini.c
src/mm_wfd_sink_priv.c

index e2c0a59..977ebaa 100644 (file)
@@ -64,6 +64,14 @@ typedef enum {
        MM_WFD_SINK_VIDEO_CODEC_H264 = 0x1b
 } MMWFDSinkVideoCodec;
 
+typedef enum {
+  MM_WFD_SINK_UNKNOWN = -1,
+  MM_WFD_SINK_NOT_COUPLED      = 0,
+  MM_WFD_SINK_COUPLED,
+  MM_WFD_SINK_TEARDOWN_COUPLING,
+  MM_WFD_SINK_RESERVED
+} MMWFDCoupledSinkStatus;
+
 typedef void(*MMWFDMessageCallback)(int error_type, MMWFDSinkStateType state_type, void *user_data);
 
 /**
@@ -485,11 +493,12 @@ int mm_wfd_sink_get_current_state(MMHandleType wfd_sink_handle, gint *state);
  * This function sets the coupled sink ip to sink\n
  *
  * @param   wfd_sink_handle     [in]    Handle of wi-fi display sink
- * @param   coupled_ip       [in]   Ip address which is coupled with primary sink. e.g secondary sink
+ * @param   status              [in]   Status which present the status of a wi-fi display sink's coupling with another wi-fi display sink
+ * @param   address             [in]   Mac address of coupled wi-fi display sink.
  *
  * @return  This function returns zero on success, or negative value with error code.
  *
  */
-int mm_wfd_sink_set_coupled_ip(MMHandleType wfd_sink_handle, char* coupled_ip);
+int mm_wfd_sink_set_coupled_sink(MMHandleType wfd_sink_handle, gint status, gchar* address);
 
 #endif
index 3174932..53273bb 100644 (file)
@@ -157,9 +157,6 @@ typedef struct __mm_wfd_sink_ini {
        /* hdcp parameter for reponse of M3 request */
        WFDHDCPContentProtection wfd_content_protection;
 
-       /* coupled sink ip address for reponse of R2 M3 request */
-       gchar wfd_coupled_sink_ip[WFD_SINK_INI_MAX_STRLEN];
-
        /* audio parameter for reponse of R2 M3 request */
        WFD2AudioCodecs wfd2_audio_codecs;
 
index ee31f04..9af7129 100644 (file)
@@ -249,7 +249,8 @@ typedef struct {
        MMHandleType extend_handle;
        guint msg_callback_id;
 
-       gchar *coupled_sink_ip;
+       guint coupled_sink_status;
+       gchar *coupled_sink_address;
 } mm_wfd_sink_t;
 
 
index db20fa3..1b75c55 100644 (file)
@@ -515,18 +515,26 @@ int mm_wfd_sink_get_current_state(MMHandleType wfd_sink_handle, gint *state)
        return result;
 }
 
-int mm_wfd_sink_set_coupled_ip(MMHandleType wfd_sink_handle, char* coupled_ip)
+int mm_wfd_sink_set_coupled_sink(MMHandleType wfd_sink_handle, gint status, gchar* address)
 {
        mm_wfd_sink_t *wfd_sink = (mm_wfd_sink_t *)wfd_sink_handle;
        int result = MM_ERROR_NONE;
        wfd_sink_debug_fenter();
        wfd_sink_return_val_if_fail(wfd_sink, MM_ERROR_WFD_NOT_INITIALIZED);
-       wfd_sink_return_val_if_fail(coupled_ip, MM_ERROR_WFD_INVALID_ARGUMENT);
+       wfd_sink_return_val_if_fail(status, MM_ERROR_WFD_INVALID_ARGUMENT);
+       wfd_sink_return_val_if_fail(address, MM_ERROR_WFD_INVALID_ARGUMENT);
+
+       if (status < MM_WFD_SINK_UNKNOWN || status > MM_WFD_SINK_TEARDOWN_COUPLING) {
+               wfd_sink_error("Wrong status is returned. status [%d]", status);
+               result = MM_ERROR_WFD_INVALID_ARGUMENT;
+       } else {
+               result = MM_ERROR_NONE;
+       }
 
        MMWFDSINK_CMD_LOCK(wfd_sink);
-       wfd_sink->coupled_sink_ip = (char *) g_malloc0(sizeof(char) * (WFD_SINK_INI_MAX_STRLEN - 1));
-       strncpy(wfd_sink->coupled_sink_ip, coupled_ip, WFD_SINK_INI_MAX_STRLEN-1);
-       wfd_sink_error("coupled_sink_ip in sink_t is [%s]", wfd_sink->coupled_sink_ip);
+       wfd_sink->coupled_sink_status = status;
+       wfd_sink->coupled_sink_address = g_strdup(address);
+       wfd_sink_debug("coupled_sink in sink_t is [%d, %s]", wfd_sink->coupled_sink_status, wfd_sink->coupled_sink_address);
        MMWFDSINK_CMD_UNLOCK(wfd_sink);
 
        wfd_sink_debug_fleave();
index 26e1ef3..ed7b322 100644 (file)
@@ -276,9 +276,6 @@ mm_wfd_sink_ini_load(mm_wfd_sink_ini_t *ini, const char *path)
                ini->wfd_content_protection.hdcp_content_protection = iniparser_getint(dict, "wfd hdcp content protection:hdcp content protection", DEFAULT_WFD_HDCP_CONTENT_PROTECTION);
                ini->wfd_content_protection.hdcp_port_no = iniparser_getint(dict, "wfd hdcp content protection:hdcp port no", DEFAULT_WFD_HDCP_PORT_NO);
 
-               /* coupled sink address */
-               MM_WFD_SINK_INI_GET_STRING(dict, ini->wfd_coupled_sink_ip, "wfd coupled sink:coupled sink ip", DEFAULT_WFD_COUPLED_SINK);
-
                /* video r2 parameter*/
                ini->wfd2_video_formats.video_codec = iniparser_getint(dict, "wfd2 video formats:video codec", DEFAULT_WFD2_VIDEO_FORMATS_CODEC);
                ini->wfd2_video_formats.video_native_resolution = iniparser_getint(dict, "wfd2 video formats:video native resolution", DEFAULT_WFD2_VIDEO_FORMATS_NATIVE_RESOLUTION);
@@ -405,9 +402,6 @@ mm_wfd_sink_ini_load(mm_wfd_sink_ini_t *ini, const char *path)
                ini->wfd_content_protection.hdcp_content_protection = DEFAULT_WFD_HDCP_CONTENT_PROTECTION;
                ini->wfd_content_protection.hdcp_port_no = DEFAULT_WFD_HDCP_PORT_NO;
 
-               /* coupled sink address */
-               strncpy(ini->wfd_coupled_sink_ip, DEFAULT_WFD_COUPLED_SINK,WFD_SINK_INI_MAX_STRLEN - 1);
-
                /* video r2 parameter*/
                ini->wfd2_video_formats.video_codec = DEFAULT_WFD2_VIDEO_FORMATS_CODEC;
                ini->wfd2_video_formats.video_native_resolution = DEFAULT_WFD2_VIDEO_FORMATS_NATIVE_RESOLUTION;
@@ -534,9 +528,6 @@ mm_wfd_sink_ini_load(mm_wfd_sink_ini_t *ini, const char *path)
        wfd_sink_debug("wfd_content_protection.hdcp_content_protection : %x", ini->wfd_content_protection.hdcp_content_protection);
        wfd_sink_debug("wfd_content_protection.hdcp_port_no : %d", ini->wfd_content_protection.hdcp_port_no);
 
-       /* coupled sink address */
-       wfd_sink_debug("wfd_coupled_sink_ip : %s", ini->wfd_coupled_sink_ip);
-
        /* video r2 parameter*/
        wfd_sink_debug("wfd2_video_formats.video_codec : %x\n", ini->wfd2_video_formats.video_codec);
        wfd_sink_debug("wfd2_video_formats.video_native_resolution : %x\n", ini->wfd2_video_formats.video_native_resolution);
index 9d9e5c1..0d80358 100644 (file)
@@ -112,6 +112,10 @@ int _mm_wfd_sink_create(mm_wfd_sink_t **wfd_sink, const char *ini_path)
        /* Initialize video resolution */
        new_wfd_sink->supportive_resolution = MM_WFD_SINK_RESOLUTION_UNKNOWN;
 
+       /*Initialize coulped sink information*/
+       new_wfd_sink->coupled_sink_address = NULL;
+       new_wfd_sink->coupled_sink_status = MM_WFD_SINK_NOT_COUPLED;
+
        /* construct attributes */
        new_wfd_sink->attrs = _mmwfd_construct_attribute((MMHandleType)new_wfd_sink);
        if (!new_wfd_sink->attrs) {
@@ -2721,6 +2725,7 @@ static int __mm_wfd_sink_prepare_source(mm_wfd_sink_t *wfd_sink, GstElement *wfd
        GstStructure *wfd_content_protection = NULL;
        GstStructure *wfd2_video_formats = NULL;
        GstStructure *wfd2_audio_codecs = NULL;
+       GstStructure *wfd_coupled_sink= NULL;
        gint hdcp_version = 0;
        gint hdcp_port = 0;
        guint64 CEA_resolution = 0;
@@ -2742,7 +2747,6 @@ static int __mm_wfd_sink_prepare_source(mm_wfd_sink_t *wfd_sink, GstElement *wfd
        g_object_set(G_OBJECT(wfdsrc), "latency", wfd_sink->ini.jitter_buffer_latency, NULL);
        g_object_set(G_OBJECT(wfdsrc), "user-agent", wfd_sink->ini.user_agent, NULL);
        g_object_set(G_OBJECT(wfdsrc), "dump-rtsp-message", wfd_sink->ini.dump_rtsp_message, NULL);
-       g_object_set(G_OBJECT(wfdsrc), "coupled-sink-ip", wfd_sink->ini.wfd_coupled_sink_ip, NULL);
        if (g_object_class_find_property(klass, "dump-rtp-data"))
                g_object_set(G_OBJECT(wfdsrc), "dump-rtp-data", wfd_sink->ini.dump_rtp_data, NULL);
        if (g_object_class_find_property(klass, "trace-first-buffer"))
@@ -2794,7 +2798,18 @@ static int __mm_wfd_sink_prepare_source(mm_wfd_sink_t *wfd_sink, GstElement *wfd
                gst_structure_free(wfd_video_formats);
                wfd_video_formats = NULL;
        }
+       /* set coupled sink information for Wi-Fi Display session negotiation */
+       wfd_coupled_sink = gst_structure_new("wfd_coupled_sink",
+                                                                                       "coupled_sink_status", G_TYPE_INT, wfd_sink->coupled_sink_status,
+                                                                                       "coupled_sink_address", G_TYPE_STRING, wfd_sink->coupled_sink_address,
+                                                                                       NULL);
+       wfd_sink_debug("set wfd-coupled-sink status %d address %s", wfd_sink->coupled_sink_status, wfd_sink->coupled_sink_address);
 
+       if (wfd_coupled_sink) {
+               g_object_set(G_OBJECT(wfdsrc), "wfd-coupled-sink", wfd_coupled_sink, NULL);
+               gst_structure_free(wfd_coupled_sink);
+               wfd_coupled_sink = NULL;
+       }
 
        /* set hdcp parameter for Wi-Fi Display session negotiation */
        if (wfd_sink->ini.wfd_content_protection.enable_hdcp) {