ymodem_tx.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00032 #include "ymodem.h"
00033
00038 class YModemTx : public YModem
00039 {
00040 public:
00046 YModemTx(SerialPort& port);
00047
00051 class InStream
00052 {
00053 public:
00062 virtual int In(uint8_t* data, size_t size) =0;
00063
00067 inline virtual ~InStream() {}
00068 };
00069
00078 int SendX(InStream& in, unsigned timeout, bool kMode);
00079
00090 int SendY(const char* fileName, size_t size, InStream& in, unsigned timeout);
00091
00095 enum TxError
00096 {
00097 ErrorInputStreamError = -300,
00098 ErrorReceiverNotBehaving = -301,
00099 ErrorTranferTerminatedByReceiver= -302,
00100 ErrorFileNameTooLong = -303
00101 };
00102
00103 private:
00104 int SendInitialise(unsigned timeout);
00105 int SendBlock(const uint8_t* data, size_t size);
00106 int SendData(const uint8_t* data, size_t size);
00107 int SendAll(InStream& in);
00108 int MakeBlock0(uint8_t* buffer, const char* fileName, size_t fileSize);
00109 int ProcessResponse(int c);
00110 private:
00111 size_t BlockNumber;
00112 bool SendCRC;
00113 bool WaitForBlockACK;
00114 bool Use1KBlocks;
00115 uint8_t ModeChar;
00116 int CancelCount;
00117 };
00118
00119