[Feature]Add liblynq-rtp

Change-Id: Ie5c3166d0bf56156a90ada278236c206affe0e6c
diff --git a/meta/meta-mediatek-mt2735/recipes-lynq/liblynq-rtp/liblynq-rtp.bb b/meta/meta-mediatek-mt2735/recipes-lynq/liblynq-rtp/liblynq-rtp.bb
new file mode 100755
index 0000000..cca5119
--- /dev/null
+++ b/meta/meta-mediatek-mt2735/recipes-lynq/liblynq-rtp/liblynq-rtp.bb
@@ -0,0 +1,65 @@
+inherit externalsrc package

+

+DESCRIPTION = "liblynq conti plugin so"

+SECTION = "base"

+LICENSE = "MediaTekProprietary"

+#LIC_FILES_CHKSUM = "file://LICENSE;md5=e1696b147d49d491bcb4da1a57173fff"

+inherit workonsrc

+DEPENDS += "platform-libs platform-libs-common libpal liblynq-log"

+WORKONSRC = "${TOPDIR}/../src/lynq/lib/liblynq-rtp/"

+

+TARGET_CC_ARCH += "${LDFLAGS}"

+BB_INCLUDE_ADD = "--sysroot=${STAGING_DIR_HOST}"

+BB_LDFLAGS_ADD = "--sysroot=${STAGING_DIR_HOST} -Wl,--hash-style=gnu"

+#Parameters passed to do_compile()

+EXTRA_OEMAKE = "'RAT_CONFIG_C2K_SUPPORT = ${RAT_CONFIG_C2K_SUPPORT}'\

+                'MTK_MULTI_SIM_SUPPORT = ${MTK_MULTI_SIM_SUPPORT}'\

+                'TARGET_PLATFORM = ${TARGET_PLATFORM}'"

+

+

+FILES_${PN} = "${base_libdir}/*.so \

+               ${base_bindir}\

+               ${base_sbindir} \

+               /etc/dbus-1/system.d/"

+

+FILES_${PN}-dev = "/test \

+                   ${includedir}"

+

+FILES_${PN}-doc = "/doc"

+

+FILES_${PN}-dbg ="${base_bindir}/.debug \

+                  ${base_libdir}/.debug \

+                  ${base_sbindir}/.debug"

+

+INSANE_SKIP_${PN} += "already-stripped"

+INSANE_SKIP_${PN} += "installed-vs-shipped"

+

+

+#INHIBIT_PACKAGE_STRIP = "1"

+do_compile () {

+	if [ "${PACKAGE_ARCH}" = "cortexa7hf-vfp-vfpv4-neon" ]; then

+		oe_runmake all ROOT=${STAGING_DIR_HOST} OFLAGS="--sysroot=${STAGING_DIR_HOST} -Os -mhard-float -Wl,--hash-style=gnu -DTELEPHONYWARE"

+	elif [ "${PACKAGE_ARCH}" = "cortexa7hf-neon-vfpv4" ]; then

+		oe_runmake all ROOT=${STAGING_DIR_HOST} OFLAGS="--sysroot=${STAGING_DIR_HOST} -Os -mhard-float -Wl,--hash-style=gnu -DTELEPHONYWARE"

+	elif [ "${PACKAGE_ARCH}" = "cortexa53hf-neon-fp-armv8" ]; then

+		oe_runmake all ROOT=${STAGING_DIR_HOST} OFLAGS="--sysroot=${STAGING_DIR_HOST} -Os -mhard-float -Wl,--hash-style=gnu -DTELEPHONYWARE -mhard-float -mfpu=neon-fp-armv8 -mfloat-abi=hard -mcpu=cortex-a53 -mtune=cortex-a53"

+	else

+		oe_runmake all ROOT=${STAGING_DIR_HOST} OFLAGS="--sysroot=${STAGING_DIR_HOST} -Os -Wl,--hash-style=gnu -DTELEPHONYWARE"

+	fi

+}

+

+do_install () {

+    oe_runmake install ROOT=${D}

+

+    

+

+    if [ -d "${WORKONSRC}" ] ; then

+        install -d ${D}${includedir}

+        cp -arf ${S}/include/ ${D}${includedir}/

+    fi

+}

+

+addtask bachclean

+do_bachclean () {

+    oe_runmake clean

+}
\ No newline at end of file
diff --git a/meta/meta-mediatek-mt2735/recipes-lynq/packagegroups/packagegroup-lync-mt2735.bb b/meta/meta-mediatek-mt2735/recipes-lynq/packagegroups/packagegroup-lync-mt2735.bb
index eb05099..2960505 100755
--- a/meta/meta-mediatek-mt2735/recipes-lynq/packagegroups/packagegroup-lync-mt2735.bb
+++ b/meta/meta-mediatek-mt2735/recipes-lynq/packagegroups/packagegroup-lync-mt2735.bb
@@ -45,6 +45,7 @@
     liblynq-sms \
     liblynq-gnss \
     liblynq-wifi6 \
+    liblynq-rtp \
     lynq-gnss-test \
     lynq-cv2x \
     ntp \
diff --git a/src/lynq/lib/liblynq-rtp/Makefile b/src/lynq/lib/liblynq-rtp/Makefile
new file mode 100755
index 0000000..a96d783
--- /dev/null
+++ b/src/lynq/lib/liblynq-rtp/Makefile
@@ -0,0 +1,61 @@
+SHELL = /bin/sh
+RM = rm -f
+
+
+LOCAL_CFLAGS := \
+	-Wall \
+    -g \
+    -Wall \
+    -fPIC \
+    -shared \
+    -D__COMPILE_OPTION__ \
+    -D__LINUX_OS__ \
+
+CPPFLAGS=\
+  -std=c++11 \
+
+LOCAL_PATH = .
+$(warning ################# Typethree LOCAL_PATH:$(LOCAL_PATH),ROOT: $(ROOT),includedir:$(includedir),libdir:$(libdir))
+
+LOCAL_C_INCLUDES = \
+    -I$(LOCAL_PATH)/include \
+	-I$(ROOT)$(includedir)/liblog \
+	-I$(ROOT)$(includedir)/logger \
+	-I$(ROOT)$(includedir)/include \
+
+LOCAL_LIBS := \
+    -L. \
+	-ldl \
+    -lrt \
+	-llog \
+	-lutils \
+	-lcutils \
+	-llynq-log \
+#    -llynq-log \
+
+$(warning libs=$(LOCAL_LIBS))
+
+CXXSRC=\
+
+SOURCES = $(wildcard *.c wildcard src/*.c)
+
+EXECUTABLE = liblynq-rtp.so
+
+COBJS=$(SOURCES:.c=.o)
+$(warning test)
+all: $(EXECUTABLE)
+$(EXECUTABLE): $(COBJS)
+	$(CXX) -shared -Wl,--no-undefined $(COBJS) $(LOCAL_LIBS) $(LOCAL_CFLAGS) $(LOCAL_C_INCLUDES) -o $@
+
+%.o: %.c
+	$(warning ----->build $<)
+	$(CC) $(LOCAL_C_INCLUDES) $(LOCAL_CFLAGS) $(LOCAL_LIBS) -o $@ -c $<
+
+.PHONY: install clean
+install:
+	mkdir -p $(ROOT)$(base_libdir)/
+	install $(EXECUTABLE) $(ROOT)$(base_libdir)/
+
+clean:
+	rm -f $(EXECUTABLE) rm -rf *.o
+	find ./ -name *.o | xargs rm -rf
\ No newline at end of file
diff --git a/src/lynq/lib/liblynq-rtp/include/lynq_rtp.h b/src/lynq/lib/liblynq-rtp/include/lynq_rtp.h
new file mode 100755
index 0000000..01cbe51
--- /dev/null
+++ b/src/lynq/lib/liblynq-rtp/include/lynq_rtp.h
@@ -0,0 +1,34 @@
+#ifndef LYNQ_RTP_H
+#define LYNQ_RTP_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define  MAX_IP_LENGTH 128
+#define  MAX_EN_CODING_NAME_LENGTH 32
+#define  MAX_CMD_SIZE 512
+
+typedef enum{
+    RTP_CLIENT = 0,     
+    RTP_SERVER =1,
+}LYNQ_Rtp_Mode;
+
+int lynq_set_rtp_mode_media_play(const LYNQ_Rtp_Mode rtp_mode);
+int lynq_set_rtp_ip_media_play(LYNQ_Rtp_Mode rtp_mode,const char* ip,const int ip_length);
+int lynq_set_rtp_port_media_play(LYNQ_Rtp_Mode rtp_mode,const int port);
+int lynq_set_rtp_param_media_play(LYNQ_Rtp_Mode rtp_mode,char *file_address,const int clock_rate,const int channels,const int latency);
+
+int lynq_get_rtp_ip_media_play(const LYNQ_Rtp_Mode rtp_mode, char* ip, const int ip_length);
+int lynq_get_rtp_port_media_play(LYNQ_Rtp_Mode rtp_mode,int* port);
+int lynq_get_rtp_param_media_play(LYNQ_Rtp_Mode rtp_mode,char *file_address,int* clock_rate,int* channels,int* latency);
+
+int lynq_start_rtp_server_media_play();
+int lynq_stop_rtp_server_media_play();
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
\ No newline at end of file
diff --git a/src/lynq/lib/liblynq-rtp/src/lynq_rtp.c b/src/lynq/lib/liblynq-rtp/src/lynq_rtp.c
new file mode 100755
index 0000000..76de919
--- /dev/null
+++ b/src/lynq/lib/liblynq-rtp/src/lynq_rtp.c
@@ -0,0 +1,223 @@
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <log/log.h>
+#include <unistd.h>
+
+#include "lynq_rtp.h"
+#include "liblog/lynq_deflog.h"
+
+#define USER_LOG_TAG "LYNQ_RTP"
+
+char server_cmd[MAX_CMD_SIZE];
+
+char client_cmd[MAX_CMD_SIZE];
+
+typedef struct
+{
+    LYNQ_Rtp_Mode mode;
+    char ip[128];
+    int port;
+    int clockrate;
+    char address[128];
+    int latency;
+    int channels;
+}lynq_rtp_info;
+
+lynq_rtp_info lynq_rtp_client_info;
+lynq_rtp_info lynq_rtp_server_info;
+
+int g_lynq_rtp_mode;
+
+int g_lynq_rtp_pid;
+
+int get_pid(char *name) 
+{
+    char buf[256] = "";
+    char cmd[30] = ""; 
+    int  pid = -1;
+    sprintf(cmd, "pidof %s", name);
+ 
+    FILE *pFd = popen(cmd, "r");
+    if (pFd != NULL) 
+    {
+        while (fgets(buf, sizeof(buf), pFd)) 
+        {
+            pid = atoi(buf);
+            break;
+        }
+        pclose(pFd);
+    }
+    return pid;
+}
+
+int lynq_set_rtp_mode_media_play(const LYNQ_Rtp_Mode rtp_mode)
+{
+    if (rtp_mode == 0)
+    {
+        lynq_rtp_client_info.mode = 0;
+    }
+    else if (rtp_mode == 1)
+    {
+        lynq_rtp_server_info.mode = 1;
+    }
+    g_lynq_rtp_mode = rtp_mode;
+
+    LYLOGSET(LOG_INFO);
+    LYLOGEINIT(USER_LOG_TAG);
+    return 0;
+}
+
+int lynq_set_rtp_ip_media_play(LYNQ_Rtp_Mode rtp_mode,const char* ip,const int ip_length)
+{
+    if (NULL == ip)
+    {
+        LYERRLOG("ip is NULL!!!");
+        return -1;
+    }
+    if (ip_length != strlen(ip))
+    {
+        LYERRLOG("incoming ip length error");
+        return -1;
+    }
+
+    if (rtp_mode == 1)
+    {
+        bzero(lynq_rtp_server_info.ip,MAX_IP_LENGTH);
+        strcpy(lynq_rtp_server_info.ip,ip);
+    }
+    else if (rtp_mode == 0)
+    {
+        bzero(lynq_rtp_client_info.ip,MAX_IP_LENGTH);
+        strcpy(lynq_rtp_client_info.ip,ip);
+    }
+    return 0;
+}
+
+int lynq_set_rtp_port_media_play(LYNQ_Rtp_Mode rtp_mode,const int port)
+{
+    if (port < 0)
+    {
+        LYERRLOG("invalid port number");
+        return -1;
+    }
+    if (rtp_mode == 0)
+    {
+        lynq_rtp_client_info.port = port;
+    }
+    else if (rtp_mode == 1)
+    {
+        lynq_rtp_server_info.port = port;
+    }
+    return 0;
+}
+
+int lynq_set_rtp_param_media_play(LYNQ_Rtp_Mode rtp_mode,char *file_address,const int clock_rate,const int channels,const int latency)
+{
+    if (NULL == file_address)
+    {
+        LYERRLOG("file address is NULL");
+        return -1;
+    }
+    if (rtp_mode == 0)
+    {
+        lynq_rtp_client_info.clockrate = clock_rate;
+        lynq_rtp_client_info.channels = channels;
+        lynq_rtp_client_info.latency = latency;
+    }
+    if (rtp_mode == 1)
+    {
+        strcpy(lynq_rtp_server_info.address,file_address);
+    }
+    return 0;
+}
+
+int lynq_start_rtp_server_media_play()
+{
+    if (g_lynq_rtp_mode == 0)
+    {
+        bzero(client_cmd,MAX_CMD_SIZE);
+
+        sprintf(client_cmd,"gst-launch-1.0 udpsrc port=%d caps=\'application/x-rtp, media=(string)audio, clock-rate=(int)%d, channel=(int)%d\' ! rtpjitterbuffer latency=%d ! rtppcmadepay ! pulsesink",   \
+        lynq_rtp_client_info.port,lynq_rtp_client_info.clockrate,lynq_rtp_client_info.channels,lynq_rtp_client_info.latency);
+        
+        printf("typethree test :%s\r\n",client_cmd);
+        system(client_cmd);
+    }
+    else if (g_lynq_rtp_mode == 1)
+    {
+        bzero(server_cmd,MAX_CMD_SIZE);
+        
+        sprintf(server_cmd,"gst-launch-1.0 -v filesrc location=\"%s\" ! decodebin ! audioconvert ! audioresample ! alawenc ! rtppcmapay ! udpsink host=%s auto-multicast=true port=%d", \
+        lynq_rtp_server_info.address, lynq_rtp_server_info.ip,lynq_rtp_server_info.port);
+
+        printf("typethree test :%s\r\n",server_cmd);
+        system(server_cmd);
+    }
+    g_lynq_rtp_pid = get_pid(client_cmd);
+    return 0;
+}
+
+int lynq_stop_rtp_server_media_play()
+{
+    char kill_buf[512] = "";
+    sprintf(kill_buf,"kill -9 %d",g_lynq_rtp_pid);
+    system(kill_buf);
+    return 0;
+}
+
+
+/*query part*/
+int lynq_get_rtp_ip_media_play(const LYNQ_Rtp_Mode rtp_mode, char* ip, const int ip_length)
+{
+    if (NULL == ip)
+    {
+        LYERRLOG("incoming ip is NULL!!!");
+        return -1;
+    }
+    if (rtp_mode == 0)
+    {
+        bzero(ip,ip_length);
+        strcpy(ip,lynq_rtp_client_info.ip);
+    }
+    else if (rtp_mode == 1)
+    {
+        bzero(ip,ip_length);
+        strcpy(ip,lynq_rtp_server_info.ip);
+    }
+    return 0;
+}
+
+int lynq_get_rtp_port_media_play(LYNQ_Rtp_Mode rtp_mode,int* port)
+{
+    if (rtp_mode == 0)
+    {
+        *port = lynq_rtp_client_info.port;
+    }
+    else if (rtp_mode == 1)
+    {
+        *port = lynq_rtp_server_info.port;
+    }
+    return 0;
+}
+
+int lynq_get_rtp_param_media_play(LYNQ_Rtp_Mode rtp_mode,char *file_address,int* clock_rate,int* channels,int* latency)
+{
+    if (NULL == file_address)
+    {
+        LYERRLOG("file address is NULL");
+        return -1;
+    }
+    if (rtp_mode == 0)
+    {
+        *clock_rate = lynq_rtp_client_info.clockrate;
+        *channels = lynq_rtp_client_info.channels ;
+        *latency = lynq_rtp_client_info.latency;
+    }
+    if (rtp_mode == 1)
+    {
+        strcpy(file_address,lynq_rtp_server_info.address);
+    }
+    return 0;
+}
\ No newline at end of file