twain3.0/huagao/Device/CyUsbEx.cpp

129 lines
2.5 KiB
C++
Raw Normal View History

2021-07-11 08:19:57 +00:00
#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;
}