Extended MaximInterface
Dependents: mbed_DS28EC20_GPIO
Diff: Devices/DS2431.cpp
- 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;