#pragma once #include #include #include #include "usb_manager.h" #include #include "BlockingQueue.h" #include #include "defines.h" #include "taskinfo.h" struct DevInfo { unsigned int vid; unsigned int pid; std::string mac; std::string type; std::shared_ptr(*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 scanner; std::string display_name; std::vector 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 GetOnlineScanners(); int SetCurrentDevice(int dev_idx); std::vector 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 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& infos); private: scanner_event_handler m_event_handler; std::vector m_onlinescanners; std::shared_ptr m_cur_scanner; std::shared_ptr m_work_thread; int m_current_select_idx; void* m_user; std::mutex m_mtx_mgr; std::vector> m_task_result = { {0,"Untest"}, {1,"Untest"}, {2,"Untest"}, {3,"Untest"}, {4,"Untest"}, {5,"Untest"}, {6,"Untest"}, {7,"Untest"} }; JSTaskInfo js_task; };