g1g2hardwarechecker/Scanner/G1G2Scanner.h

78 lines
2.2 KiB
C
Raw Normal View History

2024-01-08 10:06:47 +00:00
/*
* @Descripttion:
* @version:
* @Author: pengming
* @Date: 2023-10-26 21:31:49
* @LastEditors: pengming
*/
#pragma once
#include "IScanner.h"
#include "usb_manager.h"
#include "defines.h"
#include "USBProtocol.h"
#include "BlockingQueue.h"
class G1G2Scanner: public IScanner
{
public:
G1G2Scanner(usb_io* usb);
virtual ~G1G2Scanner();
virtual void USBDisconnect() override;
virtual void Reboot(bool b_loader) override;
virtual void PowerOFF() override;
virtual void GetFile(std::string path,std::string &content) override;
virtual void GetIOStatus(int type) override;
virtual int RecordFinalResult(std::string res) override;
virtual int CheckLEDDisplay(std::string display) override;
virtual int Flat(unsigned int mode) override;
virtual void Snap(unsigned int mode, unsigned int count) override;
virtual void SetScannerCallback(scanner_call_handler callback, void* user) override;
virtual int RecordTestInfo(std::string info) override;
virtual bool CheckSwitchs(int idx0, int idx1, int idx2, int idx3) override;
virtual bool CheckCapacity(int dst_mem, int dst_disk) override;
private:
void init_work_thread();
void workrun();
int read_register(int addr, int* val);
int write_register(int addr, int val);
std::string read_file(std::string path);
int write_file(std::string path,std::string content);
int read_data(void* data, int length, int timeout);
int update_statue(HGEIntInfo* info);
bool is_running();
int im_dev_count();
bool is_xferfing();
void xfer_start();
void xfer_image();
int get_image_size();
int get_imgproc_done();
void popimage();
void get_cur_dir(std::string& dir);
//void aquire_imgs()
private:
void proc(bool bcachemode);
void procmsg();
private:
scanner_call_handler m_callback;
void* m_user;
volatile bool m_bwork;
volatile bool m_bproc;
volatile bool m_bprocmsg;
std::shared_ptr<std::thread> m_work_thread;
std::shared_ptr<std::thread> m_imgprocthread;
std::shared_ptr<std::thread> m_msgProcThread;
usb_io* m_usb;
std::mutex m_mtx_usb;
bool m_online = false;
int img_index = 0;
BlockingQueue<std::shared_ptr<std::vector<char>>> imgs;
BlockingQueue<std::string> m_paths;
struct Msg
{
TASKID id;
DATA_TYPE type;
std::string msg;
};
BlockingQueue<Msg> m_msg;
};