Files
usbserial-dw/YmodemFileReceive.h

62 lines
1.5 KiB
C++

#ifndef YMODEMFILERECEIVE_H
#define YMODEMFILERECEIVE_H
#include "TimeoutSerial.h"
#include "Ymodem.h"
#include <boost/signals2.hpp>
#include <boost/utility.hpp>
#include <boost/asio.hpp>
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
class YmodemFileReceive : public Ymodem
{
public:
explicit YmodemFileReceive();
~YmodemFileReceive();
void setFilePath(const string &path);
void setDefaultFileName(const string &path);
void setSerialPort(TimeoutSerial *port);
TimeoutSerial *getSerialPort();
bool startReceive();
void stopReceive();
int getReceiveProgress();
Status getReceiveStatus();
boost::signals2::signal<void (int)> receiveProgress;
boost::signals2::signal<void (YmodemFileReceive::Status status)> receiveStatus;
void readTimeOut(const boost::system::error_code& e);
void writeTimeOut(const boost::system::error_code& e);
private:
Code callback(Status status, uint8_t *buff, uint32_t *len);
int32_t read(uint8_t *buff, uint32_t len);
int32_t write(uint8_t *buff, uint32_t len);
ofstream file;
boost::asio::io_service io; ///< Io service object
boost::asio::deadline_timer readTimer; ///< Timer for timeout
boost::asio::deadline_timer writeTimer; ///< Timer for timeout
TimeoutSerial *serialPort;
int progress;
Status status;
string filePath;
string fileName;
string defaultFileName = "";
uint64_t fileSize;
uint64_t fileCount;
};
#endif // YMODEMFILERECEIVE_H