#pragma once // scanner center // // created on 2022-12-14 // #include "../../common/event_monitor.h" #include "../../common/ipc_util.h" #include "../img_process/img_process.h" #include //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // scanner ... #define TRY_GET_WITH_NOMEM(obj, method, buf, size) \ if(obj->method == ENOMEM) \ { \ buf = new char[size + 4]; \ if(buf) \ { \ memset(buf, 0, size + 4); \ size += 1; \ if(obj->method) \ { \ delete[] buf; \ buf = nullptr; \ } \ } \ } class img_processor; class image_collector; class res_mon; class ipc_wrapper; class linux_event; enum scanner_status; class scanner : public event_handler, public paremeter_get { std::string ipc_id_; // path-file:id:size img_processor *img_proc_; image_collector *img_src_; res_mon *res_; ipc_wrapper *ipc_; linux_event *exit_; volatile bool run_; scanner_status status_; safe_fifo msg_que_; std::string partial_msg_; int32_t init(void); int32_t uninit(void); int32_t get_configuration(const char* name, void* buf, size_t* size); int32_t set_configuration(const char* name, void* buf, size_t* size); int32_t start_scanning(void); int32_t stop_scanning(void); int32_t from_thunk_data(std::string& pack); int32_t dispatch_ipc_message(LPPACK_BASE pack); int32_t ipc_message_handler(void); int32_t on_ipc(void* data, size_t data_len, bool in); public: scanner(const char* ipc_id); protected: virtual ~scanner(); // refer public: virtual int32_t add_ref(void) override; virtual int32_t release(void) override; // event_handler public: virtual int32_t on_event(int32_t ev, void* data, size_t data_len) override; virtual int32_t get_fd(void) override; // paremeter_get public: virtual parameter* get_parameter(img_proc_param ipp) override; // methods public: int32_t run(void); int32_t stop(void); };