Implementation of 1-Wire with added Alarm Search Functionality
Dependents: Max32630_One_Wire_Interface
Diff: OneWire_Memory/Authenticators/DS28E15_22_25/DS28E15_22_25.hpp
- Revision:
- 33:a4c015046956
- Parent:
- 27:d5aaefa252f1
- Child:
- 34:11fffbe98ef9
--- a/OneWire_Memory/Authenticators/DS28E15_22_25/DS28E15_22_25.hpp Wed Mar 30 16:50:29 2016 -0500 +++ b/OneWire_Memory/Authenticators/DS28E15_22_25/DS28E15_22_25.hpp Thu Mar 31 11:56:01 2016 -0500 @@ -26,6 +26,7 @@ #ifndef DS28E15_22_25_H #define DS28E15_22_25_H +#include "array.hpp" #include "OneWire_Masters/ISha256MacCoprocessor.hpp" #include "OneWireSlave.hpp" @@ -58,51 +59,51 @@ UNKNOWN_BLOCKS = 0 }; - static const std::size_t pageSize = 32; - static const std::size_t scratchpadSize = 32; - static const std::size_t macLen = 32; - - static const std::size_t segmentSize = 4; - static const std::size_t manIdLen = 2; + typedef array<std::uint8_t, 32> Page; + typedef array<std::uint8_t, 32> Scratchpad; + typedef array<std::uint8_t, 32> Mac; + typedef array<std::uint8_t, 4> Segment; + typedef array<std::uint8_t, 2> ManId; - std::uint8_t manId[manIdLen]; + // Manufacturer ID + ManId manId; static ISha256MacCoprocessor::CmdResult CalculateSegmentWriteMAC256(const ISha256MacCoprocessor & MacCoproc, unsigned int pageNum, unsigned int segmentNum, - const std::uint8_t (&newData)[segmentSize], - const std::uint8_t (&oldData)[segmentSize], + const Segment & newData, + const Segment & oldData, const RomId & romId, - const std::uint8_t (&manId)[manIdLen], - std::uint8_t (&mac)[macLen]); + const ManId & manId, + Mac & mac); static ISha256MacCoprocessor::CmdResult CalculateProtectionWriteMAC256(const ISha256MacCoprocessor & MacCoproc, std::uint8_t newProtection, std::uint8_t oldProtection, const RomId & romId, - const std::uint8_t (&manId)[manIdLen], - std::uint8_t (&mac)[macLen]); + const ManId & manId, + Mac & mac); static ISha256MacCoprocessor::CmdResult CalculateNextSecret(ISha256MacCoprocessor & MacCoproc, - const std::uint8_t (&binding)[pageSize], - const std::uint8_t (&partial)[scratchpadSize], + const Page & binding, + const Scratchpad & partial, const RomId & romId, - const std::uint8_t (&manId)[manIdLen], + const ManId & manId, unsigned int pageNum); static ISha256MacCoprocessor::CmdResult CalculateAuthMAC256(const ISha256MacCoprocessor & MacCoproc, unsigned int pageNum, - const std::uint8_t (&challenge)[scratchpadSize], - const std::uint8_t (&pageData)[pageSize], + const Scratchpad & challenge, + const Page & pageData, const RomId & romId, - const std::uint8_t (&manId)[manIdLen], + const ManId & manId, bool anon, - std::uint8_t (&mac)[macLen]); + Mac & mac); static ISha256MacCoprocessor::CmdResult AuthVerify(const ISha256MacCoprocessor & MacCoproc, unsigned int pageNum, - const std::uint8_t (&challenge)[scratchpadSize], - const std::uint8_t (&pageData)[pageSize], + const Scratchpad & challenge, + const Page & pageData, const RomId & romId, - const std::uint8_t (&manId)[manIdLen], + const ManId & manId, bool anon, - const std::uint8_t (&mac)[macLen]); + const Mac & mac); DS28E15_22_25(OneWireMaster & OW_master); @@ -114,12 +115,12 @@ //DS28Exx Specific Functions (DS28E15, DS28E22 & DS28E25) CmdResult LoadSecret(bool lock); - CmdResult WriteScratchpad(const std::uint8_t (&data)[scratchpadSize]) const; - CmdResult readSegment(unsigned int pageNum, unsigned int segmentNum, std::uint8_t (&data)[segmentSize]) const; - CmdResult writeSegment(unsigned int pageNum, unsigned int segmentNum, const std::uint8_t (&data)[segmentSize], bool continuing); - CmdResult readPage(unsigned int pageNum, std::uint8_t (&rdbuf)[pageSize], bool continuing) const; + CmdResult WriteScratchpad(const Scratchpad & data) const; + CmdResult readSegment(unsigned int pageNum, unsigned int segmentNum, Segment & data) const; + CmdResult writeSegment(unsigned int pageNum, unsigned int segmentNum, const Segment & data, bool continuing); + CmdResult readPage(unsigned int pageNum, Page & rdbuf, bool continuing) const; CmdResult ComputeSecret(unsigned int pageNum, bool lock); - CmdResult ComputeReadPageMAC(unsigned int pageNum, bool anon, std::uint8_t (&mac)[macLen]) const; + CmdResult ComputeReadPageMAC(unsigned int pageNum, bool anon, Mac & mac) const; CmdResult WriteBlockProtection(std::uint8_t protection, bool continuing); CmdResult WriteAuthBlockProtection(const ISha256MacCoprocessor & MacCoproc, std::uint8_t newProtection, @@ -128,13 +129,13 @@ CmdResult writeAuthSegment(const ISha256MacCoprocessor & MacCoproc, unsigned int pageNum, unsigned int segmentNum, - const std::uint8_t (&newData)[segmentSize], - const std::uint8_t (&oldData)[segmentSize], + const Segment & newData, + const Segment & oldData, bool continuing); CmdResult writeAuthSegmentMAC(unsigned int pageNum, unsigned int segmentNum, - const std::uint8_t (&newData)[segmentSize], - const std::uint8_t (&mac)[macLen], + const Segment & newData, + const Mac & mac, bool continuing); CmdResult ReadBlockProtectionStatus(unsigned int blockNum, std::uint8_t & status);