newtx/scanner/async_scanner.h

88 lines
3.1 KiB
C
Raw Permalink Normal View History

2023-12-01 09:17:09 +00:00
#pragma once
#include <stdint.h>
#include <thread>
#include <functional>
#include <algorithm>
#include <memory>
#include <vector>
#include <base/utils.h>
#include <base/data.h>
class async_usb_gadget;
class device_option;
class image_capture;
class img_processor;
class gb_json;
2023-12-18 01:39:48 +00:00
class scanner_const_opts;
class scanner_hw;
class user_priv;
class imgproc_mgr;
2024-02-25 05:51:52 +00:00
class resource_mgr;
2023-12-01 09:17:09 +00:00
enum must_cond
{
MUST_COND_ROLLER_CNT = 1 << 0,
MUST_COND_HISTORY_CNT = 1 << 1,
};
2023-12-01 09:17:09 +00:00
class async_scanner : public refer
{
async_usb_gadget *usb_ = nullptr;
device_option *cfg_mgr_ = nullptr;
scanner_const_opts *const_opts_ = nullptr;
scanner_hw *cis_ = nullptr;
user_priv *user_ = nullptr;
imgproc_mgr *img_prcr_ = nullptr;
uint32_t must_ready_ = 0;
2023-12-01 09:17:09 +00:00
MUTEX locker_;
volatile bool connected_ = false;
2023-12-01 09:17:09 +00:00
uint32_t img_cnt_;
uint32_t scan_id_;
uint32_t scan_err_;
volatile bool reply_start_;
2023-12-01 10:03:10 +00:00
int last_err_ = 0;
2024-02-25 05:51:52 +00:00
std::unique_ptr<resource_mgr> res_mgr_;
2023-12-01 09:17:09 +00:00
2023-12-09 10:21:05 +00:00
MUTEX fsender_;
std::vector<file_reader*> send_files_;
2023-12-18 01:39:48 +00:00
static bool resource_check(RES_CHK_PROTO);
static void image_sender(SENDER_PROTO);
static dyn_mem_ptr option_changed_packet(const char* name, void* val, size_t val_len, int pkid = 0, int err = 0);
dyn_mem_ptr handle_bulk_cmd(LPPACK_BASE pack, uint32_t* used, packet_data_base_ptr* required, uint32_t session);
2023-12-01 09:17:09 +00:00
void init(void);
void init_usb(void);
void add_option_to_ui_menu(const char* name, int pos = -1);
bool on_energy_conservation(bool normal/*true - working status; false - go to sleep*/); // return true to enable get into 'normal' status
2023-12-01 09:17:09 +00:00
dyn_mem_ptr handle_simple_roger(LPPACK_BASE pack, uint32_t* used, packet_data_base_ptr* required, uint32_t session);
dyn_mem_ptr handle_get_opt_value(LPPACK_BASE pack, uint32_t* used, packet_data_base_ptr* required, uint32_t session);
dyn_mem_ptr handle_get_opt_all(LPPACK_BASE pack, uint32_t* used, packet_data_base_ptr* required, uint32_t session);
dyn_mem_ptr handle_set_opt(LPPACK_BASE pack, uint32_t* used, packet_data_base_ptr* required, uint32_t session);
dyn_mem_ptr handle_file_receive(LPPACK_BASE pack, uint32_t* used, packet_data_base_ptr* required, uint32_t session);
dyn_mem_ptr handle_file_send(LPPACK_BASE pack, uint32_t* used, packet_data_base_ptr* required, uint32_t session);
dyn_mem_ptr handle_file_send_roger(LPPACK_BASE pack, uint32_t* used, packet_data_base_ptr* required, uint32_t session);
dyn_mem_ptr handle_scan_start(LPPACK_BASE pack, uint32_t* used, packet_data_base_ptr* required, uint32_t session);
dyn_mem_ptr handle_scan_stop(LPPACK_BASE pack, uint32_t* used, packet_data_base_ptr* required, uint32_t session);
dyn_mem_ptr handle_process_cmd(LPPACK_BASE pack, uint32_t* used, packet_data_base_ptr* required, uint32_t session);
2023-12-01 09:17:09 +00:00
public:
async_scanner();
protected:
~async_scanner();
public:
uint32_t stop(void);
2023-12-01 10:03:10 +00:00
int last_error(void);
// console command ...
public:
void print_usb_status(void);
2023-12-01 09:17:09 +00:00
};