rk3399_arm_lvds/usb/usbtransmit.cpp

66 lines
1.6 KiB
C++

#include "usbtransmit.h"
#include "usbdevice.h"
#include <chrono>
#include <iostream>
#include "applog.h"
#include "memoryex.h"
#include <string.h>
#include "stringex.hpp"
static std::string loggername = "UsbTransmit";
UsbTransmit::UsbTransmit(std::shared_ptr<UsbDevice> usb)
{
LOG_INIT();
this->usb = usb;
}
UsbTransmit::~UsbTransmit()
{
cannel();
}
void UsbTransmit::write(MemoryPtr memroy)
{
LOG_TRACE("tx start in");
if (is_writing())
{
LOG_TRACE("send image data error ");
printf("send image data error ");
return;
}
static int indextransfer=0;
runthread.reset(new ThreadEx([this, memroy]() {
if (usb && usb->is_connected())
{
printf("tx starting");
printf("tx starting transfer index =%d my size = %d",++indextransfer,memroy->size());
//printf("\n tx starting transfer index =%d mmy size = %d",++indextransfer,memroy->size());
int num= usb->write_bulk(memroy->data(), memroy->size());
printf("tx end\n");
//printf("\n xfer size %d",num);
}
}));
}
int UsbTransmit::write_bulk(void* data,int size)
{
int nwrite = 0;
if (usb && usb->is_connected())
nwrite = usb->write_bulk(data, size);
return nwrite;
}
bool UsbTransmit::is_writing()
{
LOG_TRACE("checking UsbTransmit is_writing");
auto ret=runthread && runthread->is_runing();
LOG_TRACE(string_format("checking UsbTransmit done ret= %s ",ret?"true":"false"));
return ret;
}
void UsbTransmit::cannel()
{
if(runthread)
runthread->cannel();
}