Implementation of 1-Wire with added Alarm Search Functionality

Dependents:   Max32630_One_Wire_Interface

Committer:
IanBenzMaxim
Date:
Mon May 16 10:36:30 2016 -0500
Revision:
77:529edb329ee0
Child:
78:0cbbac7f2016
Added iterators for selecting 1-Wire devices on the bus and added support iterator support to OneWireSlave class.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
IanBenzMaxim 77:529edb329ee0 1 #ifndef OneWire_RomIterator
IanBenzMaxim 77:529edb329ee0 2 #define OneWire_RomIterator
IanBenzMaxim 77:529edb329ee0 3
IanBenzMaxim 77:529edb329ee0 4 #include <stdint.h>
IanBenzMaxim 77:529edb329ee0 5 #include "Masters/OneWireMaster.h"
IanBenzMaxim 77:529edb329ee0 6
IanBenzMaxim 77:529edb329ee0 7 namespace OneWire
IanBenzMaxim 77:529edb329ee0 8 {
IanBenzMaxim 77:529edb329ee0 9 /// Controls selection of 1-Wire devices on the bus through ROM commands.
IanBenzMaxim 77:529edb329ee0 10 class RomIterator
IanBenzMaxim 77:529edb329ee0 11 {
IanBenzMaxim 77:529edb329ee0 12 private:
IanBenzMaxim 77:529edb329ee0 13 OneWireMaster & owMaster;
IanBenzMaxim 77:529edb329ee0 14
IanBenzMaxim 77:529edb329ee0 15 public:
IanBenzMaxim 77:529edb329ee0 16 /// @param master 1-Wire master to use to issue ROM commands.
IanBenzMaxim 77:529edb329ee0 17 RomIterator(OneWireMaster & master) : owMaster(master) { }
IanBenzMaxim 77:529edb329ee0 18 virtual ~RomIterator() { }
IanBenzMaxim 77:529edb329ee0 19
IanBenzMaxim 77:529edb329ee0 20 /// The 1-Wire master used to issue ROM commands.
IanBenzMaxim 77:529edb329ee0 21 OneWireMaster & master() const { return owMaster; }
IanBenzMaxim 77:529edb329ee0 22 };
IanBenzMaxim 77:529edb329ee0 23
IanBenzMaxim 77:529edb329ee0 24 /// Iterates through all 1-Wire devices in a sequential first to last order.
IanBenzMaxim 77:529edb329ee0 25 class ForwardRomIterator : public RomIterator
IanBenzMaxim 77:529edb329ee0 26 {
IanBenzMaxim 77:529edb329ee0 27 public:
IanBenzMaxim 77:529edb329ee0 28 /// @param master 1-Wire master to use to issue ROM commands.
IanBenzMaxim 77:529edb329ee0 29 ForwardRomIterator(OneWireMaster & master) : RomIterator(master) { }
IanBenzMaxim 77:529edb329ee0 30
IanBenzMaxim 77:529edb329ee0 31 /// Indicates that current device is the last.
IanBenzMaxim 77:529edb329ee0 32 virtual bool lastDevice() const = 0;
IanBenzMaxim 77:529edb329ee0 33
IanBenzMaxim 77:529edb329ee0 34 /// Select the first device in the sequence.
IanBenzMaxim 77:529edb329ee0 35 virtual OneWireMaster::CmdResult selectFirstDevice() = 0;
IanBenzMaxim 77:529edb329ee0 36
IanBenzMaxim 77:529edb329ee0 37 /// Select the next device in the sequence.
IanBenzMaxim 77:529edb329ee0 38 virtual OneWireMaster::CmdResult selectNextDevice() = 0;
IanBenzMaxim 77:529edb329ee0 39
IanBenzMaxim 77:529edb329ee0 40 /// Reselect the current device for an additional operation.
IanBenzMaxim 77:529edb329ee0 41 virtual OneWireMaster::CmdResult reselectCurrentDevice() = 0;
IanBenzMaxim 77:529edb329ee0 42 };
IanBenzMaxim 77:529edb329ee0 43
IanBenzMaxim 77:529edb329ee0 44 /// Iterates through all 1-Wire devices sequentially using the search procedure.
IanBenzMaxim 77:529edb329ee0 45 class ForwardSearchRomIterator : public ForwardRomIterator
IanBenzMaxim 77:529edb329ee0 46 {
IanBenzMaxim 77:529edb329ee0 47 protected:
IanBenzMaxim 77:529edb329ee0 48 OneWireMaster::SearchState searchState;
IanBenzMaxim 77:529edb329ee0 49
IanBenzMaxim 77:529edb329ee0 50 public:
IanBenzMaxim 77:529edb329ee0 51 /// @param master 1-Wire master to use to issue ROM commands.
IanBenzMaxim 77:529edb329ee0 52 ForwardSearchRomIterator(OneWireMaster & master) : ForwardRomIterator(master) { }
IanBenzMaxim 77:529edb329ee0 53
IanBenzMaxim 77:529edb329ee0 54 /// ROM ID of the currently selected device.
IanBenzMaxim 77:529edb329ee0 55 const RomId & selectedDevice() const { return searchState.romId; }
IanBenzMaxim 77:529edb329ee0 56
IanBenzMaxim 77:529edb329ee0 57 virtual bool lastDevice() const;
IanBenzMaxim 77:529edb329ee0 58 virtual OneWireMaster::CmdResult selectFirstDevice();
IanBenzMaxim 77:529edb329ee0 59 virtual OneWireMaster::CmdResult selectNextDevice();
IanBenzMaxim 77:529edb329ee0 60 virtual OneWireMaster::CmdResult reselectCurrentDevice();
IanBenzMaxim 77:529edb329ee0 61
IanBenzMaxim 77:529edb329ee0 62 /// Select the first device in the sequence beginning with the given family.
IanBenzMaxim 77:529edb329ee0 63 /// @param familyCode Family code to select.
IanBenzMaxim 77:529edb329ee0 64 OneWireMaster::CmdResult selectFirstDeviceInFamily(uint8_t familyCode);
IanBenzMaxim 77:529edb329ee0 65
IanBenzMaxim 77:529edb329ee0 66 /// Select the first device in the next sequential family skipping all remaining devices
IanBenzMaxim 77:529edb329ee0 67 /// in the current family.
IanBenzMaxim 77:529edb329ee0 68 OneWireMaster::CmdResult selectNextFamilyDevice();
IanBenzMaxim 77:529edb329ee0 69 };
IanBenzMaxim 77:529edb329ee0 70
IanBenzMaxim 77:529edb329ee0 71 /// Iterates though 1-Wire devices on the bus using random selection by ROM ID.
IanBenzMaxim 77:529edb329ee0 72 class RandomAccessRomIterator : public RomIterator
IanBenzMaxim 77:529edb329ee0 73 {
IanBenzMaxim 77:529edb329ee0 74 public:
IanBenzMaxim 77:529edb329ee0 75 /// @param master 1-Wire master to use to issue ROM commands.
IanBenzMaxim 77:529edb329ee0 76 RandomAccessRomIterator(OneWireMaster & master) : RomIterator(master) { }
IanBenzMaxim 77:529edb329ee0 77
IanBenzMaxim 77:529edb329ee0 78 /// Select the device with the given ROM ID.
IanBenzMaxim 77:529edb329ee0 79 virtual OneWireMaster::CmdResult selectDevice(const RomId & romId) = 0;
IanBenzMaxim 77:529edb329ee0 80 };
IanBenzMaxim 77:529edb329ee0 81
IanBenzMaxim 77:529edb329ee0 82 /// Iterator for a singledrop 1-Wire bus.
IanBenzMaxim 77:529edb329ee0 83 class SingledropRomIterator : public RandomAccessRomIterator
IanBenzMaxim 77:529edb329ee0 84 {
IanBenzMaxim 77:529edb329ee0 85 public:
IanBenzMaxim 77:529edb329ee0 86 /// @param master 1-Wire master to use to issue ROM commands.
IanBenzMaxim 77:529edb329ee0 87 SingledropRomIterator(OneWireMaster & master) : RandomAccessRomIterator(master) { }
IanBenzMaxim 77:529edb329ee0 88
IanBenzMaxim 77:529edb329ee0 89 /// Select the one and only device.
IanBenzMaxim 77:529edb329ee0 90 OneWireMaster::CmdResult selectDevice() { return master().OWSkipRom(); }
IanBenzMaxim 77:529edb329ee0 91 virtual OneWireMaster::CmdResult selectDevice(const RomId & romId);
IanBenzMaxim 77:529edb329ee0 92 };
IanBenzMaxim 77:529edb329ee0 93
IanBenzMaxim 77:529edb329ee0 94 /// Iterator for a multidrop 1-Wire bus.
IanBenzMaxim 77:529edb329ee0 95 class MultidropRomIterator : public RandomAccessRomIterator
IanBenzMaxim 77:529edb329ee0 96 {
IanBenzMaxim 77:529edb329ee0 97 protected:
IanBenzMaxim 77:529edb329ee0 98 RomId lastRom;
IanBenzMaxim 77:529edb329ee0 99
IanBenzMaxim 77:529edb329ee0 100 public:
IanBenzMaxim 77:529edb329ee0 101 /// @param master 1-Wire master to use to issue ROM commands.
IanBenzMaxim 77:529edb329ee0 102 MultidropRomIterator(OneWireMaster & master) : RandomAccessRomIterator(master) { }
IanBenzMaxim 77:529edb329ee0 103
IanBenzMaxim 77:529edb329ee0 104 virtual OneWireMaster::CmdResult selectDevice(const RomId & romId);
IanBenzMaxim 77:529edb329ee0 105 };
IanBenzMaxim 77:529edb329ee0 106 }
IanBenzMaxim 77:529edb329ee0 107
IanBenzMaxim 77:529edb329ee0 108 #endif