46 lines
1.5 KiB
C++
46 lines
1.5 KiB
C++
#ifndef PROGRAMMER_H
|
|
#define PROGRAMMER_H
|
|
#include "cstdint"
|
|
#include "baselayer.h"
|
|
#include "fifo.h"
|
|
#include "intelhex.h"
|
|
/**
|
|
*/
|
|
class Programmer : public BaseLayer {
|
|
static constexpr unsigned MaxStrLen = 1024u;
|
|
static constexpr unsigned MaxPages = 1024u;
|
|
static constexpr unsigned PageSize = 0x1000u;
|
|
static constexpr unsigned ihxPage = 0x10000u;
|
|
FIFO<char, MaxStrLen> ring;
|
|
IntelHex ihx;
|
|
char strbuf[MaxStrLen];
|
|
char line [MaxStrLen];
|
|
unsigned line_len, line_index;
|
|
unsigned begin_addr;
|
|
unsigned file_len;
|
|
uint8_t * file_pool;
|
|
uint8_t * memory_pool;
|
|
public:
|
|
explicit Programmer ();
|
|
virtual ~Programmer ();
|
|
uint32_t Up (const char * data, const uint32_t len) override;
|
|
void Flush ();
|
|
|
|
void read_flash_binary (const char * name, const unsigned blen = 16u);
|
|
void verify_flash_binary (const char * name);
|
|
void write_flash_binary (const char * name);
|
|
protected:
|
|
bool open_file_for_read (const char * name);
|
|
void SendString (const char * ptr, const uint32_t len);
|
|
bool GetLine ();
|
|
void ParseLine ();
|
|
void StartOperation (const unsigned addr);
|
|
void AcquireDataRecord ();
|
|
void AcquireReqRecord ();
|
|
|
|
void Erase (const unsigned n);
|
|
void read_flash (const unsigned len);
|
|
void erase_blocks (const unsigned blocks);
|
|
};
|
|
|
|
#endif // PROGRAMMER_H
|