rk3399_arm_lvds/usb/usbreceive.cpp

60 lines
1.1 KiB
C++

#include "usbreceive.h"
#include "memoryex.h"
#include "applog.h"
#include <threadex.h>
#include "usbdevice.h"
static std::string loggername = "UsbReceive";
UsbReceive::UsbReceive(std::shared_ptr<UsbDevice> t_usb)
{
LOG_INIT();
this->usb=t_usb;
}
UsbReceive::~UsbReceive()
{
cannel();
}
int UsbReceive::read(MemoryPtr& memroy)
{
int nread=0;
LOG_TRACE("rx start in");
if (is_reading())
return nread;
runthread.reset(new ThreadEx([this, memroy]() {
LOG_TRACE("rx starting");
if (usb && usb->is_connected())
usb->read_bulk(memroy->data(), memroy->size());
LOG_TRACE("rx started");
}));
return nread;
}
int UsbReceive::read_bulk(void* data,unsigned int length)
{
int nread=0;
if(usb.get()&&usb->is_connected())
{
if(data != nullptr && length >0)
nread = usb->read_bulk(data,length);
else
LOG_TRACE("read_bulk uncorrect data ptr or length");
}
return nread;
}
bool UsbReceive::is_reading()
{
return runthread&&runthread->is_runing();
}
void UsbReceive::cannel()
{
if(runthread.get())
runthread->cannel();
}