code_scanner/scanner/main/scanner.h

101 lines
2.3 KiB
C++

#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 <string.h>
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 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_;
volatile bool write_thunk_; // whether IPC is writing thunk data
scanner_status status_;
safe_fifo<std::string> msg_que_;
std::string partial_msg_;
union
{
struct
{
uint32_t no_paper : 1;
uint32_t cover_opened : 1;
uint32_t sleeping : 1;
uint32_t reserve : 29;
};
uint32_t val;
}hw_status_;
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);
};