zynq_7010/zynq_7010_code/HGUsb.cpp

113 lines
2.4 KiB
C++

#include "HGUsb.h"
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
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();
}