#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> CyUsbList::find_all() { std::list> usblists; CCyUSBDevice usbDevice; for (int i = 0; i < usbDevice.DeviceCount(); i++) usblists.push_back(std::shared_ptr(new CyUsbEx(i))); return usblists; } std::list> CyUsbList::find_vid_pid(int vid, int pid) { std::list> 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(new CyUsbEx(i))); usbDevice.Close(); } } return usblists; }