#ifndef HELPERS_H #define HELPERS_H #include #include "norflash.h" #include "fifo.h" #include "baselayer.h" class MemoryBase { NorFlash flash; public: explicit MemoryBase () noexcept : flash() {} uint32_t Write (const uint32_t addr, const void * ptr, const uint32_t len) { return flash.WriteBlock(addr, reinterpret_cast(ptr), len); } uint32_t Read (const uint32_t addr, void * ptr, const uint32_t len) { return flash.ReadBlock(addr, reinterpret_cast (ptr), len); } void Erase (const uint32_t blok) { /* Flash používá 24-bitovou adresu počátku bloku, zde máme k dispozici * jen 16-bitový offset. Takže to jen natáhneme 256 krát. Software * tomu musí odpovídat. * */ flash.EraseSector(blok << 8); } }; class CdcCmd : public BaseLayer { static constexpr int maxlen = 0x80; FIFO ring; char line [maxlen]; unsigned index; public: explicit CdcCmd () noexcept : BaseLayer(), ring(), index(0u) {} uint32_t Up(const char * data, const uint32_t len) override { for (unsigned n=0u; n 0x20u ? 0x20u : res; const unsigned n = Down (ptr + ofs, chunk); ofs += n; res -= n; } } char * GetLine (unsigned & len) { char c; while (ring.Read(c)) { line [index++] = c; if (c == '\n') { len = index; index = 0u; return line; } } len = 0u; return line; } }; #endif // HELPERS_H