blob: 9a21cd635e7cb8d1b6acfcb78e8b679abb6fca5b [file] [log] [blame]
/**
*
* @file log_agent_main.c
* @brief
* This file is part of ZCAT.
* log_agentÈë¿ÚÎļþ£¬´¦ÀíNVÊäÈë²ÎÊý£¬¸ù¾Ý²»Í¬ÍâÉèģʽ´¦ÀíÊý¾ÝÁ÷Ïò
* NV²ÎÊý°üÀ¨:
* zcat_mode
* APUSB - Ó¦Óòã²Ù×÷usb¿Ú´«Êälog
* APTF - Ó¦ÓÃ²ã´æ´¢logµ½TF¿¨
* APNET - Ó¦Óòã²Ù×÷socket´«Êälog
* APFS - Ó¦ÓÃ²ã´æ´¢logµ½Îļþϵͳ/var/zcatĿ¼
* CPUSB - Äں˲ã²Ù×÷usb¿Ú´«Êälog
* CPTF - ÄÚºË²ã´æ´¢logµ½TF¿¨
* CPNET - Äں˲ã²Ù×÷socket´«Êälog
* CPFS - ÄÚºË²ã´æ´¢logµ½Îļþϵͳ/var/zcatĿ¼
* zcat_usblog
* Ö¸¶¨log¿Útty·¾¶£¬ÀýÈç: ttyGS2
*
* @details
* @author Tools Team.
* @email
* @copyright Copyright (C) 2013 Sanechips Technology Co., Ltd.
* @warning
* @date 2019/02/22
* @version 1.6
* @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,¹æ·¶ÃüÃû
* 2019/02/02 1.4 jiang.fenglin empty log_agent_usb.c
* 2019/02/22 1.5 jiang.fenglin ¶¯Ì¬¿ÉÅäÖÃLOG¶Ë¿Ú,log¶Ë¿Ú¶¯Ì¬ÅäÖÃÖ»Õë¶ÔusbÅäÖÃΪÕý³£Ä£Ê½µÄÇé¿ö£¬¹¤³§Ä£Ê½±£³Ö²»±ä
* 2019/03/04 1.6 jiang.fenglin Çå±àÒ뾯¸æ
* 2019/07/08 1.7 jiang.fenglin Ôö¼ÓAPFS/CPFSģʽ
* ---------------------------------------------------------------------------
*
*
*/
#include <stdarg.h>
#include <string.h>
#include <pthread.h>
#include <sys/msg.h>
#include <sys/ioctl.h>
#include "log_agent.h"
#include "cfg_api.h"
E_ZCAT_MODE g_log_dir = ZCAT_MODE_CP_USB;
E_ZCAT_STATE g_log_state = ZCAT_STATE_INIT;
extern pthread_t read_kernellog_thread;
extern pthread_t read_applog_thread;
extern pthread_t read_cplog_thread;
extern pthread_t read_usb_thread;
extern pthread_t monitor_hotplug_thread;
extern pthread_t read_wifi_thread;
extern pthread_t rule_heartbeat_thread;
extern const char* cplog_dev;
extern const char* applog_dev;
extern const char* kernellog_dev;
extern int cplog_fd;
extern int applog_fd;
extern int kernellog_fd;
extern int init_log_agent_tools();
extern int init_usblog_mode();
extern int init_sdcard_mode();
extern int init_net_mode();
extern void *read_applog(void* args);
extern void *read_kernellog(void* args);
extern void *read_cplog(void* args);
extern char g_zcat_usblog[8]; // ´æ´¢usblogµÄttyÉ豸Ãû
/**
* @brief µ±cp²àÍÂlogʱµÄ³õʼ»¯
* @param[in] void
* @return 1 on success, errno otherwise
* @note
* @see
*/
int init_cp_mode()
{
return 1;
}
/**
* @brief zte_log_agentÈë¿Úº¯Êý£¬´¦ÀíNVÊäÈë²ÎÊý£¬¸ù¾Ý²»Í¬Ä£Ê½´¦ÀíÊý¾ÝÁ÷Ïò
*
* @return ·µ»ØËµÃ÷
* -<em>-1</em> fail
* -<em>0</em> succeed
*/
int main()
{
char zcat_mode[16] = { 0 };
char zcat_usblog[8] = { 0 };
int ret = 0;
// 1.»ñÈ¡nvÖµ
cfg_get_item("zcat_mode", zcat_mode, sizeof(zcat_mode) - 1);
if (strcmp(zcat_mode, "APTF") == 0)
{
g_log_dir = ZCAT_MODE_AP_TF;
}
else if (strcmp(zcat_mode, "CPTF") == 0)
{
g_log_dir = ZCAT_MODE_CP_TF;
}
else if (strcmp(zcat_mode, "APFS") == 0)
{
g_log_dir = ZCAT_MODE_AP_FS;
}
else if (strcmp(zcat_mode, "CPFS") == 0)
{
g_log_dir = ZCAT_MODE_CP_FS;
}
else if (strcmp(zcat_mode, "APNET") == 0)
{
g_log_dir = ZCAT_MODE_AP_NET;
}
else if (strcmp(zcat_mode, "CPNET") == 0)
{
g_log_dir = ZCAT_MODE_CP_NET;
}
else if (strcmp(zcat_mode, "APUSB") == 0)
{
g_log_dir = ZCAT_MODE_AP_USB;
}
else
{
g_log_dir = ZCAT_MODE_CP_USB;
}
printf("[zcat] zcat_mode = 0x%x\n", g_log_dir);
if (ZCAT_MODE_AP_USB == g_log_dir || ZCAT_MODE_CP_USB == g_log_dir)
{
cfg_get_item("zcat_usblog", zcat_usblog, sizeof(zcat_usblog) - 1);
if (strlen(zcat_usblog) > 3)
{
memcpy(g_zcat_usblog, zcat_usblog, sizeof(zcat_usblog));
}
printf("[zcat] zcat_usblog = %s\n", g_zcat_usblog);
}
// 2.³õʼ»¯È«¾Ö±äÁ¿
init_log_agent_tools();
// 3.¸ù¾Ýģʽ´ò¿ªlogÊý¾ÝÔ´É豸²¢´´½¨µÄ¹¤×÷Ïß³Ì
// V3E²»ÐèÒª¶ÁÈ¡applogºÍkernellogÉ豸
cplog_fd = open(cplog_dev, O_RDWR);
if (cplog_fd < 0) {
goto __exit;
}
if((g_log_dir == ZCAT_MODE_AP_USB) || (g_log_dir == ZCAT_MODE_AP_TF) || (g_log_dir == ZCAT_MODE_AP_NET) || (g_log_dir == ZCAT_MODE_AP_FS))
{
// 3.1 ´ò¿ªÊý¾ÝÔ´É豸
#if 0
applog_fd = open(applog_dev, O_RDWR);
if (applog_fd < 0) {
goto __exit;
}
kernellog_fd = open(kernellog_dev, O_RDWR);
if (kernellog_fd < 0) {
goto __exit;
}
#endif
// 3.2 ´´½¨Êý¾ÝÔ´É豸µÄ¶ÁдÏß³Ì
#if 0
ret = pthread_create(&read_applog_thread, NULL, read_applog, NULL);
if(ret != 0 ) {
goto __exit;
}
ret = pthread_create(&read_kernellog_thread, NULL, read_kernellog, NULL);
if(ret != 0) {
goto __exit;
}
#endif
ret = pthread_create(&read_cplog_thread, NULL, read_cplog, NULL);
if(ret != 0) {
goto __exit;
}
}
printf("[zcat] init logdev success.\n");
// 4.³õʼ»¯Êý¾ÝÊä³öÍâÉè
switch(g_log_dir)
{
case ZCAT_MODE_AP_USB:
{
if(init_usblog_mode() < 0) {
goto __exit;
}
break;
}
case ZCAT_MODE_AP_TF:
case ZCAT_MODE_AP_FS:
{
/*
if(init_sdcard_mode() < 0) {
goto __exit;
}*/
init_sdcard_mode();
break;
}
case ZCAT_MODE_AP_NET:
{
if(init_net_mode() < 0) {
goto __exit;
}
break;
}
case ZCAT_MODE_CP_USB:
case ZCAT_MODE_CP_TF:
case ZCAT_MODE_CP_NET:
case ZCAT_MODE_CP_FS:
{
/*
if(init_cp_mode() < 0) {
goto __exit;
}
*/
init_cp_mode();
break;
}
default: {
goto __exit;
}
}
g_log_state = ZCAT_STATE_RUNNING;
// 5.³õʼ»¯Á÷³ÌÍê³É£¬Óëcpͬ²½
printf("[zcat] init peripheral success.\n");
if(ioctl(cplog_fd, ZCAT_IPC_SET_PERIPHERAL_MODE, g_log_dir)!= 0)
{
printf("[zcat]ioctl:ZCAT_IPC_SET_PERIPHERAL_MODE fail!\n");
}
if(ioctl(cplog_fd, ZCAT_IPC_SET_TTY, g_zcat_usblog)!= 0)
{
printf("[zcat]ioctl:ZCAT_IPC_SET_TTY fail!\n");
}
if(ioctl(cplog_fd, ZCAT_IPC_SYN, 0)!=0)
{
printf("[zcat]ioctl:ZCAT_IPC_SYN fail!\n");
}
while(1)
{
ret = ioctl(cplog_fd, ZCAT_IPC_ACK, 0);
if(ret == 0)
{
ioctl(cplog_fd, ZCAT_IPC_ESTABLISHED, 0);
break;
}
sleep(1);
}
__exit:
// 6. Í˳ö
if(read_kernellog_thread > 0) pthread_join(read_kernellog_thread, NULL);
if(read_applog_thread > 0) pthread_join(read_applog_thread, NULL);
if(read_cplog_thread > 0) pthread_join(read_cplog_thread, NULL);
if(monitor_hotplug_thread > 0) pthread_join(monitor_hotplug_thread, NULL);
if(read_usb_thread > 0) pthread_join(read_usb_thread, NULL);
if(read_wifi_thread > 0) pthread_join(read_wifi_thread, NULL);
if(rule_heartbeat_thread > 0) pthread_join(rule_heartbeat_thread, NULL);
if(applog_fd >= 0) close(applog_fd);
if(kernellog_fd >= 0) close(kernellog_fd);
if(cplog_fd >= 0) close(cplog_fd);
printf("[zcat] zte_log_agent exit.\n");
return 0;
}