MotorControlModuleSDFM_TMS3.../Projects/EFC_Application/UMLibrary/driver/chipset/PackagerADS1259Extended.hh

86 lines
2.6 KiB
C++

/*
* PackagerADS1259Extended.h
*
* Created on: 8 èþë. 2020 ã.
* Author: krugliy
*/
#ifndef UMLIBRARY_DRIVER_CHIPSET_PACKAGERADS1259EXTENDED_H_
#define UMLIBRARY_DRIVER_CHIPSET_PACKAGERADS1259EXTENDED_H_
#include <cstddef>
#include <stdint.h>
namespace driver {
namespace chipset {
struct PackagerADS1259Extended {
//Íà ñàìîì äåëå Data ïðåäñòàâëÿåò èç ñåáÿ âîò ÷òî:
struct RdataCrc {
uint32_t adc_result : 24;
uint32_t crc : 8;
static RdataCrc createRdataCrc(uint32_t data) { return { .adc_result = ((data & 0xFFul) << 16) | (data & 0xFF00ul) | ((data & 0xFF0000ul) >> 16), .crc = data >> 24 }; }
static uint16_t calcCrc(uint32_t data) { return ( data + (data >> 8) + (data >> 16) + 0x9B ) & 0xFF; }
static bool checkCrc(const RdataCrc & rdata) { return rdata.crc == calcCrc(rdata.adc_result); }
};
typedef uint32_t Data; //!<Òèï äàííûõ èñïîëüçóåìûõ ïîëüçîâàòåëåì äëÿ õðàíåíèÿ ïîëåçíîé èíôîðìàöèè.
typedef uint64_t Frame; //!<Òèï äàííûõ îòïðàâëÿåìûé è ïîëó÷àåìûé ïî ëèíèè ñâÿçè.
static const std::size_t FrameSize; //!<Ôèêñèðîâàííûé ðàçìåð (â áèòàõ) êàäðà, ïåðåäàâàåìîãî ïî ëèíèè ñâÿçè.
//!Êîäèðîâàíèå ïåðåäàâàåìûõ äàííûõ.
static Frame encode();
//!Äåêîäèðîâàíèå ïðèíÿòîãî êàäðà.
static Data decode( Frame frame );
typedef uint16_t RegAddress; //!<Òèï àäðåñà ðåãèñòðà â óñòðîéñòâå.
struct Packager {
typedef PackagerADS1259Extended::Frame Frame;
typedef PackagerADS1259Extended::Data Data;
enum : RegAddress {
RDATA = 0x12 //Read data by opcode
};
//!Óïàêîâêà äàííûõ âî ôðýéì.
Frame pack() const;
//!Ðàñïàêîâêà äàííûõ èç ôðýéìà.
Data unpack( Frame frame ) const;
};
//!Ñòðóêòóðà êîìïàíîâêè àäðåñíîãî çàãîëîâêà è ÑËÎÂÀ äàííûõ.
struct LongCommandRegisterForm {
uint16_t second_opcode_byte : 8;
uint16_t first_opcode_byte : 8;
uint16_t data;
LongCommandRegisterForm(uint16_t first_opcode, uint16_t second_opcode) : second_opcode_byte(second_opcode), first_opcode_byte(first_opcode) {}
};
//!Ñòðóêòóðà êîìïàíîâêè àäðåñíîãî çàãîëîâêà è ÑËÎÂÀ äàííûõ, äëÿ êîðîòêèõ êîìàíä.
struct ShortCommandRegisterForm {
uint16_t opcode_byte : 8;
uint32_t data;
static ShortCommandRegisterForm fromFrame(Frame frame);
ShortCommandRegisterForm(uint16_t opcode) : opcode_byte(opcode) {}
ShortCommandRegisterForm(): opcode_byte(0) {}
};
};
} /* namespace chipset */
} /* namespace driver */
#endif /* UMLIBRARY_DRIVER_CHIPSET_PACKAGERADS1259EXTENDED_HH_ */