93 lines
2.6 KiB
C
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;
|
||
|
};
|