Merge "[BugFix][audio][API-1405] sos occasional call probability no sound problem, support fota" into GSW3.0-No-Connman
diff --git a/meta-sdk/meta/meta-mediatek-ivt/recipes-core/busybox/busybox/ring_buf.patch b/meta-sdk/meta/meta-mediatek-ivt/recipes-core/busybox/busybox/ring_buf.patch
index d45f497..f2f06bb 100755
--- a/meta-sdk/meta/meta-mediatek-ivt/recipes-core/busybox/busybox/ring_buf.patch
+++ b/meta-sdk/meta/meta-mediatek-ivt/recipes-core/busybox/busybox/ring_buf.patch
@@ -1,71 +1,260 @@
--- busybox-1.29.3/sysklogd/syslogd.c 2018-07-02 19:23:06.000000000 +0800
+++ busybox-1.29.3/sysklogd/syslogdnew.c 2022-09-29 13:47:26.318538618 +0800
-@@ -165,6 +165,8 @@
+@@ -165,6 +165,7 @@
#include <sys/un.h>
#include <sys/uio.h>
+#include <dlfcn.h>
-+
#if ENABLE_FEATURE_REMOTE_LOG
#include <netinet/in.h>
-@@ -176,6 +178,10 @@
+@@ -175,8 +176,11 @@
+ #include <sys/sem.h>
#include <sys/shm.h>
#endif
-
+#define ENABLE_FEATURE_SYSLOGD_CFG 1
+#define ENABLE_FEATURE_ROTATE_LOGFILE 1
+
+-
+int (*lynq_get_value)(char *file, char *section, char *key, char *tmp);
+int (*lynq_set_value)(char *section, char *key, char *value);
-
#define DEBUG 0
-@@ -1102,6 +1113,13 @@
+ /* MARK code is not very useful, is bloat, and broken:
+@@ -210,6 +214,7 @@
+
+ typedef struct logFile_t {
+ const char *path;
++ FILE * fp;
+ int fd;
+ time_t last_log_time;
+ #if ENABLE_FEATURE_ROTATE_LOGFILE
+@@ -677,6 +682,79 @@
+ static void log_to_kmsg(int pri UNUSED_PARAM, const char *msg UNUSED_PARAM) {}
+ #endif /* FEATURE_KMSG_SYSLOG */
+
++int g_syslog_buffer_size=8*1024;
++char g_syslog_buffer[16*1024];
++
++int syslog_is_buffer_write()
++{
++ if(g_syslog_buffer_size>0 && g_syslog_buffer_size<= 16*1024)
++ {
++ return true;
++ }
++ else
++ {
++ return false;
++ }
++}
++
++void syslog_close_fp_fd(FILE * fp, int* fd)
++{
++ if(syslog_is_buffer_write() && (*fd) > 1)
++ {
++ fclose(fp);
++ }
++ else
++ {
++ close(*fd);
++ }
++ (*fd) = -1;
++}
++
++void syslog_get_fp_fd(const char * path, FILE** fp, int* fd)
++{
++ if(syslog_is_buffer_write())
++ {
++ *fp = fopen(path, "a+");
++ if(*fp!=NULL)
++ {
++ *fd=fileno(*fp);
++ if(setvbuf(*fp,g_syslog_buffer,_IOFBF,g_syslog_buffer_size)!=0)
++ {
++ fclose(*fp);
++ *fd=-1;
++ }
++ else
++ {
++ int flags = fcntl(*fd, F_GETFL, 0);
++ flags |= O_NONBLOCK;
++ fcntl(*fd, F_SETFL, flags);
++ }
++ }
++ else
++ {
++ *fd=-1;
++ }
++ }
++ else
++ {
++ *fd = open(path, O_WRONLY | O_CREAT
++ | O_NOCTTY | O_APPEND | O_NONBLOCK,
++ 0666);
++ }
++}
++
++int syslog_write(FILE* fp, int fd, char *msg, int len)
++{
++ if(syslog_is_buffer_write() && fd > 1)
++ {
++ return fwrite(msg,1,len,fp);
++ }
++ else
++ {
++ return full_write(fd, msg, len);
++ }
++}
++
+ /* Print a message to the log file. */
+ static void log_locally(time_t now, char *msg, logFile_t *log_file)
+ {
+@@ -696,11 +774,14 @@
+ */
+ if (!now)
+ now = time(NULL);
+- if (log_file->last_log_time != now) {
+- log_file->last_log_time = now;
+- close(log_file->fd);
+- goto reopen;
+- }
++ if((!syslog_is_buffer_write()))
++ {
++ if (log_file->last_log_time != now) {
++ log_file->last_log_time = now;
++ close(log_file->fd);
++ goto reopen;
++ }
++ }
+ }
+ else if (log_file->fd == 1) {
+ /* We are logging to stdout: do nothing */
+@@ -710,10 +791,8 @@
+ log_file->fd = 1;
+ /* log_file->isRegular = 0; - already is */
+ } else {
+- reopen:
+- log_file->fd = open(log_file->path, O_WRONLY | O_CREAT
+- | O_NOCTTY | O_APPEND | O_NONBLOCK,
+- 0666);
++ reopen: syslog_get_fp_fd(log_file->path, &(log_file->fp), &(log_file->fd));
++
+ if (log_file->fd < 0) {
+ /* cannot open logfile? - print to /dev/console then */
+ int fd = device_open(DEV_CONSOLE, O_WRONLY | O_NOCTTY | O_NONBLOCK);
+@@ -759,6 +838,10 @@
+ rename(oldFile, newFile);
+ }
+ /* newFile == "f.0" now */
++ if(syslog_is_buffer_write() && log_file->fd > 1)
++ {
++ fflush(log_file->fp);
++ }
+ rename(log_file->path, newFile);
+ }
+
+@@ -776,15 +859,16 @@
+ fl.l_type = F_UNLCK;
+ fcntl(log_file->fd, F_SETLKW, &fl);
+ #endif
+- close(log_file->fd);
++ syslog_close_fp_fd(log_file->fp,&(log_file->fd));
+ goto reopen;
+ }
+ /* TODO: what to do on write errors ("disk full")? */
+- len = full_write(log_file->fd, msg, len);
++ len = syslog_write(log_file->fp,log_file->fd,msg,len);
++
+ if (len > 0)
+ log_file->size += len;
+ #else
+- full_write(log_file->fd, msg, len);
++ syslog_write(log_file->fp,log_file->fd,msg,len);
+ #endif
+
+ #ifdef SYSLOGD_WRLOCK
+@@ -974,6 +1058,11 @@
+ }
+ #endif
+
++static void syslog_signal_handler(int signum) {
++ fflush_all();
++}
++
++
+ static void do_syslogd(void) NORETURN;
+ static void do_syslogd(void)
+ {
+@@ -997,6 +1086,7 @@
+ signal(SIGALRM, do_mark);
+ alarm(G.markInterval);
+ #endif
++ signal(SIGUSR1, syslog_signal_handler);
+ xmove_fd(create_socket(), STDIN_FILENO);
+
+ if (option_mask32 & OPT_circularlog)
+@@ -1089,6 +1179,7 @@
+ } /* while (!bb_got_signal) */
+
+ timestamp_and_log_internal("syslogd exiting");
++ syslog_close_fp_fd(G.logFile.fp,&(G.logFile.fd));
+ remove_pidfile(CONFIG_PID_FILE_PATH "/syslogd.pid");
+ ipcsyslog_cleanup();
+ if (option_mask32 & OPT_kmsg)
+@@ -1097,11 +1188,45 @@
+ #undef recvbuf
+ }
+
++void syslog_get_uci_config_item(char* query_string, int* value)
++{
++ char get_propty_log_data[64];
++ memset(get_propty_log_data,0,64);
++ if(0 == lynq_get_value("lynq_uci","lynq_log",query_string,get_propty_log_data))
++ {
++ *value = atoi(get_propty_log_data);
++ printf("%s :%d\n",query_string,*value);
++ }
++ else
++ {
++ snprintf(get_propty_log_data,sizeof(get_propty_log_data),"%d",*value);
++ lynq_set_value("lynq_log",query_string, get_propty_log_data);
++ }
++}
++
++void syslog_get_uci_config(int* lynq_syslog_filesize, int* lynq_syslog_rotate, int* lynq_syslog_buffer_size)
++{
++ if(NULL != lynq_get_value && (NULL != lynq_set_value))
++ {
++ syslog_get_uci_config_item("syslog_flie_size",lynq_syslog_filesize);
++ syslog_get_uci_config_item("syslog_flie_rotate",lynq_syslog_rotate);
++ syslog_get_uci_config_item("syslog_flie_buffer_size",lynq_syslog_buffer_size);
++ }
++}
++
+ int syslogd_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
+ int syslogd_main(int argc UNUSED_PARAM, char **argv)
{
int opts;
char OPTION_DECL;
+
+ void *handle_uci;
-+ static char get_propty_log_data[64] = {0};
++
+ int lynq_syslog_filesize = 80*1024*1024;
+ int lynq_syslog_rotate = 10;
+ const char *lynq_libpath_uci = "/lib64/liblynq-uci.so";
++ int lynq_syslog_buffer_size = 8*1024;
+
#if ENABLE_FEATURE_REMOTE_LOG
llist_t *remoteAddrList = NULL;
#endif
-@@ -1157,6 +1175,38 @@
+@@ -1157,6 +1282,14 @@
//umask(0); - why??
write_pidfile(CONFIG_PID_FILE_PATH "/syslogd.pid");
+ handle_uci = dlopen(lynq_libpath_uci,RTLD_NOW);
+ lynq_get_value = (int (*)(void))dlsym(handle_uci,"lynq_get_value");
+ lynq_set_value = (int (*)(char *section, char *key, char *value))dlsym(handle_uci,"lynq_set_value");
-+ if(NULL != lynq_get_value && (NULL != lynq_set_value))
-+ {
-+ memset(get_propty_log_data,0,64);
-+ if(0 == lynq_get_value("lynq_uci","lynq_log","syslog_flie_size",get_propty_log_data))
-+ {
-+ lynq_syslog_filesize = atoi(get_propty_log_data);
-+ printf("lynq_syslog_filesize:%d\n",lynq_syslog_filesize);
-+ }
-+ else
-+ {
-+ snprintf(get_propty_log_data,sizeof(get_propty_log_data),"%d",lynq_syslog_filesize);
-+ lynq_set_value("lynq_log","syslog_flie_size", get_propty_log_data);
-+ }
-+ memset(get_propty_log_data,0,64);
-+ if(0 == lynq_get_value("lynq_uci","lynq_log","syslog_flie_rotate",get_propty_log_data))
-+ {
-+ lynq_syslog_rotate = atoi(get_propty_log_data);
-+ printf("lynq_syslog_rotate:%d\n",lynq_syslog_rotate);
-+ }
-+ else
-+ {
-+ snprintf(get_propty_log_data,sizeof(get_propty_log_data),"%d",lynq_syslog_rotate);
-+ lynq_set_value("lynq_log","syslog_flie_rotate", get_propty_log_data);
-+ }
-+ }
++ syslog_get_uci_config(&lynq_syslog_filesize, &lynq_syslog_rotate, &g_syslog_buffer_size);
+
+ G.logFileSize = lynq_syslog_filesize;
+ G.logFileRotate = lynq_syslog_rotate;
@@ -73,3 +262,10 @@
do_syslogd();
/* return EXIT_SUCCESS; */
}
+@@ -1171,3 +1304,6 @@
+ #undef OPTION_STR
+ #undef OPTION_DECL
+ #undef OPTION_PARAM
++
++
++
diff --git a/meta/meta-mediatek-ivt/recipes-core/busybox/busybox/ring_buf.patch b/meta/meta-mediatek-ivt/recipes-core/busybox/busybox/ring_buf.patch
index d45f497..f2f06bb 100755
--- a/meta/meta-mediatek-ivt/recipes-core/busybox/busybox/ring_buf.patch
+++ b/meta/meta-mediatek-ivt/recipes-core/busybox/busybox/ring_buf.patch
@@ -1,71 +1,260 @@
--- busybox-1.29.3/sysklogd/syslogd.c 2018-07-02 19:23:06.000000000 +0800
+++ busybox-1.29.3/sysklogd/syslogdnew.c 2022-09-29 13:47:26.318538618 +0800
-@@ -165,6 +165,8 @@
+@@ -165,6 +165,7 @@
#include <sys/un.h>
#include <sys/uio.h>
+#include <dlfcn.h>
-+
#if ENABLE_FEATURE_REMOTE_LOG
#include <netinet/in.h>
-@@ -176,6 +178,10 @@
+@@ -175,8 +176,11 @@
+ #include <sys/sem.h>
#include <sys/shm.h>
#endif
-
+#define ENABLE_FEATURE_SYSLOGD_CFG 1
+#define ENABLE_FEATURE_ROTATE_LOGFILE 1
+
+-
+int (*lynq_get_value)(char *file, char *section, char *key, char *tmp);
+int (*lynq_set_value)(char *section, char *key, char *value);
-
#define DEBUG 0
-@@ -1102,6 +1113,13 @@
+ /* MARK code is not very useful, is bloat, and broken:
+@@ -210,6 +214,7 @@
+
+ typedef struct logFile_t {
+ const char *path;
++ FILE * fp;
+ int fd;
+ time_t last_log_time;
+ #if ENABLE_FEATURE_ROTATE_LOGFILE
+@@ -677,6 +682,79 @@
+ static void log_to_kmsg(int pri UNUSED_PARAM, const char *msg UNUSED_PARAM) {}
+ #endif /* FEATURE_KMSG_SYSLOG */
+
++int g_syslog_buffer_size=8*1024;
++char g_syslog_buffer[16*1024];
++
++int syslog_is_buffer_write()
++{
++ if(g_syslog_buffer_size>0 && g_syslog_buffer_size<= 16*1024)
++ {
++ return true;
++ }
++ else
++ {
++ return false;
++ }
++}
++
++void syslog_close_fp_fd(FILE * fp, int* fd)
++{
++ if(syslog_is_buffer_write() && (*fd) > 1)
++ {
++ fclose(fp);
++ }
++ else
++ {
++ close(*fd);
++ }
++ (*fd) = -1;
++}
++
++void syslog_get_fp_fd(const char * path, FILE** fp, int* fd)
++{
++ if(syslog_is_buffer_write())
++ {
++ *fp = fopen(path, "a+");
++ if(*fp!=NULL)
++ {
++ *fd=fileno(*fp);
++ if(setvbuf(*fp,g_syslog_buffer,_IOFBF,g_syslog_buffer_size)!=0)
++ {
++ fclose(*fp);
++ *fd=-1;
++ }
++ else
++ {
++ int flags = fcntl(*fd, F_GETFL, 0);
++ flags |= O_NONBLOCK;
++ fcntl(*fd, F_SETFL, flags);
++ }
++ }
++ else
++ {
++ *fd=-1;
++ }
++ }
++ else
++ {
++ *fd = open(path, O_WRONLY | O_CREAT
++ | O_NOCTTY | O_APPEND | O_NONBLOCK,
++ 0666);
++ }
++}
++
++int syslog_write(FILE* fp, int fd, char *msg, int len)
++{
++ if(syslog_is_buffer_write() && fd > 1)
++ {
++ return fwrite(msg,1,len,fp);
++ }
++ else
++ {
++ return full_write(fd, msg, len);
++ }
++}
++
+ /* Print a message to the log file. */
+ static void log_locally(time_t now, char *msg, logFile_t *log_file)
+ {
+@@ -696,11 +774,14 @@
+ */
+ if (!now)
+ now = time(NULL);
+- if (log_file->last_log_time != now) {
+- log_file->last_log_time = now;
+- close(log_file->fd);
+- goto reopen;
+- }
++ if((!syslog_is_buffer_write()))
++ {
++ if (log_file->last_log_time != now) {
++ log_file->last_log_time = now;
++ close(log_file->fd);
++ goto reopen;
++ }
++ }
+ }
+ else if (log_file->fd == 1) {
+ /* We are logging to stdout: do nothing */
+@@ -710,10 +791,8 @@
+ log_file->fd = 1;
+ /* log_file->isRegular = 0; - already is */
+ } else {
+- reopen:
+- log_file->fd = open(log_file->path, O_WRONLY | O_CREAT
+- | O_NOCTTY | O_APPEND | O_NONBLOCK,
+- 0666);
++ reopen: syslog_get_fp_fd(log_file->path, &(log_file->fp), &(log_file->fd));
++
+ if (log_file->fd < 0) {
+ /* cannot open logfile? - print to /dev/console then */
+ int fd = device_open(DEV_CONSOLE, O_WRONLY | O_NOCTTY | O_NONBLOCK);
+@@ -759,6 +838,10 @@
+ rename(oldFile, newFile);
+ }
+ /* newFile == "f.0" now */
++ if(syslog_is_buffer_write() && log_file->fd > 1)
++ {
++ fflush(log_file->fp);
++ }
+ rename(log_file->path, newFile);
+ }
+
+@@ -776,15 +859,16 @@
+ fl.l_type = F_UNLCK;
+ fcntl(log_file->fd, F_SETLKW, &fl);
+ #endif
+- close(log_file->fd);
++ syslog_close_fp_fd(log_file->fp,&(log_file->fd));
+ goto reopen;
+ }
+ /* TODO: what to do on write errors ("disk full")? */
+- len = full_write(log_file->fd, msg, len);
++ len = syslog_write(log_file->fp,log_file->fd,msg,len);
++
+ if (len > 0)
+ log_file->size += len;
+ #else
+- full_write(log_file->fd, msg, len);
++ syslog_write(log_file->fp,log_file->fd,msg,len);
+ #endif
+
+ #ifdef SYSLOGD_WRLOCK
+@@ -974,6 +1058,11 @@
+ }
+ #endif
+
++static void syslog_signal_handler(int signum) {
++ fflush_all();
++}
++
++
+ static void do_syslogd(void) NORETURN;
+ static void do_syslogd(void)
+ {
+@@ -997,6 +1086,7 @@
+ signal(SIGALRM, do_mark);
+ alarm(G.markInterval);
+ #endif
++ signal(SIGUSR1, syslog_signal_handler);
+ xmove_fd(create_socket(), STDIN_FILENO);
+
+ if (option_mask32 & OPT_circularlog)
+@@ -1089,6 +1179,7 @@
+ } /* while (!bb_got_signal) */
+
+ timestamp_and_log_internal("syslogd exiting");
++ syslog_close_fp_fd(G.logFile.fp,&(G.logFile.fd));
+ remove_pidfile(CONFIG_PID_FILE_PATH "/syslogd.pid");
+ ipcsyslog_cleanup();
+ if (option_mask32 & OPT_kmsg)
+@@ -1097,11 +1188,45 @@
+ #undef recvbuf
+ }
+
++void syslog_get_uci_config_item(char* query_string, int* value)
++{
++ char get_propty_log_data[64];
++ memset(get_propty_log_data,0,64);
++ if(0 == lynq_get_value("lynq_uci","lynq_log",query_string,get_propty_log_data))
++ {
++ *value = atoi(get_propty_log_data);
++ printf("%s :%d\n",query_string,*value);
++ }
++ else
++ {
++ snprintf(get_propty_log_data,sizeof(get_propty_log_data),"%d",*value);
++ lynq_set_value("lynq_log",query_string, get_propty_log_data);
++ }
++}
++
++void syslog_get_uci_config(int* lynq_syslog_filesize, int* lynq_syslog_rotate, int* lynq_syslog_buffer_size)
++{
++ if(NULL != lynq_get_value && (NULL != lynq_set_value))
++ {
++ syslog_get_uci_config_item("syslog_flie_size",lynq_syslog_filesize);
++ syslog_get_uci_config_item("syslog_flie_rotate",lynq_syslog_rotate);
++ syslog_get_uci_config_item("syslog_flie_buffer_size",lynq_syslog_buffer_size);
++ }
++}
++
+ int syslogd_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
+ int syslogd_main(int argc UNUSED_PARAM, char **argv)
{
int opts;
char OPTION_DECL;
+
+ void *handle_uci;
-+ static char get_propty_log_data[64] = {0};
++
+ int lynq_syslog_filesize = 80*1024*1024;
+ int lynq_syslog_rotate = 10;
+ const char *lynq_libpath_uci = "/lib64/liblynq-uci.so";
++ int lynq_syslog_buffer_size = 8*1024;
+
#if ENABLE_FEATURE_REMOTE_LOG
llist_t *remoteAddrList = NULL;
#endif
-@@ -1157,6 +1175,38 @@
+@@ -1157,6 +1282,14 @@
//umask(0); - why??
write_pidfile(CONFIG_PID_FILE_PATH "/syslogd.pid");
+ handle_uci = dlopen(lynq_libpath_uci,RTLD_NOW);
+ lynq_get_value = (int (*)(void))dlsym(handle_uci,"lynq_get_value");
+ lynq_set_value = (int (*)(char *section, char *key, char *value))dlsym(handle_uci,"lynq_set_value");
-+ if(NULL != lynq_get_value && (NULL != lynq_set_value))
-+ {
-+ memset(get_propty_log_data,0,64);
-+ if(0 == lynq_get_value("lynq_uci","lynq_log","syslog_flie_size",get_propty_log_data))
-+ {
-+ lynq_syslog_filesize = atoi(get_propty_log_data);
-+ printf("lynq_syslog_filesize:%d\n",lynq_syslog_filesize);
-+ }
-+ else
-+ {
-+ snprintf(get_propty_log_data,sizeof(get_propty_log_data),"%d",lynq_syslog_filesize);
-+ lynq_set_value("lynq_log","syslog_flie_size", get_propty_log_data);
-+ }
-+ memset(get_propty_log_data,0,64);
-+ if(0 == lynq_get_value("lynq_uci","lynq_log","syslog_flie_rotate",get_propty_log_data))
-+ {
-+ lynq_syslog_rotate = atoi(get_propty_log_data);
-+ printf("lynq_syslog_rotate:%d\n",lynq_syslog_rotate);
-+ }
-+ else
-+ {
-+ snprintf(get_propty_log_data,sizeof(get_propty_log_data),"%d",lynq_syslog_rotate);
-+ lynq_set_value("lynq_log","syslog_flie_rotate", get_propty_log_data);
-+ }
-+ }
++ syslog_get_uci_config(&lynq_syslog_filesize, &lynq_syslog_rotate, &g_syslog_buffer_size);
+
+ G.logFileSize = lynq_syslog_filesize;
+ G.logFileRotate = lynq_syslog_rotate;
@@ -73,3 +262,10 @@
do_syslogd();
/* return EXIT_SUCCESS; */
}
+@@ -1171,3 +1304,6 @@
+ #undef OPTION_STR
+ #undef OPTION_DECL
+ #undef OPTION_PARAM
++
++
++
diff --git a/meta/meta-mediatek-mt2735/recipes-core/images/mtk-image-2735.bb b/meta/meta-mediatek-mt2735/recipes-core/images/mtk-image-2735.bb
index 7a28f31..68e4183 100755
--- a/meta/meta-mediatek-mt2735/recipes-core/images/mtk-image-2735.bb
+++ b/meta/meta-mediatek-mt2735/recipes-core/images/mtk-image-2735.bb
@@ -217,6 +217,15 @@
echo "${NATA_SERIAL_NUMBER}" >> ${IMAGE_ROOTFS}/sdcard/nata_serial.txt
}
ROOTFS_POSTPROCESS_COMMAND += " gen_feature_property;"
+
+set_tmpconfig() {
+ echo "x /tmp/ap_speech" >> ${IMAGE_ROOTFS}/usr/lib/tmpfiles.d/tmp.conf
+ echo "x /tmp/audio_ctrl_service" >> ${IMAGE_ROOTFS}/usr/lib/tmpfiles.d/tmp.conf
+ echo "x /tmp/libmodem-afe-ctrl" >> ${IMAGE_ROOTFS}/usr/lib/tmpfiles.d/tmp.conf
+ echo "x /tmp/tel_demo_single_proc.lock" >> ${IMAGE_ROOTFS}/usr/lib/tmpfiles.d/tmp.conf
+}
+ROOTFS_POSTPROCESS_COMMAND += " set_tmpconfig;"
+
#xf.li 2022.11.17 modify for userdata recover start
do_packdata() {
origin=$(pwd)