#include "HGUsb.h" #include #include #include #include #include HGUsb::HGUsb() { m_usbBulkIn.reset(new UsbEndPoint(UsbEndPoint::EndpointType::EP_Bulk_In)); m_usbBulkOut.reset(new UsbEndPoint(UsbEndPoint::EndpointType::EP_Bulk_Out)); } HGUsb::~HGUsb() { if (m_usbBulkIn.get()) m_usbBulkIn.reset(); if (m_usbBulkOut.get()) m_usbBulkOut.reset(); if (m_usbCtl.get()) m_usbInt.reset(); if (m_usbInt.get()) m_usbInt.reset(); } int HGUsb::open() { int ret = (int)HGUSB_ErrorCode::HG_USBSuccess; if (is_connect()) { LOG("PC has connected USB\n"); ret = m_usbBulkIn->open(); ret = m_usbBulkOut->open(); } else { ret = (int)HGUSB_ErrorCode::HG_USBPCUnConnected; LOG("PC havn't connected USB\n"); } return ret; } void HGUsb::close() { m_usbBulkIn->close(); m_usbBulkOut->close(); } int HGUsb::read_bulk(void *pdata, int length) { int ret = 0; if (!pdata) return (int)HGUSB_ErrorCode::HG_USBInvalidePtr; if (m_usbBulkOut.get()) { ret = m_usbBulkOut->read(pdata, length); } return ret; } int HGUsb::write_bulk(void *pdata, int length) { int ret = 0; if (!pdata) return (int)HGUSB_ErrorCode::HG_USBInvalidePtr; if (m_usbBulkIn.get()) { ret = m_usbBulkIn->write(pdata, length); return ret; } } int HGUsb::write_int(void *pdata, int length) { int ret = 0; if (!pdata) return (int)HGUSB_ErrorCode::HG_USBInvalidePtr; if (m_usbInt.get()) m_usbInt->write(pdata, length); return ret; } int HGUsb::write_control(int rtype, int req, int value, int index, int len, void *data) { int ret = 0; if (!data) return (int)HGUSB_ErrorCode::HG_USBInvalidePtr; if (m_usbCtl.get()) { //need to transfer protocol,did not realized } return ret; } bool HGUsb::is_connect() { //DEBUG("check if PC and Scanner connected "); int fd, n; char buf[20] = "\0"; fd = ::open(STATE_PATH, O_RDONLY); read(fd, buf, 20); ::close(fd); return strstr(buf, "CONFIGURED"); } // bool HGUsb::is_open() { return m_usbBulkIn->is_open() && m_usbBulkOut->is_open(); }