zte's code,first commit
Change-Id: I9a04da59e459a9bc0d67f101f700d9d7dc8d681b
diff --git a/ap/app/zte_log_agent/monitor.c b/ap/app/zte_log_agent/monitor.c
new file mode 100644
index 0000000..f797bba
--- /dev/null
+++ b/ap/app/zte_log_agent/monitor.c
@@ -0,0 +1,179 @@
+/**
+ *
+ * @file monitor.c
+ * @brief
+ * This file is part of ZCAT.
+ * zcatÓ¦Óòãlog_agent¼à²âusb/tf/netµÈÍâÉè²å°Îʼþ
+ *
+ * @details
+ * @author Tools Team.
+ * @email
+ * @copyright Copyright (C) 2013 Sanechips Technology Co., Ltd.
+ * @warning
+ * @date 2019/02/02
+ * @version 1.3
+ * @pre
+ * @post
+ *
+ * @par
+ * Change History :
+ * ---------------------------------------------------------------------------
+ * date version author description
+ * ---------------------------------------------------------------------------
+ * 2017/07/17 1.0 hou.bing Create file
+ * 2019/01/24 1.1 jiang.fenglin 1.Ìí¼Óusblog¶ÁÐ´Ëø
+ * 2.Ìí¼ÓÏß³ÌÃû³Æ
+ * 2019/01/25 1.2 jiang.fenglin Ôö¼ÓAPUSBģʽÏÂtty·¾¶ÅäÖù¦ÄÜ
+ * 2019/02/02 1.3 jiang.fenglin ÐÞ¸Ä×¢ÊÍ·½Ê½Îªdoxygen
+ * ---------------------------------------------------------------------------
+ *
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/prctl.h>
+#include <linux/types.h>
+#include <linux/netlink.h>
+#include <errno.h>
+#include <unistd.h>
+#include "../include/message.h"
+#include "cfg_api.h"
+#include "log_agent.h"
+
+#define BUFFER_SIZE 2048
+#define TIME_WAIT 30 /*³öÏÖÒì³£»Ö¸´Ê±¼ä*/
+
+pthread_t monitor_hotplug_thread = 0;
+
+#define ZCAT_DETECT_USB_HOTREMOVE "offline@/devices/platform/zx29_hsotg.0/gadget/tty/ttyGS2"
+#define ZCAT_DETECT_USB_HOTADD "online@/devices/platform/zx29_hsotg.0/gadget/tty/ttyGS2"
+#define ZCAT_DETECT_USB_HOTREMOVE1 "offline@/devices/platform/zx29_hsotg.0/gadget/tty/ttyGS1"
+#define ZCAT_DETECT_USB_HOTADD1 "online@/devices/platform/zx29_hsotg.0/gadget/tty/ttyGS1"
+#define ZCAT_DETECT_HOTPLUG "@/devices/platform/zx29_hsotg.0/gadget/tty/"
+
+extern void get_usblog_tty_path();
+extern int close_usblog();
+extern int open_usblog();
+
+extern BOOL g_cp_trap_flag;
+extern int hb_flag;
+extern char g_zcat_usblog[8];
+
+static int g_hotplug_sock = -1;
+
+/**
+ * @brief ³õʼ»¯ÈȲå°Î¼àÊÓʼþ.
+ * @param[in] void
+ * @return ÎļþÃèÊö·û
+ * @note
+ * @see
+ */
+static int init_hotplug_sock()
+{
+ const int buffersize = BUFFER_SIZE;
+ int ret;
+
+ struct sockaddr_nl snl;
+ bzero(&snl, sizeof(struct sockaddr_nl));
+ snl.nl_family = AF_NETLINK;
+ snl.nl_pid = getpid();
+ snl.nl_groups = 1;
+
+ int s = socket(PF_NETLINK, SOCK_DGRAM, NETLINK_KOBJECT_UEVENT);
+ if (s == -1)
+ {
+ perror("socket");
+ return -1;
+ }
+ ret = setsockopt(s, SOL_SOCKET, SO_RCVBUF, &buffersize, sizeof(buffersize));
+ if(ret != 0)
+ {
+ perror("setsockopt");
+ }
+
+ ret = bind(s, (struct sockaddr *)&snl, sizeof(struct sockaddr_nl));
+ if (ret < 0)
+ {
+ perror("bind");
+ close(s);
+ return -1;
+ }
+
+ return s;
+}
+
+/**
+ * @brief ÈȲå°Î¼àÊÓÏ̺߳¯Êý.
+ * @param[in] args Ï̺߳¯Êý²ÎÊý
+ * @return void
+ * @note
+ * @see
+ */
+static void *monitor_hotplug(void* args)
+{
+ char buf[BUFFER_SIZE] = { 0 };
+ int ret = 0;
+
+ prctl(PR_SET_NAME, "monitor_hotplug");
+
+ while(1)
+ {
+ memset(buf, 0, sizeof(buf));
+
+ get_usblog_tty_path();
+
+ ret = recv(g_hotplug_sock, &buf, sizeof(buf) - 1, 0);
+ printf("[zcat] hotplug msg, ret = %d, msg = %s\n", ret, buf);
+
+ if (strstr(buf, ZCAT_DETECT_HOTPLUG))
+ {
+ if(strstr(buf, g_zcat_usblog))
+ {
+ if(strstr(buf, "offline"))
+ {
+ hb_flag = 0;
+ close_usblog();
+ continue;
+ }
+
+ if(strstr(buf, "online"))
+ {
+ if(open_usblog() < 0)
+ {
+ printf("[zcat] open_usblog error!\n");
+ continue;
+ //return -1;
+ }
+ }
+ }
+ }
+ }
+ return NULL;
+}
+
+/**
+ * @brief ³õʼ»¯ÈȲå°Î¼àÊÓÏß³Ì.
+ * @param[in] void
+ * @return 0 on success, errno otherwise
+ * @note
+ * @see
+ */
+int init_monitor_hotplug()
+{
+ int ret = -1;
+
+ g_hotplug_sock = init_hotplug_sock();
+ printf("[zcat] init_hotplug_sock %d\n", g_hotplug_sock);
+ if(g_hotplug_sock < 0)
+ return -1;
+
+ ret = pthread_create(&monitor_hotplug_thread, NULL, monitor_hotplug, NULL);
+ if(ret != 0)
+ {
+ printf("[zcat] create monitor_hotplug_thread error\n");
+ return -1;
+ }
+ return ret;
+}