Implementation of 1-Wire with added Alarm Search Functionality

Dependents:   Max32630_One_Wire_Interface

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);