xref: /OK3568_Linux_fs/external/camera_engine_rkaiq/rkaiq/include/ipc_server/socket_server.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 #ifndef SOCKET_SERVER_H
2 #define SOCKET_SERVER_H
3 
4 #include "MessageParser.hpp"
5 #include "include/algos/adehaze/rk_aiq_types_adehaze_algo_int.h"
6 #include "include/algos/adpcc/rk_aiq_types_adpcc_algo_int.h"
7 #include "include/algos/ae/rk_aiq_uapi_ae_int_types_v1.h"
8 #include "include/algos/ae/rk_aiq_uapi_ae_int_types_v2.h"
9 #include "include/algos/agamma/rk_aiq_types_agamma_algo_int.h"
10 #include "include/algos/amerge/rk_aiq_types_amerge_algo_int.h"
11 #include "include/algos/anr/rk_aiq_types_anr_algo_int.h"
12 #include "include/algos/atmo/rk_aiq_types_atmo_algo_int.h"
13 #include "include/uAPI2/rk_aiq_user_api2_adpcc.h"
14 #include "include/uAPI2/rk_aiq_user_api2_helper.h"
15 #include "include/uAPI2/rk_aiq_user_api2_sysctl.h"
16 #include "include/uAPI2/rk_aiq_user_api2_awb.h"
17 #include "rk_aiq_user_api2_ae.h"
18 #include "rk_aiq_user_api_ae.h"
19 #include "rkaiq_tool_ae.h"
20 #include "rkaiq_tool_anr.h"
21 #include "rkaiq_tool_imgproc.h"
22 #include "rkaiq_tool_sharp.h"
23 #include "rkaiq_tool_sysctl.h"
24 #include "xcam_log.h"
25 #include <algorithm>
26 #include <cctype>
27 #include <iostream>
28 #include <mutex>
29 #include <poll.h>
30 #include <pthread.h>
31 #include <stdint.h>
32 #include <stdio.h>
33 #include <stdlib.h>
34 #include <string.h>
35 #include <sys/socket.h>
36 #include <sys/types.h>
37 #include <sys/un.h>
38 #include <thread>
39 #include <unistd.h>
40 #include <vector>
41 
42 using namespace std;
43 
44 #define MAXPACKETSIZE 18192
45 #define MAX_CLIENT 1000
46 
47 // define IPCSERVER module logs
48 #define LOGD_IPC(...) XCAM_MODULE_LOG_DEBUG(XCORE_LOG_MODULE_IPC, 0xff, ##__VA_ARGS__)
49 #define LOGE_IPC(...) XCAM_MODULE_LOG_ERROR(XCORE_LOG_MODULE_IPC, 0xff, ##__VA_ARGS__)
50 #define LOGW_IPC(...) XCAM_MODULE_LOG_WARNING(XCORE_LOG_MODULE_IPC, 0xff, ##__VA_ARGS__)
51 #define LOGV_IPC(...) XCAM_MODULE_LOG_VERBOSE(XCORE_LOG_MODULE_IPC, 0xff, ##__VA_ARGS__)
52 #define LOGI_IPC(...) XCAM_MODULE_LOG_INFO(XCORE_LOG_MODULE_IPC, 0xff, ##__VA_ARGS__)
53 #define LOG1_IPC(...) XCAM_MODULE_LOG_LOW1(XCORE_LOG_MODULE_IPC, 0xff, ##__VA_ARGS__)
54 
55 
56 typedef struct rk_aiq_sys_ctx_s rk_aiq_sys_ctx_t;
57 
58 using RecvCallBack =
59     add_pointer<void(int sockfd, char *buffer, int size)>::type;
60 
61 class SocketServer {
62 public:
63   SocketServer();
64   virtual ~SocketServer();
65 
66   int Send(int cilent_socket, char *buff, int size);
67   int Process(rk_aiq_sys_ctx_t *aiq_ctx, int camid);
68 
RegisterRecvCallBack(RecvCallBack cb)69   void RegisterRecvCallBack(RecvCallBack cb) { callback_ = cb; }
UnRegisterRecvCallBack()70   void UnRegisterRecvCallBack() { callback_ = nullptr; }
71   void SaveEixt();
72   void Deinit();
73 
is_connected()74   bool is_connected() { return tool_mode_on; }
75 
tool_mode_set(bool status)76   void tool_mode_set(bool status) { tool_mode_on = status; }
77   int packetHandle(void *packet, MessageType type);
78 
79   static std::mutex send_mutex;
80 
81 private:
82   void Accepted();
83   int Recvieve();
84   int Recvieve(int sync);
85   int poll_event(int timeout_msec, int fds[]);
86 #ifdef __ANDROID__
87   int getAndroidLocalSocket();
88 #endif
89 
90 private:
91   bool tool_mode_on;
92   int sockfd;
93   int client_socket;
94   int quit_;
95   struct sockaddr_un serverAddress;
96   struct sockaddr_un clientAddress;
97   rk_aiq_sys_ctx_t *aiq_ctx;
98   std::unique_ptr<std::thread> accept_threads_;
99   std::unique_ptr<RkMSG::MessageParser> msg_parser;
100   std::shared_ptr<std::thread> tunning_thread;
101   RecvCallBack callback_;
102   int _stop_fds[2];
103 };
104 
105 void hexdump2(char *buf, const int num);
106 int ProcessCommand(rk_aiq_sys_ctx_t *ctx, RkAiqSocketPacket *dataRecv,
107                    RkAiqSocketPacket *dataReply);
108 
109 #define CHECK_PARAM_SIZE(parmaStruct, dataSize)                                \
110   LOG_INFO("real struct size : 0x%x, data size 0x%x\n", sizeof(parmaStruct),   \
111            dataSize);                                                          \
112   if (sizeof(parmaStruct) != dataSize) {                                       \
113     LOG_INFO("The parameter does not match and will not take effect\n");       \
114     return -1;                                                                 \
115   }
116 
117 enum {
118   ENUM_ID_AE_START = 0x1100,
119   ENUM_ID_AE_SETEXPSWATTR,
120   ENUM_ID_AE_GETEXPSWATTR,
121   ENUM_ID_AE_SETLINAEDAYROUTEATTR,
122   ENUM_ID_AE_GETLINAEDAYROUTEATTR,
123   ENUM_ID_AE_SETLINAENIGHTROUTEATTR,
124   ENUM_ID_AE_GETLINAENIGHTROUTEATTR,
125   ENUM_ID_AE_SETHDRAEDAYROUTEATTR,
126   ENUM_ID_AE_GETHDRAEDAYROUTEATTR,
127   ENUM_ID_AE_SETHDRAENIGHTROUTEATTR,
128   ENUM_ID_AE_GETHDRAENIGHTROUTEATTR,
129   ENUM_ID_AE_QUERYEXPRESINFO,
130   ENUM_ID_AE_SETLINEXPATTR,
131   ENUM_ID_AE_GETLINEXPATTR,
132   ENUM_ID_AE_SETHDREXPATTR,
133   ENUM_ID_AE_GETHDREXPATTR,
134   ENUM_ID_AE_END,
135 };
136 
137 enum {
138   ENUM_ID_IMGPROC_START = 0x1200,
139   ENUM_ID_IMGPROC_SETEXPMODE,
140   ENUM_ID_IMGPROC_GETEXPMODE,
141   ENUM_ID_IMGPROC_SETAEMODE,
142   ENUM_ID_IMGPROC_GETAEMODE,
143   ENUM_ID_IMGPROC_SETEXPGAINRANGE,
144   ENUM_ID_IMGPROC_GETEXPGAINRANGE,
145   ENUM_ID_IMGPROC_SETEXPTIMERANGE,
146   ENUM_ID_IMGPROC_GETEXPTIMERANGE,
147   ENUM_ID_IMGPROC_SETBLCMODE,
148   ENUM_ID_IMGPROC_SETHLCMODE,
149   ENUM_ID_IMGPROC_SETLEXPMODE,
150   ENUM_ID_IMGPROC_GETLEXPMODE,
151   ENUM_ID_IMGPROC_SETMLEXP,
152   ENUM_ID_IMGPROC_GETMLEXP,
153   ENUM_ID_IMGPROC_SETANTIFLICKERMODE,
154   ENUM_ID_IMGPROC_GETANTIFLICKERMODE,
155   ENUM_ID_IMGPROC_SETEXPPWRLINEFREQMODE,
156   ENUM_ID_IMGPROC_GETEXPPWRLINEFREQMODE,
157   ENUM_ID_IMGPROC_SETDAYNSWMODE,
158   ENUM_ID_IMGPROC_GETDAYNSWMODE,
159   ENUM_ID_IMGPROC_SETMDNSCENE,
160   ENUM_ID_IMGPROC_GETMDNSCENE,
161   ENUM_ID_IMGPROC_SETADNSENS,
162   ENUM_ID_IMGPROC_GETADNSENS,
163   ENUM_ID_IMGPROC_SETFLIGHTMODE,
164   ENUM_ID_IMGPROC_GETFLIGHTMODE,
165   ENUM_ID_IMGPROC_SETMFLIGHT,
166   ENUM_ID_IMGPROC_GETMFLIGHT,
167   ENUM_ID_IMGPROC_SETWBMODE,
168   ENUM_ID_IMGPROC_GETWBMODE,
169   ENUM_ID_IMGPROC_LOCKAWB,
170   ENUM_ID_IMGPROC_UNLOCKAWB,
171   ENUM_ID_IMGPROC_SETAWBRANGE,
172   ENUM_ID_IMGPROC_GETAWBRANGE,
173   ENUM_ID_IMGPROC_SETMWBSCENE,
174   ENUM_ID_IMGPROC_GETMWBSCENE,
175   ENUM_ID_IMGPROC_SETMWBGAIN,
176   ENUM_ID_IMGPROC_GETMWBGAIN,
177   ENUM_ID_IMGPROC_SETMWBCT,
178   ENUM_ID_IMGPROC_GETMWBCT,
179   ENUM_ID_IMGPROC_SETCRSUPPSN,
180   ENUM_ID_IMGPROC_GETCRSUPPSN,
181   ENUM_ID_IMGPROC_SETFOCUSMODE,
182   ENUM_ID_IMGPROC_GETFOCUSMODE,
183   ENUM_ID_IMGPROC_SETFOCUSWIN,
184   ENUM_ID_IMGPROC_GETFOCUSWIN,
185   ENUM_ID_IMGPROC_SETFIXEDMODECODE,
186   ENUM_ID_IMGPROC_GETFIXEDMODECODE,
187   ENUM_ID_IMGPROC_SETMINFOCUSDIS,
188   ENUM_ID_IMGPROC_GETMINFOCUSDIS,
189   ENUM_ID_IMGPROC_SETOPZOOMRANGE,
190   ENUM_ID_IMGPROC_GETOPZOOMRANGE,
191   ENUM_ID_IMGPROC_SETOPZOOMSPEED,
192   ENUM_ID_IMGPROC_GETOPZOOMSPEED,
193   ENUM_ID_IMGPROC_SETHDRMODE,
194   ENUM_ID_IMGPROC_GETHDRMODE,
195   ENUM_ID_IMGPROC_SETMHDRSTRTH,
196   ENUM_ID_IMGPROC_GETMHDRSTRTH,
197   ENUM_ID_IMGPROC_SETNRMODE,
198   ENUM_ID_IMGPROC_GETNRMODE,
199   ENUM_ID_IMGPROC_SETANRSTRTH,
200   ENUM_ID_IMGPROC_GETANRSTRTH,
201   ENUM_ID_IMGPROC_SETMSPANRSTRTH,
202   ENUM_ID_IMGPROC_GETMSPANRSTRTH,
203   ENUM_ID_IMGPROC_SETMTNRSTRTH,
204   ENUM_ID_IMGPROC_GETMTNRSTRTH,
205   ENUM_ID_IMGPROC_SETDHZMODE,
206   ENUM_ID_IMGPROC_GETDHZMODE,
207   ENUM_ID_IMGPROC_SETMDHZSTRTH,
208   ENUM_ID_IMGPROC_GETMDHZSTRTH,
209   ENUM_ID_IMGPROC_SETCONTRAST,
210   ENUM_ID_IMGPROC_GETCONTRAST,
211   ENUM_ID_IMGPROC_SETBRIGHTNESS,
212   ENUM_ID_IMGPROC_GETBRIGHTNESS,
213   ENUM_ID_IMGPROC_SETSATURATION,
214   ENUM_ID_IMGPROC_GETSATURATION,
215   ENUM_ID_IMGPROC_SETSHARPNESS,
216   ENUM_ID_IMGPROC_GETSHARPNESS,
217   ENUM_ID_IMGPROC_SETGAMMACOEF,
218   ENUM_ID_IMGPROC_SETGRAYMODE,
219   ENUM_ID_IMGPROC_GETGRAYMODE,
220   ENUM_ID_IMGPROC_END,
221 };
222 
223 enum {
224   ENUM_ID_ANR_START = 0x1300,
225   ENUM_ID_ANR_SETBAYERNRATTR,
226   ENUM_ID_ANR_GETBAYERNRATTR,
227   ENUM_ID_ANR_SETMFNRATTR,
228   ENUM_ID_ANR_GETMFNRATTR,
229   ENUM_ID_ANR_SETUVNRATTR,
230   ENUM_ID_ANR_GETUVNRATTR,
231   ENUM_ID_ANR_SETYNRATTR,
232   ENUM_ID_ANR_GETYNRATTR,
233 
234   ENUM_ID_ANR_SETATTRIB,
235   ENUM_ID_ANR_GETATTRIB,
236   ENUM_ID_ANR_SETLUMASFSTRENGTH,
237   ENUM_ID_ANR_SETLUMATFSTRENGTH,
238   ENUM_ID_ANR_GETLUMASFSTRENGTH,
239   ENUM_ID_ANR_GETLUMATFSTRENGTH,
240   ENUM_ID_ANR_SETCHROMASFSTRENGTH,
241   ENUM_ID_ANR_SETCHROMATFSTRENGTH,
242   ENUM_ID_ANR_GETCHROMASFSTRENGTH,
243   ENUM_ID_ANR_GETCHROMATFSTRENGTH,
244   ENUM_ID_ANR_SETRAWNRSFSTRENGTH,
245   ENUM_ID_ANR_GETRAWNRSFSTRENGTH,
246   ENUM_ID_ANR_END,
247 };
248 
249 enum {
250   ENUM_ID_SHARP_START = 0X1400,
251   ENUM_ID_SHARP_SET_ATTR,
252   ENUM_ID_SHARP_GET_ATTR,
253   ENUM_ID_SHARP_SET_IQPARA,
254   ENUM_ID_SHARP_GET_IQPARA,
255   ENUM_ID_SHARP_SET_EF_IQPARA,
256   ENUM_ID_SHARP_GET_EF_IQPARA,
257   ENUM_ID_SHARP_SET_STRENGTH,
258   ENUM_ID_SHARP_GET_STRENGTH,
259   ENUM_ID_SHARP_END,
260 };
261 
262 enum {
263   ENUM_ID_SYSCTL_START = 0X1500,
264   ENUM_ID_SYSCTL_GETVERSIONINFO,
265   ENUM_ID_SYSCTL_SETCPSLTCFG,
266   ENUM_ID_SYSCTL_GETCPSLTINFO,
267   ENUM_ID_SYSCTL_QUERYCPSLTCAP,
268   ENUM_ID_SYSCTL_SETWORKINGMODE,
269   ENUM_ID_SYSCTL_ENQUEUERKRAWFILE,
270   ENUM_ID_SYSCTL_END,
271 };
272 
273 enum {
274   ENUM_ID_AMERGE_START = 0X1600,
275   ENUM_ID_AMERGE_SETATTRIB,
276   ENUM_ID_AMERGE_GETATTRIB,
277   ENUM_ID_AMERGE_END,
278 };
279 
280 enum {
281   ENUM_ID_AGAMMA_START = 0X1700,
282   ENUM_ID_AGAMMA_SETATTRIB,
283   ENUM_ID_AGAMMA_GETATTRIB,
284   ENUM_ID_AGAMMA_END,
285 };
286 
287 enum {
288   ENUM_ID_ADPCC_START = 0X1800,
289   ENUM_ID_ADPCC_SETATTRIB,
290   ENUM_ID_ADPCC_GETATTRIB,
291   ENUM_ID_ADPCC_END,
292 };
293 
294 enum {
295   ENUM_ID_DEHAZE_START = 0X1900,
296   ENUM_ID_DEHAZE_SETATTRIB,
297   ENUM_ID_DEHAZE_GETATTRIB,
298   ENUM_ID_DEHAZE_END,
299 };
300 
301 enum {
302   ENUM_ID_ACCM_START = 0X1B00,
303   ENUM_ID_ACCM_SETATTRIB,
304   ENUM_ID_ACCM_GETATTRIB,
305   ENUM_ID_ACCM_QUERYCCMINFO,
306   ENUM_ID_ACCM_END,
307 };
308 
309 enum {
310   ENUM_ID_AWB_START = 0X1C00,
311   ENUM_ID_AWB_SETATTRIB,
312   ENUM_ID_AWB_GETATTRIB,
313   ENUM_ID_AWB_QUERYWBINFO,
314   ENUM_ID_AWB_END,
315 };
316 
317 enum {
318   ENUM_ID_CPROC_START = 0X1D00,
319   ENUM_ID_CPROC_SETATTRIB,
320   ENUM_ID_CPROC_GETATTRIB,
321   ENUM_ID_CPROC_END,
322 };
323 
324 enum {
325   ENUM_ID_ATMO_START = 0X1E00,
326   ENUM_ID_ATMO_SETATTRIB,
327   ENUM_ID_ATMO_GETATTRIB,
328   ENUM_ID_ATMO_END,
329 };
330 
331 enum
332 {
333   ENUM_ID_AIQ_UAPI_START = 0X1F00,
334   ENUM_ID_AIQ_UAPI_SYSCTL_GET3ASTATS,
335   ENUM_ID_AIQ_UAPI_SYSCTL_GET3ASTATSBLK,
336   ENUM_ID_AIQ_UAPI2_AWB_WRITEAWBIN,
337   ENUM_ID_AIQ_UAPI_END,
338 };
339 
340 #endif
341