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