mirror of http://192.168.1.51:8099/lmh188/twain3.0
130 lines
2.5 KiB
C++
130 lines
2.5 KiB
C++
#include "stdafx.h"
|
|
#include "CyUsbEx.h"
|
|
#include "CyAPI.h"
|
|
|
|
CyUsbEx::CyUsbEx(int index)
|
|
{
|
|
m_index = index;
|
|
m_timeout = 100;
|
|
}
|
|
|
|
bool CyUsbEx::open()
|
|
{
|
|
if (is_open())
|
|
return true;
|
|
|
|
m_usb.reset(new CCyUSBDevice());
|
|
m_usb->Open(m_index);
|
|
m_usb->Reset();
|
|
if (m_usb->IsOpen())
|
|
{
|
|
if (m_usb->BulkOutEndPt)
|
|
m_usb->BulkOutEndPt->TimeOut = m_timeout;
|
|
|
|
if (m_usb->BulkInEndPt)
|
|
m_usb->BulkInEndPt->TimeOut = m_timeout;
|
|
|
|
if (m_usb->InterruptInEndPt)
|
|
m_usb->InterruptInEndPt->TimeOut = 400;
|
|
}
|
|
|
|
return is_open();
|
|
}
|
|
|
|
bool CyUsbEx::close()
|
|
{
|
|
if (is_open())
|
|
{
|
|
m_usb->Close();
|
|
m_usb.reset();
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
bool CyUsbEx::is_open()
|
|
{
|
|
if (m_usb.get() != NULL)
|
|
return m_usb->IsOpen();
|
|
|
|
return false;
|
|
}
|
|
|
|
bool CyUsbEx::is_connected()
|
|
{
|
|
return is_open();
|
|
}
|
|
|
|
void CyUsbEx::set_timeout(int timeout)
|
|
{
|
|
m_timeout = timeout;
|
|
}
|
|
|
|
int CyUsbEx::read_bulk(void* data, int len)
|
|
{
|
|
LONG llen = len;
|
|
m_usb->BulkInEndPt->XferData((UCHAR*)data, llen);
|
|
return llen;
|
|
}
|
|
|
|
|
|
|
|
int CyUsbEx::write_bulk(void* data, int len)
|
|
{
|
|
LONG llen = len;
|
|
m_usb->BulkOutEndPt->XferData((UCHAR*)data, llen);
|
|
return llen;
|
|
}
|
|
|
|
int CyUsbEx::read_int(void* data, int len)
|
|
{
|
|
LONG llen = len;
|
|
m_usb->InterruptInEndPt->XferData((UCHAR*)data, llen);
|
|
return llen;
|
|
}
|
|
|
|
int CyUsbEx::control_msg(int rtype, int req, int value, int index, int len, void* data)
|
|
{
|
|
if (!m_usb.get() || !m_usb->ControlEndPt)
|
|
return -1;
|
|
|
|
m_usb->ControlEndPt->Index = index;
|
|
m_usb->ControlEndPt->Value = value;
|
|
m_usb->ControlEndPt->ReqType = (CTL_XFER_REQ_TYPE)((rtype >> 5) & 0x03);
|
|
m_usb->ControlEndPt->Direction = (CTL_XFER_DIR_TYPE)(rtype >> 7);//
|
|
m_usb->ControlEndPt->Target = (CTL_XFER_TGT_TYPE)(rtype & 0x3);
|
|
m_usb->ControlEndPt->ReqCode = req;
|
|
LONG llen = len;
|
|
m_usb->ControlEndPt->XferData((UCHAR*)data, llen);
|
|
return llen;
|
|
}
|
|
|
|
void CyUsbEx::set_usbhotplug_callback(usbhotplug_callback callback, void* userdata)
|
|
{
|
|
return;
|
|
}
|
|
|
|
std::list<std::shared_ptr<IUsb>> CyUsbList::find_all()
|
|
{
|
|
std::list<std::shared_ptr<IUsb>> usblists;
|
|
CCyUSBDevice usbDevice;
|
|
for (int i = 0; i < usbDevice.DeviceCount(); i++)
|
|
usblists.push_back(std::shared_ptr<IUsb>(new CyUsbEx(i)));
|
|
return usblists;
|
|
}
|
|
|
|
std::list<std::shared_ptr<IUsb>> CyUsbList::find_vid_pid(int vid, int pid)
|
|
{
|
|
std::list<std::shared_ptr<IUsb>> usblists;
|
|
CCyUSBDevice usbDevice;
|
|
for (int i = 0; i < usbDevice.DeviceCount(); i++) {
|
|
usbDevice.Open(i);
|
|
if (usbDevice.IsOpen() && (usbDevice.VendorID == vid) && (usbDevice.ProductID == pid)) {
|
|
usblists.push_back(std::shared_ptr<IUsb>(new CyUsbEx(i)));
|
|
usbDevice.Close();
|
|
}
|
|
}
|
|
return usblists;
|
|
}
|
|
|