mirror of https://github.com/openXC7/prjxray.git
34 lines
939 B
C
34 lines
939 B
C
|
|
#ifndef ECC_H_
|
||
|
|
#define ECC_H_
|
||
|
|
|
||
|
|
#include <cstdint>
|
||
|
|
#include <string>
|
||
|
|
#include <unordered_map>
|
||
|
|
#include <vector>
|
||
|
|
|
||
|
|
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<uint32_t>& data) const;
|
||
|
|
|
||
|
|
private:
|
||
|
|
const std::string architecture_;
|
||
|
|
const size_t frame_words_;
|
||
|
|
const size_t ecc_word_;
|
||
|
|
static const std::unordered_map<std::string, size_t>
|
||
|
|
ecc_word_per_architecture;
|
||
|
|
|
||
|
|
uint64_t CalculateECC(const std::vector<uint32_t>& 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_
|