Browse Source

add conditional search command (0xEC)

timer1
ntruchsess 8 years ago
parent
commit
13ff131110
  1. 21
      OneWireSlave.cpp
  2. 3
      OneWireSlave.h

21
OneWireSlave.cpp

@ -47,6 +47,7 @@ byte OneWireSlave::searchRomBytePos_;
byte OneWireSlave::searchRomBitPos_;
bool OneWireSlave::searchRomInverse_;
bool OneWireSlave::resumeCommandFlag_;
bool OneWireSlave::alarmedFlag_;
const byte* OneWireSlave::sendBuffer_;
byte* OneWireSlave::recvBuffer_;
@ -79,6 +80,7 @@ void OneWireSlave::begin(const byte* rom, byte pinNumber)
rom_[7] = crc8(rom_, 7);
resumeCommandFlag_ = false;
alarmedFlag_ = false;
clientReceiveBitCallback_ = 0;
@ -149,6 +151,11 @@ void OneWireSlave::stopWrite()
write(0, 0, 0);
}
void OneWireSlave::alarmed(bool value)
{
alarmedFlag_ = value;
}
byte OneWireSlave::crc8(const byte* data, short numBytes)
{
byte crc = 0;
@ -410,12 +417,26 @@ void OneWireSlave::onBitReceived_(bool bit, bool error)
switch (receivingByte_)
{
case 0xF0: // SEARCH ROM
resumeCommandFlag_ = false;
beginSearchRom_();
return;
case 0xEC: // CONDITIONAL SEARCH ROM
resumeCommandFlag_ = false;
if (alarmedFlag_)
{
beginSearchRom_();
}
else
{
beginWaitReset_();
}
return;
case 0x33: // READ ROM
resumeCommandFlag_ = false;
beginWriteBytes_(rom_, 8, &OneWireSlave::noOpCallback_);
return;
case 0x55: // MATCH ROM
resumeCommandFlag_ = false;
beginReceiveBytes_(scratchpad_, 8, &OneWireSlave::matchRomBytesReceived_);
return;
case 0xCC: // SKIP ROM

3
OneWireSlave.h

@ -35,6 +35,8 @@ public:
//! Cancels any pending write operation, started by writeBit or write. If this function is called before the master asked for a bit, then nothing is sent to the master.
void stopWrite();
void alarmed(bool value);
static byte crc8(const byte* data, short numBytes);
private:
@ -103,6 +105,7 @@ private:
static byte searchRomBitPos_;
static bool searchRomInverse_;
static bool resumeCommandFlag_;
static bool alarmedFlag_;
static const byte* sendBuffer_;
static byte* recvBuffer_;

Loading…
Cancel
Save