blob: 320f25950bc50e115d79afc2d9165c612dd735bb [file] [log] [blame]
b.liu87afc4c2024-08-14 17:33:45 +08001/*
2* main.c
3*
4* MBTK important service support.
5*
6*/
7/******************************************************************************
8
9 EDIT HISTORY FOR FILE
10
11 WHEN WHO WHAT,WHERE,WHY
12-------- -------- -------------------------------------------------------
132024/6/12 LiuBin Initial version
14
15******************************************************************************/
16#include <stdio.h>
b.liudeb8e422024-12-14 17:36:56 +080017#include <stdint.h>
b.liu87afc4c2024-08-14 17:33:45 +080018#include <stdlib.h>
19#include <unistd.h>
20#include <errno.h>
21#include <fcntl.h>
yu.dongd3784ef2025-06-29 19:29:10 -070022#include <cutils/properties.h>
b.liu87afc4c2024-08-14 17:33:45 +080023
24#include "mbtk_type.h"
25#include "mbtk_log.h"
26#include "instance_info.h"
b.liu62240ee2024-11-07 17:52:45 +080027#include "mbtk_str.h"
28#include "mbtk_utils.h"
r.xiaoab6f4ec2024-12-19 03:42:17 -080029#include "mbtk_led.h"
yq.wang6c876f52025-05-17 16:56:50 +080030#include "reboot_reason.h"
b.liu87afc4c2024-08-14 17:33:45 +080031
32#define MBTK_SERVICES_PID_FILE "/var/run/mbtk_servicesd.pid"
33#define MBTK_SERVICES_CONF_FILE "/etc/mbtk_servicesd.conf"
34
35extern int instance_info_size;
36extern instance_info_t instance_infos[];
37int ins_monitor_service_start();
38
39static void config_parse(const char *conf_file)
40{
41 FILE *fptr = fopen(conf_file, "r");
42 if(fptr != NULL) {
43 char line[1024] = {0};
44 bool respawn_process = FALSE;
45 while(fgets(line, sizeof(line), fptr) != NULL && strlen(line) > 0) {
46 if(str_startwith(line, "#")) {
47 memset(line, 0, sizeof(line));
48 continue;
49 }
50
51 if(!respawn_process && str_startwith(line, "respawn_start")) {
52 respawn_process = TRUE;
53 memset(line, 0, sizeof(line));
54 continue;
55 } else if(respawn_process && str_startwith(line, "respawn_end")) {
56 respawn_process = FALSE;
57 memset(line, 0, sizeof(line));
58 continue;
59 }
60
61 char *ptr = line + strlen(line) - 1;
62 while(ptr >= line && (*ptr == '\r' || *ptr == '\n' || *ptr == ' ')) {
63 *ptr-- = '\0';
64 }
65
66 if(ptr < line) { // Empty line
67 memset(line, 0, sizeof(line));
68 continue;
69 }
70
71 if(respawn_process && instance_info_size < INSTANCE_NUM_MAX) {
72 ptr = strstr(line, ":");
73 if(ptr) {
74 *ptr++ = '\0';
75 memcpy(instance_infos[instance_info_size].ins_name, line, strlen(line));
76 memcpy(instance_infos[instance_info_size].ins_cmd, ptr, strlen(ptr));
77 instance_infos[instance_info_size].ins_pid = -1;
78 instance_info_size++;
79 }
80 }
81
82 memset(line, 0, sizeof(line));
83 }
84 fclose(fptr);
85 }
86}
87
88int main(int argc, char *argv[])
89{
90 mbtk_log_init("radio", "MBTK_SERVICES");
91
b.liubcf86c92024-08-19 19:48:28 +080092 MBTK_SOURCE_INFO_PRINT("mbtk_services");
93
b.liu87afc4c2024-08-14 17:33:45 +080094#ifdef MBTK_DUMP_SUPPORT
95 mbtk_debug_open(NULL, TRUE);
96#endif
97
98 if(app_already_running(MBTK_SERVICES_PID_FILE)) {
99 LOGW("daemon already running.");
100 exit(1);
101 }
102
103 config_parse(MBTK_SERVICES_CONF_FILE);
104
105 // Start services.
106 if(ins_monitor_service_start()) {
107 LOGW("ins_monitor_service_start() fail.");
108 }
109
yq.wang6c876f52025-05-17 16:56:50 +0800110 reboot_reason_init();
111
r.xiaoab6f4ec2024-12-19 03:42:17 -0800112#ifdef MBTK_LED
113 //led services
yu.dongd3784ef2025-06-29 19:29:10 -0700114 char led_enable_str[10] = {0};
115 memset(led_enable_str, 0, 10);
116 property_get("persist.mbtk.led_enable", led_enable_str, "1");
117 if(atoi(led_enable_str) == 1)
r.xiaoab6f4ec2024-12-19 03:42:17 -0800118 {
yu.dongd3784ef2025-06-29 19:29:10 -0700119 if(mbtk_led_init())
120 {
121 LOGE("mbtk_led_init() fail.");
122 }
r.xiaoab6f4ec2024-12-19 03:42:17 -0800123
yu.dongd3784ef2025-06-29 19:29:10 -0700124 if(mbtk_led_contril_server_init())
125 {
126 LOGW("LED_contril_service_start() fail.");
127 }
r.xiaoab6f4ec2024-12-19 03:42:17 -0800128 }
129#endif
130
b.liu87afc4c2024-08-14 17:33:45 +0800131 while(1) {
132 sleep(24 * 60 * 60);
133 }
134
135 return 0;
136}
137