RISC-V/V203F6P6/programmer/software/programmer.h
2025-02-04 16:32:08 +01:00

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