This repository has been archived on 2025-02-01. You can view files and clone it, but cannot push or open issues or pull requests.
reprapfirmware-dc42/src/DuetNG/WifiFirmwareUploader.h
David Crocker ed40658c45 Version 1.15rc2
Fixed doubling of M301 I parameter and halving of M301 P parameter
Implemented M303 auto tune and M307 heater process model
Improved temperature monitoring to detect heater cartridges or
thermistor falling out
Implemented M38 (thanks chrishamm)
Retructured course code tree
2016-08-20 12:14:28 +01:00

96 lines
3.1 KiB
C++

/*
* EspFirmwareUpload.h
*
* Created on: 15 Apr 2016
* Author: David
*/
#ifndef SRC_DUETNG_WIFIFIRMWAREUPLOADER_H_
#define SRC_DUETNG_WIFIFIRMWAREUPLOADER_H_
#include "Core.h"
#include "Storage/FileStore.h"
class WifiFirmwareUploader
{
public:
WifiFirmwareUploader(UARTClass& port);
bool IsReady() const;
void SendUpdateFile(const char *file, const char *dir, uint32_t address);
void Spin();
static const uint32_t FirmwareAddress = 0x00000000;
static const uint32_t WebFilesAddress = 0x00100000;
private:
static const uint32_t defaultTimeout = 500; // default timeout in milliseconds
static const uint32_t syncTimeout = 1000;
static const unsigned int retriesPerBaudRate = 9;
static const unsigned int retriesPerReset = 3;
static const uint32_t connectAttemptInterval = 50;
static const uint32_t resetDelay = 500;
static const uint32_t blockWriteInterval = 15; // 15ms is long enough, 10ms is mostly too short
static const uint32_t blockWriteTimeout = 200;
static const uint32_t eraseTimeout = 15000; // increased from 12 to 15 seconds because Roland's board was timing out
static const unsigned int percentToReportIncrement = 5; // how often we report % complete
// Return codes - this list must be kept in step with the corresponding messages
enum class EspUploadResult
{
success = 0,
timeout,
connect,
badReply,
fileRead,
emptyFile,
respHeader,
slipFrame,
slipState,
slipData,
};
enum class UploadState
{
idle,
resetting,
connecting,
erasing,
uploading,
done
};
void MessageF(const char *fmt, ...);
uint32_t getData(unsigned byteCnt, const uint8_t *buf, int ofst);
void putData(uint32_t val, unsigned byteCnt, uint8_t *buf, int ofst);
int ReadByte(uint8_t& data, bool slipDecode);
void WriteByteRaw(uint8_t b);
void WriteByteSlip(uint8_t b);
void flushInput();
EspUploadResult readPacket(uint8_t op, uint32_t *valp, size_t& bodyLen, uint32_t msTimeout);
void writePacket(const uint8_t *data, size_t len);
void writePacketRaw(const uint8_t *buf, size_t len);
void writePacket(const uint8_t *hdr, size_t hdrLen, const uint8_t *data, size_t dataLen);
void writePacketRaw(const uint8_t *hdr, size_t hdrLen, const uint8_t *data, size_t dataLen);
void sendCommand(uint8_t op, uint32_t checkVal, const uint8_t *data, size_t dataLen);
EspUploadResult doCommand(uint8_t op, const uint8_t *data, size_t dataLen, uint32_t checkVal, uint32_t *valp, uint32_t msTimeout);
EspUploadResult Sync(uint16_t timeout);
EspUploadResult flashBegin(uint32_t addr, uint32_t size);
EspUploadResult flashFinish(bool reboot);
static uint16_t checksum(const uint8_t *data, uint16_t dataLen, uint16_t cksum);
EspUploadResult flashWriteBlock(uint16_t flashParmVal, uint16_t flashParmMask);
UARTClass& uploadPort;
FileStore *uploadFile;
FilePosition fileSize;
uint32_t uploadAddress;
uint32_t uploadBlockNumber;
unsigned int uploadNextPercentToReport;
unsigned int connectAttemptNumber;
uint32_t lastAttemptTime;
uint32_t lastResetTime;
UploadState state;
EspUploadResult uploadResult;
bool restartOnCompletion;
};
#endif /* SRC_DUETNG_WIFIFIRMWAREUPLOADER_H_ */