Extended MaximInterface

Dependents:   mbed_DS28EC20_GPIO

Revision:
6:a8c83a2e6fa4
Parent:
0:f77ad7f72d04
Child:
7:471901a04573
--- a/Devices/DS2431.cpp	Fri Jan 19 10:25:02 2018 -0600
+++ b/Devices/DS2431.cpp	Wed Jan 23 13:11:04 2019 -0600
@@ -37,20 +37,13 @@
 
 namespace MaximInterface {
 
-enum Command {
-  WriteScratchpad = 0x0F,
-  ReadScratchpad = 0xAA,
-  CopyScratchpad = 0x55,
-  ReadMemory = 0xF0
-};
-
 error_code writeMemory(DS2431 & device, DS2431::Address targetAddress,
-                       const DS2431::Scratchpad & data) {
+                       DS2431::Scratchpad::const_span data) {
   error_code result = device.writeScratchpad(targetAddress, data);
   if (result) {
     return result;
   }
-  DS2431::Scratchpad readData;
+  DS2431::Scratchpad::array readData;
   uint_least8_t esByte;
   result = device.readScratchpad(readData, esByte);
   if (result) {
@@ -60,38 +53,35 @@
   return result;
 }
 
-error_code DS2431::readMemory(Address beginAddress, uint_least8_t * data,
-                              size_t dataLen) const {
+error_code DS2431::readMemory(Address beginAddress,
+                              span<uint_least8_t> data) const {  
   error_code owmResult = selectRom(*master);
   if (owmResult) {
     return owmResult;
   }
-  const uint_least8_t sendBlock[] = {ReadMemory, beginAddress, 0x00};
-  owmResult =
-      master->writeBlock(sendBlock, sizeof(sendBlock) / sizeof(sendBlock[0]));
+  const uint_least8_t sendBlock[] = {0xF0, beginAddress, 0x00};
+  owmResult = master->writeBlock(sendBlock);
   if (owmResult) {
     return owmResult;
   }
-  owmResult = master->readBlock(data, dataLen);
+  owmResult = master->readBlock(data);
   return owmResult;
 }
 
 error_code DS2431::writeScratchpad(Address targetAddress,
-                                   const Scratchpad & data) {
+                                   Scratchpad::const_span data) {  
   error_code owmResult = selectRom(*master);
   if (owmResult) {
     return owmResult;
   }
-  array<uint_least8_t, 3 + Scratchpad::csize> block = {WriteScratchpad,
-                                                       targetAddress, 0x00};
-  std::copy(data.begin(), data.end(), block.begin() + 3);
-  owmResult = master->writeBlock(block.data(), block.size());
+  uint_least8_t block[3 + Scratchpad::size] = {0x0F, targetAddress, 0x00};
+  std::copy(data.begin(), data.end(), block + 3);
+  owmResult = master->writeBlock(block);
   if (owmResult) {
     return owmResult;
   }
-  const uint_fast16_t calculatedCrc =
-      calculateCrc16(block.data(), block.size()) ^ 0xFFFFU;
-  owmResult = master->readBlock(block.data(), 2);
+  const uint_fast16_t calculatedCrc = calculateCrc16(block) ^ 0xFFFFU;
+  owmResult = master->readBlock(make_span(block, 2));
   if (owmResult) {
     return owmResult;
   }
@@ -102,19 +92,20 @@
   return owmResult;
 }
 
-error_code DS2431::readScratchpad(Scratchpad & data, uint_least8_t & esByte) {
-  typedef array<uint_least8_t, 6 + Scratchpad::csize> Block;
+error_code DS2431::readScratchpad(Scratchpad::span data,
+                                  uint_least8_t & esByte) {
+  typedef array<uint_least8_t, 6 + Scratchpad::size> Block;
 
   error_code owmResult = selectRom(*master);
   if (owmResult) {
     return owmResult;
   }
-  Block block = {ReadScratchpad};
+  Block block = {0xAA};
   owmResult = master->writeByte(block.front());
   if (owmResult) {
     return owmResult;
   }
-  owmResult = master->readBlock(block.data() + 1, block.size() - 1);
+  owmResult = master->readBlock(make_span(block.data() + 1, block.size() - 1));
   if (owmResult) {
     return owmResult;
   }
@@ -122,7 +113,7 @@
   uint_fast16_t receivedCrc = static_cast<uint_fast16_t>(*(--blockIt)) << 8;
   receivedCrc |= *(--blockIt);
   const uint_fast16_t expectedCrc =
-      calculateCrc16(block.data(), block.size() - 2) ^ 0xFFFFU;
+      calculateCrc16(make_span(block.data(), block.size() - 2)) ^ 0xFFFFU;
   if (expectedCrc == receivedCrc) {
     Block::const_iterator blockItEnd = blockIt;
     blockIt -= data.size();
@@ -134,13 +125,13 @@
   return owmResult;
 }
 
-error_code DS2431::copyScratchpad(Address targetAddress, uint_least8_t esByte) {
+error_code DS2431::copyScratchpad(Address targetAddress, uint_least8_t esByte) {  
   error_code owmResult = selectRom(*master);
   if (owmResult) {
     return owmResult;
   }
-  uint_least8_t block[] = {CopyScratchpad, targetAddress, 0x00};
-  owmResult = master->writeBlock(block, sizeof(block) / sizeof(block[0]));
+  uint_least8_t block[] = {0x55, targetAddress, 0x00};
+  owmResult = master->writeBlock(block);
   if (owmResult) {
     return owmResult;
   }
@@ -148,7 +139,7 @@
   if (owmResult) {
     return owmResult;
   }
-  (*sleep)(10);
+  sleep->invoke(10);
   owmResult = master->setLevel(OneWireMaster::NormalLevel);
   if (owmResult) {
     return owmResult;