[FIX] prevent issue
[platform/core/system/swap-manager.git] / daemon / daemon.h
1 /*
2  *  DA manager
3  *
4  * Copyright (c) 2000 - 2013 Samsung Electronics Co., Ltd. All rights reserved.
5  *
6  * Contact:
7  *
8  * Jaewon Lim <jaewon81.lim@samsung.com>
9  * Woojin Jung <woojin2.jung@samsung.com>
10  * Juyoung Kim <j0.kim@samsung.com>
11  * Cherepanov Vitaliy <v.cherepanov@samsung.com>
12  * Nikita Kalyazin    <n.kalyazin@samsung.com>
13  *
14  * Licensed under the Apache License, Version 2.0 (the "License");
15  * you may not use this file except in compliance with the License.
16  * You may obtain a copy of the License at
17  *
18  * http://www.apache.org/licenses/LICENSE-2.0
19  *
20  * Unless required by applicable law or agreed to in writing, software
21  * distributed under the License is distributed on an "AS IS" BASIS,
22  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
23  * See the License for the specific language governing permissions and
24  * limitations under the License.
25  *
26  * Contributors:
27  * - S-Core Co., Ltd
28  * - Samsung RnD Institute Russia
29  *
30  */
31
32
33 #ifndef _DAEMON_H_
34 #define _DAEMON_H_
35
36 #include <stdint.h>             // for uint64_t, int64_t
37 #include <pthread.h>    // for pthread_mutex_t
38 #include "da_protocol.h"
39 #include "target.h"
40
41 #ifdef __cplusplus
42 extern "C" {
43 #endif
44
45
46 #define PROTOCOL_VERSION                        "2.1"
47
48 #define RUN_APP_LOADER
49
50 #define MAX_TARGET_COUNT                        8
51
52 #define MAX_DEVICE                              10
53 #define MAX_FILENAME                    128
54 /*
55 enum ErrorCode
56 {
57         ERR_LOCKFILE_CREATE_FAILED = -101,
58         ERR_ALREADY_RUNNING = -102,
59         ERR_INITIALIZE_SYSTEM_INFO_FAILED = -103,
60         ERR_HOST_SERVER_SOCKET_CREATE_FAILED = -104,
61         ERR_TARGET_SERVER_SOCKET_CREATE_FAILED = -105,
62         ERR_SIGNAL_MASK_SETTING_FAILED = -106,
63         ERR_WRONG_MESSAGE_FORMAT = -201,
64         ERR_WRONG_MESSAGE_TYPE = -202,
65         ERR_WRONG_MESSAGE_DATA = -203,
66         ERR_CANNOT_START_PROFILING = -204,
67         ERR_WRONG_PROTOCOL_VERSION = -205
68 };*/
69
70 enum TargetMessageType
71 {
72         MSG_DEVICE = 1,
73         MSG_TIME = 2,
74         MSG_SAMPLE = 3,
75         MSG_RESOURCE = 4,
76         MSG_LOG = 5,
77         MSG_IMAGE = 6,
78         MSG_TERMINATE = 7,
79         MSG_PID = 8,
80         MSG_MSG = 9,
81         MSG_ALLOC = 10,
82         MSG_ERROR = 11,
83         MSG_WARNING = 12
84 };
85 #define IS_PROBE_MSG(type) (((type) & 0x0100) == 0x0100)
86
87 enum HostMessageType
88 {
89         MSG_HOST_BEGIN = 100,
90         MSG_START = 100,
91         MSG_STOP = 101,
92         MSG_PAUSE = 102,
93         MSG_OPTION = 103,
94         MSG_ISALIVE = 104,
95         MSG_ALIVE = 105,
96         MSG_BATT_START = 106,
97         MSG_BATT_STOP = 107,
98         MSG_CAPTURE_SCREEN = 108,
99         MSG_MAPS_INST_LIST = 109,
100         MSG_RECORD = 801,
101         MSG_REPLAY = 802,
102         MSG_OK = 901,
103         MSG_NOTOK = 902,
104         MSG_VERSION = 999,
105         MSG_HOST_END = 999
106 };
107
108 enum DAState
109 {
110         DAS_NONE = 0,
111         DAS_START_BEGIN = 1,
112         DAS_TARGET_ARM_START = 1,
113         DAS_TARGET_X86_START = 2,
114         DAS_EMUL_ARM_START = 3,
115         DAS_EMUL_X86_START = 4,
116         DAS_TARGET_ARM_BATT_START = 5,
117         DAS_TARGET_X86_BATT_START = 6,
118         DAS_EMUL_ARM_BATT_START = 7,
119         DAS_EMUL_X86_BATT_START = 8,
120         DAS_START_END = 8,
121         DAS_STOP = 9,
122         DAS_TERMINATE = 10
123 };
124
125
126 #ifndef likely
127 #define likely(x)       __builtin_expect((x), 1)
128 #define unlikely(x)     __builtin_expect((x), 0)
129 #endif
130
131 #define EVENT_STOP              0x00000001
132 #define EVENT_PID               0x00000002
133 #define EVENT_ERROR             0x00000004
134
135
136
137 typedef struct
138 {
139         int                                     control_socket;
140         int                                     data_socket;
141         pthread_mutex_t         data_socket_mutex;
142 } __da_host_info;
143
144 typedef struct
145 {
146         int brightness;
147         int voltage;
148         int procmeminfo;
149         FILE *video;
150         FILE *procstat;
151         FILE *networkstat;
152         FILE *diskstats;
153         FILE *inst_tasks;
154 } __file_descriptors;
155
156 typedef struct
157 {
158         int host_server_socket;
159         int target_server_socket;
160         int apps_to_run;
161         unsigned int config_flag;
162         int app_launch_timerfd;
163         int connect_timeout_timerfd;
164         pthread_t sampling_thread;
165         pthread_t replay_thread;
166         pthread_t transfer_thread;
167         int buf_fd;
168         int user_ev_fd;
169         int efd;
170         __da_host_info host;
171         __file_descriptors fd;
172         char appPath[128]; // application executable path
173 } __da_manager;
174
175 extern __da_manager manager;
176
177
178 uint64_t get_total_alloc_size(void);
179 int initialize_log(void);
180 int daemonLoop(void);
181 void unlink_portfile(void);
182
183 int samplingStart(void);
184 int samplingStop(void);
185
186
187
188
189 // TODO maybe need move to other file
190 int prepare_profiling(void);
191 int start_profiling(void);
192 void stop_profiling(void);
193 int reconfigure(struct conf_t conf);
194 int sendACKCodeToHost(enum HostMessageType resp, int msgcode);
195 void terminate_all(void);
196
197 #ifdef __cplusplus
198 }
199 #endif
200
201 #endif // _DAEMON_H_