#ifndef SOCKET_SERVER_H #define SOCKET_SERVER_H #include "MessageParser.hpp" #include "include/algos/adehaze/rk_aiq_types_adehaze_algo_int.h" #include "include/algos/adpcc/rk_aiq_types_adpcc_algo_int.h" #include "include/algos/ae/rk_aiq_uapi_ae_int_types_v1.h" #include "include/algos/ae/rk_aiq_uapi_ae_int_types_v2.h" #include "include/algos/agamma/rk_aiq_types_agamma_algo_int.h" #include "include/algos/amerge/rk_aiq_types_amerge_algo_int.h" #include "include/algos/anr/rk_aiq_types_anr_algo_int.h" #include "include/algos/atmo/rk_aiq_types_atmo_algo_int.h" #include "include/uAPI2/rk_aiq_user_api2_adpcc.h" #include "include/uAPI2/rk_aiq_user_api2_helper.h" #include "include/uAPI2/rk_aiq_user_api2_sysctl.h" #include "include/uAPI2/rk_aiq_user_api2_awb.h" #include "rk_aiq_user_api2_ae.h" #include "rk_aiq_user_api_ae.h" #include "rkaiq_tool_ae.h" #include "rkaiq_tool_anr.h" #include "rkaiq_tool_imgproc.h" #include "rkaiq_tool_sharp.h" #include "rkaiq_tool_sysctl.h" #include "xcam_log.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define MAXPACKETSIZE 18192 #define MAX_CLIENT 1000 // define IPCSERVER module logs #define LOGD_IPC(...) XCAM_MODULE_LOG_DEBUG(XCORE_LOG_MODULE_IPC, 0xff, ##__VA_ARGS__) #define LOGE_IPC(...) XCAM_MODULE_LOG_ERROR(XCORE_LOG_MODULE_IPC, 0xff, ##__VA_ARGS__) #define LOGW_IPC(...) XCAM_MODULE_LOG_WARNING(XCORE_LOG_MODULE_IPC, 0xff, ##__VA_ARGS__) #define LOGV_IPC(...) XCAM_MODULE_LOG_VERBOSE(XCORE_LOG_MODULE_IPC, 0xff, ##__VA_ARGS__) #define LOGI_IPC(...) XCAM_MODULE_LOG_INFO(XCORE_LOG_MODULE_IPC, 0xff, ##__VA_ARGS__) #define LOG1_IPC(...) XCAM_MODULE_LOG_LOW1(XCORE_LOG_MODULE_IPC, 0xff, ##__VA_ARGS__) #define LOGK_IPC(...) XCAM_MODULE_LOG_KEY(XCORE_LOG_MODULE_IPC, 0xff, ##__VA_ARGS__) typedef struct rk_aiq_sys_ctx_s rk_aiq_sys_ctx_t; using RecvCallBack = add_pointer::type; class SocketServer { public: SocketServer(); virtual ~SocketServer(); int Send(int cilent_socket, char *buff, int size); int Process(rk_aiq_sys_ctx_t *aiq_ctx, int camid); void RegisterRecvCallBack(RecvCallBack cb) { callback_ = cb; } void UnRegisterRecvCallBack() { callback_ = nullptr; } void SaveEixt(); void Deinit(); bool is_connected() { return tool_mode_on; } void tool_mode_set(bool status) { tool_mode_on = status; } int packetHandle(void *packet, MessageType type); static std::mutex send_mutex; private: void Accepted(); int Recvieve(); int Recvieve(int sync); int poll_event(int timeout_msec, int fds[]); #ifdef __ANDROID__ int getAndroidLocalSocket(int camid); #endif private: bool tool_mode_on; int sockfd; int client_socket; int quit_; struct sockaddr_un serverAddress; struct sockaddr_un clientAddress; rk_aiq_sys_ctx_t *aiq_ctx; std::unique_ptr accept_threads_; std::unique_ptr msg_parser; std::shared_ptr tunning_thread; RecvCallBack callback_; int _stop_fds[2]; int camId_{-1}; }; void hexdump2(char *buf, const int num); int ProcessCommand(rk_aiq_sys_ctx_t *ctx, RkAiqSocketPacket *dataRecv, RkAiqSocketPacket *dataReply); #define CHECK_PARAM_SIZE(parmaStruct, dataSize) \ LOG_INFO("real struct size : 0x%x, data size 0x%x\n", sizeof(parmaStruct), \ dataSize); \ if (sizeof(parmaStruct) != dataSize) { \ LOG_INFO("The parameter does not match and will not take effect\n"); \ return -1; \ } enum { ENUM_ID_AE_START = 0x1100, ENUM_ID_AE_SETEXPSWATTR, ENUM_ID_AE_GETEXPSWATTR, ENUM_ID_AE_SETLINAEDAYROUTEATTR, ENUM_ID_AE_GETLINAEDAYROUTEATTR, ENUM_ID_AE_SETLINAENIGHTROUTEATTR, ENUM_ID_AE_GETLINAENIGHTROUTEATTR, ENUM_ID_AE_SETHDRAEDAYROUTEATTR, ENUM_ID_AE_GETHDRAEDAYROUTEATTR, ENUM_ID_AE_SETHDRAENIGHTROUTEATTR, ENUM_ID_AE_GETHDRAENIGHTROUTEATTR, ENUM_ID_AE_QUERYEXPRESINFO, ENUM_ID_AE_SETLINEXPATTR, ENUM_ID_AE_GETLINEXPATTR, ENUM_ID_AE_SETHDREXPATTR, ENUM_ID_AE_GETHDREXPATTR, ENUM_ID_AE_END, }; enum { ENUM_ID_IMGPROC_START = 0x1200, ENUM_ID_IMGPROC_SETEXPMODE, ENUM_ID_IMGPROC_GETEXPMODE, ENUM_ID_IMGPROC_SETAEMODE, ENUM_ID_IMGPROC_GETAEMODE, ENUM_ID_IMGPROC_SETEXPGAINRANGE, ENUM_ID_IMGPROC_GETEXPGAINRANGE, ENUM_ID_IMGPROC_SETEXPTIMERANGE, ENUM_ID_IMGPROC_GETEXPTIMERANGE, ENUM_ID_IMGPROC_SETBLCMODE, ENUM_ID_IMGPROC_SETHLCMODE, ENUM_ID_IMGPROC_SETLEXPMODE, ENUM_ID_IMGPROC_GETLEXPMODE, ENUM_ID_IMGPROC_SETMLEXP, ENUM_ID_IMGPROC_GETMLEXP, ENUM_ID_IMGPROC_SETANTIFLICKERMODE, ENUM_ID_IMGPROC_GETANTIFLICKERMODE, ENUM_ID_IMGPROC_SETEXPPWRLINEFREQMODE, ENUM_ID_IMGPROC_GETEXPPWRLINEFREQMODE, ENUM_ID_IMGPROC_SETDAYNSWMODE, ENUM_ID_IMGPROC_GETDAYNSWMODE, ENUM_ID_IMGPROC_SETMDNSCENE, ENUM_ID_IMGPROC_GETMDNSCENE, ENUM_ID_IMGPROC_SETADNSENS, ENUM_ID_IMGPROC_GETADNSENS, ENUM_ID_IMGPROC_SETFLIGHTMODE, ENUM_ID_IMGPROC_GETFLIGHTMODE, ENUM_ID_IMGPROC_SETMFLIGHT, ENUM_ID_IMGPROC_GETMFLIGHT, ENUM_ID_IMGPROC_SETWBMODE, ENUM_ID_IMGPROC_GETWBMODE, ENUM_ID_IMGPROC_LOCKAWB, ENUM_ID_IMGPROC_UNLOCKAWB, ENUM_ID_IMGPROC_SETAWBRANGE, ENUM_ID_IMGPROC_GETAWBRANGE, ENUM_ID_IMGPROC_SETMWBSCENE, ENUM_ID_IMGPROC_GETMWBSCENE, ENUM_ID_IMGPROC_SETMWBGAIN, ENUM_ID_IMGPROC_GETMWBGAIN, ENUM_ID_IMGPROC_SETMWBCT, ENUM_ID_IMGPROC_GETMWBCT, ENUM_ID_IMGPROC_SETCRSUPPSN, ENUM_ID_IMGPROC_GETCRSUPPSN, ENUM_ID_IMGPROC_SETFOCUSMODE, ENUM_ID_IMGPROC_GETFOCUSMODE, ENUM_ID_IMGPROC_SETFOCUSWIN, ENUM_ID_IMGPROC_GETFOCUSWIN, ENUM_ID_IMGPROC_SETFIXEDMODECODE, ENUM_ID_IMGPROC_GETFIXEDMODECODE, ENUM_ID_IMGPROC_SETMINFOCUSDIS, ENUM_ID_IMGPROC_GETMINFOCUSDIS, ENUM_ID_IMGPROC_SETOPZOOMRANGE, ENUM_ID_IMGPROC_GETOPZOOMRANGE, ENUM_ID_IMGPROC_SETOPZOOMSPEED, ENUM_ID_IMGPROC_GETOPZOOMSPEED, ENUM_ID_IMGPROC_SETHDRMODE, ENUM_ID_IMGPROC_GETHDRMODE, ENUM_ID_IMGPROC_SETMHDRSTRTH, ENUM_ID_IMGPROC_GETMHDRSTRTH, ENUM_ID_IMGPROC_SETNRMODE, ENUM_ID_IMGPROC_GETNRMODE, ENUM_ID_IMGPROC_SETANRSTRTH, ENUM_ID_IMGPROC_GETANRSTRTH, ENUM_ID_IMGPROC_SETMSPANRSTRTH, ENUM_ID_IMGPROC_GETMSPANRSTRTH, ENUM_ID_IMGPROC_SETMTNRSTRTH, ENUM_ID_IMGPROC_GETMTNRSTRTH, ENUM_ID_IMGPROC_SETDHZMODE, ENUM_ID_IMGPROC_GETDHZMODE, ENUM_ID_IMGPROC_SETMDHZSTRTH, ENUM_ID_IMGPROC_GETMDHZSTRTH, ENUM_ID_IMGPROC_SETCONTRAST, ENUM_ID_IMGPROC_GETCONTRAST, ENUM_ID_IMGPROC_SETBRIGHTNESS, ENUM_ID_IMGPROC_GETBRIGHTNESS, ENUM_ID_IMGPROC_SETSATURATION, ENUM_ID_IMGPROC_GETSATURATION, ENUM_ID_IMGPROC_SETSHARPNESS, ENUM_ID_IMGPROC_GETSHARPNESS, ENUM_ID_IMGPROC_SETGAMMACOEF, ENUM_ID_IMGPROC_SETGRAYMODE, ENUM_ID_IMGPROC_GETGRAYMODE, ENUM_ID_IMGPROC_END, }; enum { ENUM_ID_ANR_START = 0x1300, ENUM_ID_ANR_SETBAYERNRATTR, ENUM_ID_ANR_GETBAYERNRATTR, ENUM_ID_ANR_SETMFNRATTR, ENUM_ID_ANR_GETMFNRATTR, ENUM_ID_ANR_SETUVNRATTR, ENUM_ID_ANR_GETUVNRATTR, ENUM_ID_ANR_SETYNRATTR, ENUM_ID_ANR_GETYNRATTR, ENUM_ID_ANR_SETATTRIB, ENUM_ID_ANR_GETATTRIB, ENUM_ID_ANR_SETLUMASFSTRENGTH, ENUM_ID_ANR_SETLUMATFSTRENGTH, ENUM_ID_ANR_GETLUMASFSTRENGTH, ENUM_ID_ANR_GETLUMATFSTRENGTH, ENUM_ID_ANR_SETCHROMASFSTRENGTH, ENUM_ID_ANR_SETCHROMATFSTRENGTH, ENUM_ID_ANR_GETCHROMASFSTRENGTH, ENUM_ID_ANR_GETCHROMATFSTRENGTH, ENUM_ID_ANR_SETRAWNRSFSTRENGTH, ENUM_ID_ANR_GETRAWNRSFSTRENGTH, ENUM_ID_ANR_END, }; enum { ENUM_ID_SHARP_START = 0X1400, ENUM_ID_SHARP_SET_ATTR, ENUM_ID_SHARP_GET_ATTR, ENUM_ID_SHARP_SET_IQPARA, ENUM_ID_SHARP_GET_IQPARA, ENUM_ID_SHARP_SET_EF_IQPARA, ENUM_ID_SHARP_GET_EF_IQPARA, ENUM_ID_SHARP_SET_STRENGTH, ENUM_ID_SHARP_GET_STRENGTH, ENUM_ID_SHARP_END, }; enum { ENUM_ID_SYSCTL_START = 0X1500, ENUM_ID_SYSCTL_GETVERSIONINFO, ENUM_ID_SYSCTL_SETCPSLTCFG, ENUM_ID_SYSCTL_GETCPSLTINFO, ENUM_ID_SYSCTL_QUERYCPSLTCAP, ENUM_ID_SYSCTL_SETWORKINGMODE, ENUM_ID_SYSCTL_ENQUEUERKRAWFILE, ENUM_ID_SYSCTL_END, }; enum { ENUM_ID_AMERGE_START = 0X1600, ENUM_ID_AMERGE_SETATTRIB, ENUM_ID_AMERGE_GETATTRIB, ENUM_ID_AMERGE_END, }; enum { ENUM_ID_AGAMMA_START = 0X1700, ENUM_ID_AGAMMA_SETATTRIB, ENUM_ID_AGAMMA_GETATTRIB, ENUM_ID_AGAMMA_END, }; enum { ENUM_ID_ADPCC_START = 0X1800, ENUM_ID_ADPCC_SETATTRIB, ENUM_ID_ADPCC_GETATTRIB, ENUM_ID_ADPCC_END, }; enum { ENUM_ID_DEHAZE_START = 0X1900, ENUM_ID_DEHAZE_SETATTRIB, ENUM_ID_DEHAZE_GETATTRIB, ENUM_ID_DEHAZE_END, }; enum { ENUM_ID_ACCM_START = 0X1B00, ENUM_ID_ACCM_SETATTRIB, ENUM_ID_ACCM_GETATTRIB, ENUM_ID_ACCM_QUERYCCMINFO, ENUM_ID_ACCM_END, }; enum { ENUM_ID_AWB_START = 0X1C00, ENUM_ID_AWB_SETATTRIB, ENUM_ID_AWB_GETATTRIB, ENUM_ID_AWB_QUERYWBINFO, ENUM_ID_AWB_END, }; enum { ENUM_ID_CPROC_START = 0X1D00, ENUM_ID_CPROC_SETATTRIB, ENUM_ID_CPROC_GETATTRIB, ENUM_ID_CPROC_END, }; enum { ENUM_ID_ATMO_START = 0X1E00, ENUM_ID_ATMO_SETATTRIB, ENUM_ID_ATMO_GETATTRIB, ENUM_ID_ATMO_END, }; enum { ENUM_ID_AIQ_UAPI_START = 0X1F00, ENUM_ID_AIQ_UAPI_SYSCTL_GET3ASTATS, ENUM_ID_AIQ_UAPI_SYSCTL_GET3ASTATSBLK, ENUM_ID_AIQ_UAPI2_AWB_WRITEAWBIN, ENUM_ID_AIQ_UAPI_END, }; #endif