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