[T106][ZXW-22]7520V3SCV2.01.01.02P42U09_VEC_V0.8_AP_VEC origin source commit
Change-Id: Ic6e05d89ecd62fc34f82b23dcf306c93764aec4b
diff --git a/ap/app/zte_log_agent/cp_ramdump.c b/ap/app/zte_log_agent/cp_ramdump.c
new file mode 100644
index 0000000..0e9c52b
--- /dev/null
+++ b/ap/app/zte_log_agent/cp_ramdump.c
@@ -0,0 +1,852 @@
+/**
+ *
+ * @file cp_ramdump.c
+ * @brief
+ * This file is part of ZCAT.
+ * zcatÓ¦Óòãlog_agent´¦Àícp_ramdumpÉ豸
+ *
+ * @details
+ * @author Tools Team.
+ * @email
+ * @copyright Copyright (C) 2013 Sanechips Technology Co., Ltd.
+ * @warning
+ * @date 2019/02/02
+ * @version 1.1
+ * @pre
+ * @post
+ *
+ * @par
+ * Change History :
+ * ---------------------------------------------------------------------------
+ * date version author description
+ * ---------------------------------------------------------------------------
+ * 2017/07/17 1.0 hou.bing Create file
+ * 2019/02/02 1.1 jiang.fenglin ÐÞ¸Ä×¢ÊÍ·½Ê½Îªdoxygen
+ * ---------------------------------------------------------------------------
+ *
+ *
+ */
+#if 0
+#include "log_agent.h"
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <getopt.h>
+#include <stdarg.h>
+#include <termios.h>
+#include <stddef.h>
+#include <dirent.h>
+#include <time.h>
+#include <pthread.h>
+
+/**
+ * Êý¾Ý½á¹¹¶¨Òå
+ */
+typedef struct {
+ char file_name[32];
+ unsigned int file_size;
+} file_info_t;
+
+/**
+ * È«¾Ö±äÁ¿ºÍºê¶¨Òå
+ */
+#define LOG_TAG "Modem_Ramdump"
+#define ZTE_LOG_PATH "/mnt/sdcard/ZTELog"
+#define RAMDUMP_LOG_PATH "/mnt/sdcard/ZTELog/Ramdump"
+#define DEFAULT_RAMDUMP_PATH "/sdcard/ZTELog/ramdump"
+#define USB_RAMDUMP_FLAG_FILE_NAME "/sys/dwc_usb/usbconfig/ramdumpFlag"
+// #define MODEM_RAMDUMP_PATH "/data/local/log/Ramdump"
+
+pthread_t get_ramdump_thread = 0;
+//typedef unsigned int UINT32;
+int ramdump_fd = -1;
+
+#define RAMDUMP_DEFAULT_DELAY 10000
+#define MAX_AP_LOG_BUFF_LEN 8192
+
+/*Ramdump Ö¸ÁÒå*/
+#define DUMPFILE_LINK_REQ (UINT32)1 //ͬ²½ÇëÇó
+#define DUMPFILE_LINK_RSP (UINT32)2 //ͬ²½ÇëÇóÓ¦´ð£¬¸½´øramdumpÎļþÊýÄ¿
+#define DUMPFILE_FILE_REQ (UINT32)3 //ÇëÇóÖ¸¶¨±àºÅÎļþÐÅÏ¢
+#define DUMPFILE_FILE_RSP (UINT32)4 //Îļþ±àºÅÎļþÐÅÏ¢Ó¦´ð£¬¸½´ø´«ÊäÎļþÃû¼°´óС
+#define DUMPFILE_READ_REQ (UINT32)5 //ÇëÇó¶Áȡָ¶¨±àºÅÎļþÄÚÈÝ
+#define DUMPFILE_READ_RSP (UINT32)6 //ÎļþÄÚÈݶÁȡӦ´ð£¬¸½´øÎļþÄÚÈÝ
+#define DUMPFILE_END_REQ (UINT32)7 //´«Êä½áÊø
+#define DUMPFILE_END_RSP (UINT32)8 //´«Êä½áÊøÓ¦´ð
+#define DUMPFILE_CMD_FAIL (UINT32)9 //Ö¸Áî´íÎó
+#define DUMPFILE_NO_FAIL (UINT32)10 //Îļþ±àºÅ´íÎó
+#define DUMPFILE_LENGTH_FAIL (UINT32)11 //ÎļþλÖôóС´íÎó
+#define CMD_BUFFER_LEN (UINT32)16 //Ö¸Áî²Á·À¶¾
+#define FILENAME_LEN (UINT32)32 //ÎļþÃû³¤¶È
+#define FILENAME_MAX_LEN (UINT32)256 //ÎļþÃû×î´ó³¤¶È
+//#define DATA_BLOCK_SIZE (0x40000) // Êý¾Ý»º³å´óС
+#define DATA_BLOCK_SIZE (0x01000) // Êý¾Ý»º³å´óС
+
+#define MIN(a, b) ((a)< (b) ? (a): (b))
+
+static char g_ramdump_datablock_buffer[DATA_BLOCK_SIZE] = {0};
+//static T_LOG_SDCARD_PARA g_ramdump_sdcard_para = { {0} };
+static char* g_ramdump_path = NULL;
+static int g_modem_fd = -1;
+/*É豸·¾¶*/
+static char* ramdump_dev="/dev/ramdump";
+static char* usb_ramdump_dev="/dev/ttyGS0";
+
+BOOL g_cp_trap_flag = TRUE;
+BOOL g_cpcrash_flag = FALSE;
+BOOL g_trap_flag = TRUE;
+
+int usb_ramdump_dev_fd = -1;
+pthread_t usb_ramdump_dev_thread = -1;
+
+/**
+ * Íⲿ±äÁ¿ºÍº¯ÊýÒýÓÃ
+ */
+extern int ramdump_fd;
+extern E_ZCAT_MODE g_log_dir;
+extern unsigned int zTools_SendData(unsigned char *buf, unsigned int buf_len,unsigned char tgt_mdl_no, unsigned char tgt_submdl_no, unsigned char src_submdl_no);
+extern int filelength(FILE *fp);
+extern BOOL zCatAgt_Ap_ReadBuffer(T_AP_SRC_BUFFER_TYPE *src, T_AP_DEST_BUFFER_TYPE *dest);
+extern int test_dir_exist(char* dir_path);
+
+/**
+ * º¯ÊýʵÏÖ
+ */
+
+BOOL get_cp_crash_flag()
+{
+ return g_cpcrash_flag;
+}
+
+#if 0
+static char * zte_time()
+{
+ time_t timep;
+ struct tm *p;
+ static char buf[22];
+ memset(buf,0,22);
+ time(&timep);
+ p =localtime(&timep);
+ snprintf(buf,21,"%4d/%02d/%02d %02d:%02d:%02d ",1900 + p->tm_year,1 + p->tm_mon,p->tm_mday,p->tm_hour,p->tm_min,p->tm_sec);
+ return buf;
+}
+#endif
+static int writefile(char*path, char*buf, unsigned len)
+{
+ FILE *fp;
+ int rtv;
+ if((fp=fopen(path,"w"))==NULL)
+ {
+ printf("open file %s error.\n",path);
+ return -1;
+ }
+ rtv = fwrite(buf,len,1, fp);
+ fclose(fp);
+ return rtv;
+}
+
+static int readfile(char *path, char* buf, unsigned len)
+{
+ FILE *fp;
+ int length;
+ if((fp=fopen(path,"r"))==NULL)
+ {
+ printf("open file %s error.\n",path);
+ return -1;
+ }
+ length = filelength(fp);
+ length = length > len? len: length;
+ //ch=(char *)malloc(length+1);
+ fread(buf,length,1,fp);
+ fclose(fp);
+ *(buf+length)='\0';
+ return length;
+}
+
+BOOL get_trap_flag_from_dev()
+{
+
+ int ramdumpFlag = 0;
+ char buf[2]={0};
+
+ readfile(USB_RAMDUMP_FLAG_FILE_NAME, buf, 1);
+
+ ramdumpFlag = atoi(buf);
+ printf("ramdumpFlag : %d \n", ramdumpFlag);
+
+ if(ramdumpFlag == 0){
+ printf("usb normal \n");
+ }else{
+ printf("usb ramdump \n");
+ }
+ if(ramdumpFlag == 1)
+ {
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+
+int send_ramdump_to_trap(unsigned char *buf, int read_len)
+{
+ int write_len = -1;
+ while(usb_ramdump_dev_fd == -1)
+ {
+ sleep(1);
+ printf("hb ramdump test\n");
+ }
+
+ write_len = write(usb_ramdump_dev_fd, buf, read_len);
+
+ if (write_len != read_len)
+ {
+ printf("modem_log, send_rule error, write_len = %d, len = %d. \n", write_len, read_len);
+ return -1;
+ }
+
+ return 0;
+}
+
+static unsigned char gReadApplogBuffer[1024*130] = {0};
+/**********************************************************************************
+*º¯Êý˵Ã÷:´ÓramdumpÉ豸¶ÁÈ¡Êý¾Ý
+***********************************************************************************/
+void *get_ramdump_from_dev(void *arg)
+//void *get_ramdump_from_dev(int fd)
+{
+
+ int read_len = -1;
+
+ printf("get_ramdump_from_dev * p_fd %d \n", ramdump_fd);
+
+ while(1)
+ {
+ read_len = read(ramdump_fd, gReadApplogBuffer, sizeof(gReadApplogBuffer));
+ if(read_len>0)
+ {
+ if(g_log_dir == ZCAT_MODE_AP_USB)
+ {
+ if(g_cp_trap_flag)
+ {
+ writefile(USB_RAMDUMP_FLAG_FILE_NAME, "1", 1);
+ printf("get_ramdump_from_dev: writefile");
+ }
+ else
+ {
+ send_ramdump_to_trap(gReadApplogBuffer, read_len);
+ printf("get_ramdump_from_dev: send_ramdump_to_trap");
+ }
+ }
+ else if(g_log_dir == ZCAT_MODE_AP_NET)
+ {
+ g_cpcrash_flag = TRUE;
+ T_AP_DEST_BUFFER_TYPE dest = {0};
+ T_AP_SRC_BUFFER_TYPE src = {0};
+ src.buf = gReadApplogBuffer;
+ src.beginIndex=0;
+ src.bufSize = sizeof(gReadApplogBuffer);
+ while (zCatAgt_Ap_ReadBuffer(&src , &dest))
+ {
+ unsigned char *p = dest.buf;
+ unsigned short len = dest.len;
+ //if(g_log_dir == ZCAT_MODE_AP_NET)
+ {
+ //»¥³â???
+ zTools_SendData(p, len, MDL_ZCAT, 1, SUBMDL_ZCATAGT);
+ }
+
+ memset(&dest, 0, sizeof(T_AP_DEST_BUFFER_TYPE));
+ }
+ }
+ else
+ {
+ printf("get_ramdump_from_dev g_log_dir error \n");
+ }
+ }
+ else
+ {
+ sleep(1);
+ //printf("get_ramdump_from_dev: sleep1");
+ }
+ }
+ return NULL;
+}
+
+//³õʼ»¯ramdump logÉ豸
+int init_ramdump_log_device()
+{
+ int ret_ramdump;
+ int fd;
+
+ fd = open(ramdump_dev, O_RDWR);
+ printf("init_ramdump_log_device fd %d \n", fd);
+ if (fd < 0)
+ {
+ printf("open ramdump_dev error!!!\n");
+ return -1;
+ }
+ ramdump_fd = fd;
+ ret_ramdump = pthread_create(&get_ramdump_thread, NULL, get_ramdump_from_dev, NULL);
+ if(ret_ramdump!=0)
+ {
+ printf("pthread_create getramdump_thread error\n");
+ return -1;
+ }
+
+ return fd;
+}
+
+static int tty_write(int fd, const char* buf, int size)
+{
+ int ret = 0;
+ ret = write(fd, buf, size);
+ if (ret != size) {
+ printf("%s failed, size=%d, ret=%d\n", __FUNCTION__, size, ret);
+ return -1;
+ }
+ return 0;
+}
+
+static int tty_read(int fd, char*buf, int size ,unsigned int delay_ms)
+{
+ int ret = -1;
+ int read_count = 0;
+ fd_set fds;
+ struct timeval tv;
+ if (buf == NULL)
+ return -1;
+ tv.tv_sec = delay_ms/1000;
+ tv.tv_usec = (delay_ms%1000) *1000;
+ FD_ZERO(&fds);
+ FD_SET(fd, &fds);
+ ret = select(fd +1, &fds, NULL, NULL, &tv);
+ if (ret > 0) {
+ read_count = read(fd, buf, size);
+ if (read_count <= 0) {
+ printf("%s read %d failed for ret=%d\n" , __FUNCTION__, read_count, ret);
+ return -1;
+ }
+ return read_count;
+ } else if (ret == 0) {
+ printf("select time out %dms\n" , delay_ms);
+ } else {
+ printf("select failed %s\n" , strerror(errno));
+ }
+ return -1;
+}
+static int mdp_send(const char*buf, int size)
+{
+ //mdp_print_array(,buf, size);
+ return tty_write(g_modem_fd, buf,size);
+}
+
+
+static int mdp_receive(char *buf, int size)
+{
+ int count = 0;
+ int length = size;
+ char *pbuffer = buf;
+ while ( length > 0) {
+ count = tty_read(g_modem_fd, pbuffer,size, RAMDUMP_DEFAULT_DELAY);
+ if (count < 0) {
+ return -1;
+ }
+ pbuffer += count;
+ length -= count;
+ }
+ //mdp_print_array(, buf, size);
+ return size;
+}
+static int mdp_send_command(unsigned int cmd, unsigned int argc,...)
+{
+ char buffer[CMD_BUFFER_LEN] = {0};
+ unsigned int i = 0;
+ unsigned int arg = 0;
+ UINT32 *pbuffer = (UINT32*)buffer;
+ *pbuffer = cmd;
+ va_list ap;
+ va_start(ap, argc);
+ for (i=0; i<argc; i++) {
+ arg = va_arg(ap, unsigned int);
+ *(++pbuffer) = arg;
+ }
+ va_end(ap);
+ return mdp_send(buffer, CMD_BUFFER_LEN);
+}
+static int mdp_receive_ack(unsigned int ack)
+{
+ int ret = 0;
+ unsigned int resp;
+ //char buffer[64] = {0};
+ ret = mdp_receive((char *)&resp, sizeof(unsigned int));
+ if (ret > 0) {
+ if (ack == resp)
+ return 0;
+ }
+ return -1;
+}
+static int init_devices(char* dev_path)
+{
+ int fd = -1;
+
+ fd = open(dev_path, O_RDWR);
+ if (fd < 0) {
+ printf("Can't open %s(%s)\n", dev_path, strerror(errno));
+ return -1;
+ }
+
+ return fd;
+}
+static int create_fold(char *fold)
+{
+ char buffer[256]= {0};
+ snprintf(buffer, 256, "mkdir -p %s\n", fold);
+ int ret = system(buffer);
+ if (ret < 0)
+ return -1;
+ return 0;
+}
+static int create_file(char* fold, char * path)
+{
+ int fd = -1;
+ DIR* pdir = NULL;
+ char file_name[FILENAME_MAX_LEN] = {0};
+ int ret = 0;
+ if ((fold==NULL) || (*fold=='\0'))
+ fold = g_ramdump_path;
+ if ( (path==NULL) || (*path=='\0')) {
+
+ return -1;
+ }
+ if ((pdir = opendir(fold)) == NULL) {
+ ret = create_fold(fold);
+ if (ret < 0) {
+ printf("%s create fold %d failed (%s)", fold, errno, strerror(errno));
+ return -1;
+ }
+ }
+ if (pdir != NULL)
+ closedir(pdir);
+ snprintf(file_name, FILENAME_MAX_LEN, "%s/%s", fold, path);
+ unlink(file_name);
+ printf("%s\n" , file_name);
+ fd = open(file_name, O_CREAT| O_RDWR, 0777);
+ if (fd < 0) {
+ printf("failed to create %s (%s)\n", path, strerror(errno));
+ }
+ return fd;
+
+}
+static int write_to_file(int fd, char *buffer, int size)
+{
+ int ret = 0;
+ if ((fd < 0) || (buffer==NULL) || (size<=0))
+ return -1;
+ ret = write(fd, buffer, size);
+ if (ret < size) {
+ printf("write to file failed, ret=%d, size=%d\n", ret, size);
+ return -1;
+ }
+ return 0;
+
+}
+
+static int mdp_receive_ack_and_info(int cmd, void *receive_info, int receive_size)
+{
+ int ret = -1;
+ char* buffer = NULL;
+ int rsp = -1;
+
+ buffer = malloc(receive_size + sizeof(rsp));
+ if(buffer == NULL)
+ goto exit;
+ ret = mdp_receive(buffer, receive_size + sizeof(rsp));
+ if (ret < sizeof(rsp) + receive_size) {
+ printf("failed to mdp_receive_ack_and_info\n");
+ goto exit;
+ }
+
+ memcpy(&rsp, buffer, sizeof(rsp));
+ if (rsp != cmd) {
+ printf("failed to receive cmd:%d\n", cmd);
+ goto exit;
+ }
+
+ memcpy(receive_info, buffer + sizeof(rsp), receive_size);
+exit:
+ free(buffer);
+ ret = 0;
+ return ret;
+}
+
+
+//»ñÈ¡µÚindex¸öramdumpÎļþ²¢Ð´Èët¿¨
+static int dump_file(int index, char *fold)
+{
+ int ret = 0;
+ //char path[256] = {0};
+ //char cmd_buffer[CMD_BUFFER_LEN] = {0};
+ file_info_t file_info = {{0}, 0};
+ int fd = 0;
+ int file_size , read_count, file_offset;
+
+ ret = mdp_send_command(DUMPFILE_FILE_REQ, 1, index);
+ if (ret < 0) {
+ return -1;
+ }
+
+ ret = mdp_receive_ack_and_info(DUMPFILE_FILE_RSP, (void*)(&file_info), sizeof(file_info));
+ /*
+ if (ret < 0) {
+ return -1;
+ }*/
+
+ fd = create_file(fold, file_info.file_name);
+ if (fd < 0) {
+ printf("failed to create file %s\n", file_info.file_name);
+ return -1;
+ }
+ printf("filename=%s\t size=%d\n", file_info.file_name, file_info.file_size);
+ file_size = file_info.file_size;
+ file_offset = read_count = 0;
+ while (file_size > 0) {
+ read_count = MIN(file_size, DATA_BLOCK_SIZE);
+ if (mdp_send_command(DUMPFILE_READ_REQ, 3, index, file_offset, read_count) < 0) {
+ ret = -1;
+ goto exit;
+ }
+ if (mdp_receive_ack(DUMPFILE_READ_RSP) < 0) {
+ ret = -1;
+ goto exit;
+ }
+ if (mdp_receive(g_ramdump_datablock_buffer, read_count) < 0) {
+ printf("failed to read file data\n");
+ ret = -1;
+ goto exit;
+ }
+ if (write_to_file(fd, g_ramdump_datablock_buffer, read_count)< 0) {
+ printf("failed to write file data\n");
+ ret = -1;
+ goto exit;
+ }
+ file_offset += read_count;
+ file_size -= read_count;
+ }
+ ret = 0;
+exit:
+ close(fd);
+ return ret;;
+}
+
+static int do_modem_ramdump( char* tty, char*path)
+{
+ int ret = -1;
+ int file_number = 0;
+ int i = 0;
+ int read_count = 0;
+ char read_buf[5] = {0};
+
+ g_modem_fd = init_devices(tty);
+ if (g_modem_fd < 0) {
+ printf("failed to open %s\n", tty);
+ return -1;
+ }
+ read_count = read(g_modem_fd, read_buf, sizeof(read_buf));
+ if (0 >= read_count )
+ {
+ printf("read_count %d\n", read_count);
+ goto exit;
+ }
+ ret = mdp_send_command(DUMPFILE_LINK_REQ, 0);
+ if (ret < 0) {
+ printf("Send DUMPFILE_LINK_REQ failed\n");
+ ret = -1;
+ goto exit;
+ }
+
+ ret = mdp_receive_ack_and_info(DUMPFILE_LINK_RSP, &file_number, sizeof(file_number));
+ /*
+ if (ret < 0) {
+ printf("mdp_receive_ack_and_filenum failed\n");
+ ret = -1;
+ goto exit;
+ }
+ */
+
+ printf("file_number = %d\n", file_number);
+ for (i=0; i<file_number; i++) {
+ printf("dump file index=%d ...\n", i);
+ ret = dump_file(i, path);
+ if (ret < 0) {
+ printf("dump file index=%d failed\n", i);
+ ret = -1;
+ goto exit;
+ }
+ printf("dump file index=%d success\n", i);
+ }
+ ret = mdp_send_command(DUMPFILE_END_REQ, 0);
+ if (ret < 0) {
+ printf("failed to send DUMPFILE_END_REQ\n");
+ ret = -1;
+ goto exit;
+ }
+ mdp_receive_ack(DUMPFILE_END_RSP);
+ ret = 0;
+exit:
+ if (g_modem_fd > 0)
+ close(g_modem_fd);
+ return ret;
+}
+
+void broadcast_ramdump_result(int success)
+{
+ char command[256];
+ sprintf(command, "am broadcast -a zte.com.cn.intent_modemramdump_finished --ez extra_success %s", (success == 0 ? "true" : "false"));
+ printf("%s\n" , command);
+ system(command);
+}
+#if 0
+static void compress_and_rm_fold(char *pfold, char *time_str)
+{
+ char buffer[512] = {0};
+ int ret = 0;
+ printf("%s %s %s\n", pfold, time_str);
+ snprintf(buffer, 512, "cd %s;tar -zcf %s.tgz %s/*\n", pfold, time_str, time_str);
+ printf("%s %s\n" , buffer);
+ ret = system(buffer);
+ if(ret != 0){
+ printf("compress failed, delete the unfinished compressed file\n");
+ snprintf(buffer, 512, "cd %s;rm -rvf %s.tgz \n", pfold, time_str);
+ }else {
+ printf("compress finished, delete the source fold\n");
+ snprintf(buffer, 512, "cd %s; rm -rvf %s\n", pfold, time_str);
+ }
+ printf("%s %s\n", buffer);
+ system(buffer);
+}
+#endif
+static int get_time_str(char*buf, size_t size)
+{
+ struct tm cur_tm;
+ time_t now = time(NULL);
+ if (NULL==buf || size<=0)
+ return -1;
+ localtime_r(&now, &cur_tm);
+ strftime(buf, size, "%Y_%m%d_%H%M%S", &cur_tm);
+ printf("%s\n", buf);
+ return 0;
+}
+static int get_ramdump_fold_name(char*ramdump_path, size_t size, char *time_buffer)
+{
+ if (ramdump_path==NULL || size<=0 || time_buffer==NULL)
+ {
+ return -1;
+ }
+ snprintf(ramdump_path, size, "%s/%s", g_ramdump_path, time_buffer);
+ printf("ramdump_path: %s\n", ramdump_path);
+ return 0;
+}
+
+/***********************************************************************************
+º¯Êý˵Ã÷£ºramdump²Ù×÷Ïß³Ì
+Êä È룺
+Êä ³ö£º
+·µ »Ø Öµ£º
+Æä Ëû£º
+***********************************************************************************/
+static void* ramdump_entry(void *arg)
+{
+ int ret = -1;
+ char dev_tty[256] = {0};
+ char dump_path[256] = {0};
+ char time_str[64] = {0};
+
+ // property_set("ctl.stop", "ztemodemlog");
+ /*
+ if(get_time_str(time_str, 64) < 0){
+ printf("Can't get the time str\n");
+ return NULL;
+ }
+ */
+ get_time_str(time_str, 64);
+ ret = get_ramdump_fold_name(dump_path, 256, time_str);
+ /*
+ if (ret < 0) {
+ printf("Can't get the ramdump fold path\n");
+ return NULL;
+ } */
+ memcpy(dev_tty, ramdump_dev, 256);
+
+ printf("try to get the ramdump data from %s\n", ramdump_dev);
+
+ ret = do_modem_ramdump(ramdump_dev,dump_path);
+ #if 0//for test
+ if (ret >= 0)
+ {
+ printf("get the ramdump data from %s success\n", dev_tty);
+ compress_and_rm_fold(dump_path, time_str);
+
+ }
+ else
+ {
+ printf("get the ramdump data from %s failed\n", dev_tty);
+ }
+ #endif
+ return NULL;
+}
+
+static void init_output_flash_mode()
+{
+ if(test_dir_exist(DEFAULT_RAMDUMP_PATH) < 0)
+ {
+ printf("test_dir_exist failed:%s. \n", DEFAULT_RAMDUMP_PATH);
+ return;
+ }
+ g_ramdump_path = DEFAULT_RAMDUMP_PATH;
+}
+
+static int init_output_u_mode()
+{
+ if(test_dir_exist(ZTE_LOG_PATH) < 0)//ÅжϸùĿ¼
+ {
+ printf("test_dir_exist failed:%s. \n", ZTE_LOG_PATH);
+ return -1;
+ }
+ if(test_dir_exist(RAMDUMP_LOG_PATH) < 0)//ÅжÏramdumpÈÕ־Ŀ¼ÊÇ·ñ´æÔÚ
+ {
+ printf("test_dir_exist failed:%s. \n", RAMDUMP_LOG_PATH);
+ return -1;
+ }
+ g_ramdump_path = RAMDUMP_LOG_PATH;
+ return 0;
+}
+
+int init_ramdump_output_dir(E_FLASH_MODE mode)
+{
+ int ret = -1;
+ pthread_t ramdump_thread = -1;
+
+ if(mode == FLASH_MODE_NOMAL)
+ {
+ init_output_flash_mode();
+ }
+ else if(mode == FLASH_MODE_U)
+ {
+ init_output_u_mode();
+ }
+ else
+ {
+ return -1;
+ }
+ ret = pthread_create(&ramdump_thread, NULL, ramdump_entry, NULL);
+ return ret;
+}
+
+static int send_ramdump_rules_to_cp(char *buf, int read_len)
+{
+ int write_len = write(ramdump_fd, buf, read_len);
+ if (write_len != read_len)
+ {
+ printf("modem_log, send_rule error, write_len = %d, len = %d. \n", write_len, read_len);
+ return -1;
+ }
+ return 0;
+}
+
+void *get_rule_from_ramdump_dev(void* args)
+{
+ char *pbuf = NULL;
+ int read_len = 0;
+ pbuf = (char *)malloc(8*1024);
+ if(pbuf == NULL)
+ {
+ return NULL;
+ }
+
+ while(1)
+ {
+ read_len = read(usb_ramdump_dev_fd, pbuf, 8*1024);
+
+ if(read_len > 0)
+ {
+ //send_rules_to_ramdump(pbuf, read_len);//Ïòramdump·¢Ë͹æÔò
+ send_ramdump_rules_to_cp(pbuf, read_len);
+
+ }
+ else
+ {
+ sleep(2);
+ }
+ }
+ return NULL;
+}
+
+static void* init_usb_trap_device(void* args)
+{
+ int ret_ramdump = -1;
+ int fd = -1;
+
+ while(TRUE)
+ {
+ //ret_ramdump = close(usb_ramdump_dev);
+ fd = open(usb_ramdump_dev, O_RDWR);
+ if (fd < 0)
+ {
+ sleep(1);
+ printf("usb_ramdump_dev open fail\n");
+ }
+ else
+ {
+ printf("usb_ramdump_dev open success\n");
+ break;
+ }
+ }
+ usb_ramdump_dev_fd = fd;
+
+ ret_ramdump=pthread_create(&usb_ramdump_dev_thread, NULL, get_rule_from_ramdump_dev, NULL);
+ if(ret_ramdump != 0)
+ {
+ printf("pthread_create cp_interact_thread error\n");
+ }
+
+ return NULL;
+}
+
+int init_ramdump_device()
+{
+ int ret = -1;
+ pthread_t trap_dev_thread = -1;
+
+ ret=pthread_create(&trap_dev_thread, NULL, init_usb_trap_device, NULL);
+ if(ret != 0)
+ {
+ printf("pthread_create init_ramdump_device error\n");
+ return -1;
+ }
+ g_cp_trap_flag = FALSE;
+ return ret;
+}
+
+int ramdump_trap_rev_close(VOID)
+{
+ int ret = -1;
+
+ ret = close(usb_ramdump_dev_fd);
+ if (ret < 0)
+ {
+ printf("open devtty GS0 error!!!\n");
+ return -1;
+ }
+ usb_ramdump_dev_fd = -1;
+ return ret;
+}
+
+#endif
+
+
+