g1g2hardwarechecker/Scanner/ScannerManager.h

93 lines
2.6 KiB
C++

#pragma once
#include <sstream>
#include <vector>
#include <memory>
#include "usb_manager.h"
#include <IScanner.h>
#include "BlockingQueue.h"
#include <thread>
#include "defines.h"
#include "taskinfo.h"
struct DevInfo
{
unsigned int vid;
unsigned int pid;
std::string mac;
std::string type;
std::shared_ptr<IScanner>(*create_scanner)(const char*, usb_io* ,void* h);
};
struct DevEvent
{
unsigned int Vid;
unsigned int Pid;
unsigned int EvtCode;
unsigned int Index;
std::string Msg;
};
typedef int(*scanner_event_handler)(DevEvent dev, int from, int status, int data_type,int data_len, void* data, void* user);
class ScannerManager
{
typedef struct _online_scanner
{
libusb_device* dev; // the unique usb device
int ind; // index in supporting scanners queue
std::shared_ptr<IScanner> scanner;
std::string display_name;
std::vector<TaskInfo> taskinfos;
bool operator==(const libusb_device* d)
{
return d == dev;
}
bool operator==(const int& index)
{
return ind == index;
}
bool operator==(const char* name)
{
return display_name == name;
}
}OLSCANNER;
public:
ScannerManager();
~ScannerManager();
void Init();
void SetScannerEventCallback(scanner_event_handler event_handler,void* user);
std::vector<OLSCANNER> GetOnlineScanners();
int SetCurrentDevice(int dev_idx);
std::vector<TaskInfo> GetCurSupTests();
void AddTask(int taskID);
bool UpdateTaskResult(int taskID, std::string result);
void FinishTest();
void Reboot(bool b_loader);
void PowerOFF();
static std::shared_ptr<IScanner> create_scanner_g1g2(const char* name,usb_io* io,void* h);
private:
static void usb_event_handle(usb_event ev, libusb_device* device, int vid, int pid, int usb_ver_h, int usb_ver_l, bool* retry, void* user); // usb_ver_h.usb_ver_l
static void on_scanner_handler(unsigned int evt, int data_type, unsigned int data_len, void* data, void* user);
void on_hgscanner_pnp(usb_event ev, libusb_device* device, int vid, int pid, int usb_ver_h, int usb_ver_l, bool* retry); // usb_ver_h.usb_ver_l
void on_scanner_call(unsigned int evt, int data_type, unsigned int data_len, void* data);
void GetDefaultTaskinfos(std::vector<TaskInfo>& infos);
private:
scanner_event_handler m_event_handler;
std::vector<OLSCANNER> m_onlinescanners;
std::shared_ptr<IScanner> m_cur_scanner;
std::shared_ptr<std::thread> m_work_thread;
int m_current_select_idx;
void* m_user;
std::mutex m_mtx_mgr;
std::vector<std::pair<int, std::string>> m_task_result = {
{0,"Untest"},
{1,"Untest"},
{2,"Untest"},
{3,"Untest"},
{4,"Untest"},
{5,"Untest"},
{6,"Untest"},
{7,"Untest"}
};
JSTaskInfo js_task;
};