#ifndef ECC_H_ #define ECC_H_ #include #include #include #include class ECC { public: ECC(const std::string& architecture, size_t words_per_frame) : architecture_(architecture), frame_words_(words_per_frame), ecc_word_(ecc_word_per_architecture.at(architecture)) {} void UpdateFrameECC(std::vector& data) const; private: const std::string architecture_; const size_t frame_words_; const size_t ecc_word_; static const std::unordered_map ecc_word_per_architecture; uint64_t CalculateECC(const std::vector& words) const; uint64_t GetUSEccFrameOffset(int word, int bit) const; uint32_t GetSeries7WordEcc(uint32_t idx, uint32_t data, uint32_t ecc) const; uint64_t GetUSWordEcc(uint32_t idx, uint32_t data, uint64_t ecc) const; }; #endif // ECC_H_