113 lines
2.4 KiB
C++
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();
|
|
} |