| #include <stdio.h> |
| #include <string.h> |
| #include <unistd.h> |
| #include <stdlib.h> |
| #include <log/log.h> |
| #include <unistd.h> |
| #include <pthread.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; |
| |
| pthread_t lynq_rtp_server_pid = 0; |
| |
| 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; |
| } |
| |
| #ifdef GSW_RTP_CFG |
| /*hqing add for Geely demand on 11/17/2022, after playing audio, codec should sleep*/ |
| void set_codec(int open) |
| { |
| RLOGD("set_codec %d",open); |
| |
| if(open==0) |
| { |
| system("echo out 201 0 >/sys/devices/platform/10005000.pinctrl/mt_gpio"); |
| system("echo out 181 0 >/sys/devices/platform/10005000.pinctrl/mt_gpio"); |
| } |
| else |
| { |
| system("echo out 181 1 >/sys/devices/platform/10005000.pinctrl/mt_gpio"); |
| usleep(10);//just open need usleep 10us |
| system("echo out 201 1 >/sys/devices/platform/10005000.pinctrl/mt_gpio"); |
| system("echo 0x00 0x00 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x01 0x00 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x02 0x00 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x03 0x80 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x04 0x04 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x05 0x00 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x06 0x00 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x07 0xa0 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x08 0x20 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x09 0x00 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x0a 0x00 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x0b 0x32 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x0c 0x00 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x0d 0x00 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x0f 0x10 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x10 0x20 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x11 0xf8 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x12 0xff > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x13 0x04 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x14 0x78 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x15 0x78 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x16 0x04 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x17 0x78 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x18 0x78 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x19 0x80 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x1a 0x00 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x1b 0xfe > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x1c 0x00 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x1d 0x00 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x1e 0xfe > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x1f 0x00 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x20 0x18 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x21 0x18 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x22 0x00 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x23 0x00 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x24 0xc0 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x25 0xc0 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x26 0x00 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x27 0x00 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x28 0x00 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x29 0x00 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x2a 0x00 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x2b 0x02 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x2c 0x02 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x2d 0x00 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x2e 0x02 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x2f 0x85 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x30 0x00 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x31 0x80 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x32 0x85 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x33 0x9f > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x34 0x00 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x35 0x80 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x36 0x82 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x37 0x00 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x38 0x00 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x39 0x82 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x3a 0x9f > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x3b 0x00 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x3c 0x00 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x3d 0x00 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x3e 0x00 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x3f 0x80 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x40 0xaf > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x41 0x0d > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x42 0x00 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x43 0x80 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x44 0x00 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x45 0x00 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x46 0x02 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x47 0xaf > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x48 0x0d > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x49 0x00 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x4a 0x00 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x4b 0x00 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x4c 0x00 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x4d 0x00 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x4e 0x00 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x4f 0x00 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x50 0x00 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x51 0x02 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x52 0xbf > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x53 0x00 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x54 0x00 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x55 0x00 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x56 0x9b > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x57 0x00 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x58 0x00 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x59 0x00 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x5a 0x00 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x5b 0x02 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x5c 0xbf > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x5d 0x08 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x5e 0xde > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x5f 0x0c > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x60 0x00 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x61 0x00 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x62 0x00 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x63 0x00 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x64 0x00 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x65 0x01 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x66 0xa2 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x67 0x00 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x68 0x00 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x69 0x00 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x6a 0x00 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x6b 0x00 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x6c 0x40 > /sys/kernel/debug/regmap/0-0018/registers"); |
| system("echo 0x6d 0x00 > /sys/kernel/debug/regmap/0-0018/registers"); |
| } |
| } |
| #endif |
| |
| void* lynq_pthread_rtp_system() |
| { |
| int ret = 0; |
| ret = pthread_setcancelstate(PTHREAD_CANCEL_ENABLE,NULL); |
| if (g_lynq_rtp_mode == 0) |
| { |
| |
| #ifdef GSW_RTP_CFG |
| set_codec(1); |
| #endif |
| |
| 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); |
| 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); |
| |
| system(server_cmd); |
| } |
| } |
| |
| int lynq_start_rtp_server_media_play() |
| { |
| int ret = 0; |
| pthread_attr_t attr; |
| |
| pthread_attr_init(&attr); |
| pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); |
| ret = pthread_create(&lynq_rtp_server_pid,&attr,lynq_pthread_rtp_system,0); |
| if(ret <0) |
| { |
| LYERRLOG("urc pthread create error"); |
| return -1; |
| } |
| return ret; |
| } |
| |
| int lynq_stop_rtp_server_media_play() |
| { |
| int ret = 0; |
| if(lynq_rtp_server_pid != 0) |
| { |
| ret = pthread_cancel(lynq_rtp_server_pid); |
| LYINFLOG("pthread cancel ret = %d",ret); |
| ret = pthread_join(lynq_rtp_server_pid,NULL); |
| LYINFLOG("pthread join ret = %d",ret); |
| } |
| else |
| { |
| LYERRLOG("rtp stop error"); |
| return -1; |
| } |
| 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; |
| } |