#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 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