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