Library to communicate with Maxim OneWire protocol devices Modified timings and IRQ overrides
Fork of Onewire by
Diff: Onewire.cpp
- Revision:
- 2:b7ee49dbd7ef
- Parent:
- 1:8e9464e05ddf
- Child:
- 3:712bf8967b68
--- a/Onewire.cpp Sat Feb 21 17:16:16 2015 +0000 +++ b/Onewire.cpp Sat Feb 21 17:26:40 2015 +0000 @@ -1,18 +1,23 @@ #include "Onewire.h" -Onewire::Onewire(PinName oneBus):oneBus_(oneBus){ - +Onewire::Onewire(PinName oneBus):oneBus_(oneBus) +{ } -void Onewire::writeBit(int bit) { + +void Onewire::writeBit(int bit) +{ bit = bit & 0x01; - if (bit) { + if (bit) + { // Write '1' bit oneBus_.output(); oneBus_ = 0; wait_us(5); oneBus_.input(); wait_us(60); - } else { + } + else + { // Write '0' bit oneBus_.output(); oneBus_ = 0; @@ -22,7 +27,8 @@ } } -int Onewire::readBit() { +int Onewire::readBit() +{ char result; oneBus_.output(); @@ -33,22 +39,25 @@ result = oneBus_.read(); wait_us(55); return result; - } -int Onewire::init() { +int Onewire::init() +{ oneBus_.output(); oneBus_ = 0; wait_us(480); oneBus_.input(); wait_us(60); - if (oneBus_.read() == 0) { + if (oneBus_.read() == 0) + { wait(0.0001); return 1; } return 0; } -int Onewire::readByte() { + +int Onewire::readByte() +{ int result = 0; for (int loop = 0; loop < 8; loop++) { @@ -61,7 +70,9 @@ } return result; } -void Onewire::writeByte(char data) { + +void Onewire::writeByte(char data) +{ // Loop to write each bit in the byte, LS-bit first for (int loop = 0; loop < 8; loop++) { writeBit(data & 0x01); @@ -70,7 +81,9 @@ data >>= 1; } } -unsigned char Onewire::CRC(unsigned char* addr, unsigned char len) { + +unsigned char Onewire::CRC(unsigned char* addr, unsigned char len) +{ unsigned char i, j; unsigned char crc = 0; @@ -83,7 +96,6 @@ inbyte >>= 1; } } - return crc; } @@ -93,16 +105,15 @@ // void Onewire::reset_search() { - // reset the search state - _search_LastDiscrepancy = 0; - _search_LastDeviceFlag = false; - _search_LastFamilyDiscrepancy = 0; - for(int i = 7; ; i--) { - _search_ROM_NO[i] = 0; - if ( i == 0) break; - } + // reset the search state + _search_LastDiscrepancy = 0; + _search_LastDeviceFlag = false; + _search_LastFamilyDiscrepancy = 0; + for(int i = 7; i >= 0; i--) + _search_ROM_NO[i] = 0; } +// Search Copied from Arduino code // // Perform a search. If this function returns a '1' then it has // enumerated the next device and you may retrieve the ROM from the @@ -121,18 +132,12 @@ // uint8_t Onewire::search(uint8_t *newAddr) { - uint8_t id_bit_number; - uint8_t last_zero, rom_byte_number, search_result; - uint8_t id_bit, cmp_id_bit; - - unsigned char rom_byte_mask, search_direction; + uint8_t id_bit_number = 1; + uint8_t last_zero = 0, rom_byte_number = 0, search_result = 0; + uint8_t id_bit = 0, cmp_id_bit = 0; // initialize for search - id_bit_number = 1; - last_zero = 0; - rom_byte_number = 0; - rom_byte_mask = 1; - search_result = 0; + unsigned char rom_byte_mask = 1, search_direction = 0; // if the last call was not the last one if (!_search_LastDeviceFlag)