Implementation of 1-Wire with added Alarm Search Functionality
Dependents: Max32630_One_Wire_Interface
Diff: RomId/RomCommands.cpp
- Revision:
- 139:f0e0a7976846
- Parent:
- 104:3f48daed532b
- Child:
- 142:85b71cfd617e
--- a/RomId/RomCommands.cpp Fri Dec 02 19:21:55 2016 +0000 +++ b/RomId/RomCommands.cpp Tue Dec 13 13:31:30 2016 -0800 @@ -54,13 +54,13 @@ last_discrepancy = 0; last_device_flag = false; last_family_discrepancy = 0; - romId.reset(); + romId = RomId(); } void SearchState::findFamily(uint8_t familyCode) { reset(); - romId.setFamilyCode(familyCode); + romId.familyCode() = familyCode; last_discrepancy = 64; } @@ -130,13 +130,13 @@ // read the ROM if (result == OneWireMaster::Success) { - result = master.OWReadBlock(readId, RomId::byteLen); + result = master.OWReadBlock(readId.buffer.data(), readId.buffer.size()); } // verify CRC8 if (result == OneWireMaster::Success) { - if (readId.crc8Valid()) + if (readId.valid()) { romId = readId; } @@ -148,7 +148,7 @@ return result; } - + OneWireMaster::CmdResult OWSkipRom(OneWireMaster & master) { OneWireMaster::CmdResult result; @@ -161,26 +161,26 @@ return result; } - + OneWireMaster::CmdResult OWMatchRom(OneWireMaster & master, const RomId & romId) { OneWireMaster::CmdResult result; - uint8_t buf[1 + RomId::byteLen]; + uint8_t buf[1 + RomId::Buffer::csize]; // use MatchROM result = master.OWReset(); if (result == OneWireMaster::Success) { buf[0] = MatchRomCmd; - std::memcpy(&buf[1], romId, RomId::byteLen); + std::memcpy(&buf[1], romId.buffer.data(), romId.buffer.size()); // send command and rom - result = master.OWWriteBlock(buf, 1 + RomId::byteLen); + result = master.OWWriteBlock(buf, 1 + romId.buffer.size()); } return result; } - + OneWireMaster::CmdResult OWOverdriveSkipRom(OneWireMaster & master) { OneWireMaster::CmdResult result = master.OWSetSpeed(OneWireMaster::StandardSpeed); @@ -218,12 +218,12 @@ { master.OWSetSpeed(OneWireMaster::OverdriveSpeed); // send ROM - result = master.OWWriteBlock(romId, RomId::byteLen); + result = master.OWWriteBlock(romId.buffer.data(), romId.buffer.size()); } } return result; } - + OneWireMaster::CmdResult OWResume(OneWireMaster & master) { OneWireMaster::CmdResult result; @@ -276,7 +276,7 @@ // on a previous next then pick the same as last time if (id_bit_number < searchState.last_discrepancy) { - if ((searchState.romId[rom_byte_number] & rom_byte_mask) > 0) + if ((searchState.romId.buffer[rom_byte_number] & rom_byte_mask) > 0) { search_direction = OneWireMaster::WriteOne; } @@ -327,11 +327,11 @@ // with mask rom_byte_mask if (search_direction == OneWireMaster::WriteOne) { - searchState.romId[rom_byte_number] |= rom_byte_mask; + searchState.romId.buffer[rom_byte_number] |= rom_byte_mask; } else { - searchState.romId[rom_byte_number] &= (uint8_t)~rom_byte_mask; + searchState.romId.buffer[rom_byte_number] &= (uint8_t)~rom_byte_mask; } // increment the byte counter id_bit_number @@ -342,15 +342,15 @@ // if the mask is 0 then go to new SerialNum byte rom_byte_number and reset mask if (rom_byte_mask == 0) { - crc8 = calculateCrc8(crc8, searchState.romId[rom_byte_number]); // accumulate the CRC + crc8 = calculateCrc8(crc8, searchState.romId.buffer[rom_byte_number]); // accumulate the CRC rom_byte_number++; rom_byte_mask = 1; } } - } while (rom_byte_number < RomId::byteLen); // loop until through all ROM bytes 0-7 + } while (rom_byte_number < searchState.romId.buffer.size()); // loop until through all ROM bytes 0-7 // if the search was successful then - if (!((id_bit_number <= (RomId::byteLen * 8)) || (crc8 != 0))) + if (!((id_bit_number <= (searchState.romId.buffer.size() * 8)) || (crc8 != 0))) { // search successful so set m_last_discrepancy,m_last_device_flag,search_result searchState.last_discrepancy = last_zero;