Extended MaximInterface

Dependents:   mbed_DS28EC20_GPIO

Revision:
8:211d1b8f730c
Parent:
6:a8c83a2e6fa4
--- a/Links/OneWireMaster.cpp	Tue Jul 24 08:33:31 2018 +0000
+++ b/Links/OneWireMaster.cpp	Wed Apr 03 12:33:10 2019 +0000
@@ -35,14 +35,14 @@
 
 namespace MaximInterface {
 
+static const int maxBitNum = 7;
+
 error_code OneWireMaster::writeByteSetLevel(uint_least8_t sendByte,
                                             Level afterLevel) {
   error_code result;
-  for (int idx = 0; (idx < 8) && !result; idx++) {
-    result = writeBit(((sendByte >> idx) & 1) == 1);
-  }
-  if (!result) {
-    result = setLevel(afterLevel);
+  for (int bitNum = 0; (bitNum <= maxBitNum) && !result; ++bitNum) {
+    result = writeBitSetLevel(((sendByte >> bitNum) & 1) == 1,
+                              (bitNum == maxBitNum) ? afterLevel : NormalLevel);
   }
   return result;
 }
@@ -51,35 +51,34 @@
                                            Level afterLevel) {
   recvByte = 0;
   error_code result;
-  for (int idx = 0; idx < 8; idx++) {
+  for (int bitNum = 0; bitNum <= maxBitNum; ++bitNum) {
     bool recvBit;
-    result = readBit(recvBit);
+    result = readBitSetLevel(recvBit,
+                             (bitNum == maxBitNum) ? afterLevel : NormalLevel);
     if (result) {
       break;
     }
     if (recvBit) {
-      recvByte |= (1 << idx);
+      recvByte |= (1 << bitNum);
     }
   }
-  if (!result) {
-    result = setLevel(afterLevel);
-  }
   return result;
 }
 
-error_code OneWireMaster::writeBlock(const uint_least8_t * sendBuf,
-                                     size_t sendLen) {
+error_code OneWireMaster::writeBlock(span<const uint_least8_t> sendBuf) {
   error_code result;
-  for (size_t idx = 0; (idx < sendLen) && !result; idx++) {
-    result = writeByte(sendBuf[idx]);
+  for (span<const uint_least8_t>::index_type i = 0;
+       i < sendBuf.size() && !result; ++i) {
+    result = writeByte(sendBuf[i]);
   }
   return result;
 }
 
-error_code OneWireMaster::readBlock(uint_least8_t * recvBuf, size_t recvLen) {
+error_code OneWireMaster::readBlock(span<uint_least8_t> recvBuf) {
   error_code result;
-  for (size_t idx = 0; (idx < recvLen) && !result; idx++) {
-    result = readByte(recvBuf[idx]);
+  for (span<uint_least8_t>::index_type i = 0; i < recvBuf.size() && !result;
+       ++i) {
+    result = readByte(recvBuf[i]);
   }
   return result;
 }