101 lines
2.3 KiB
C++
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);
|
|
};
|