1
0
Fork 0

don't respond to broadcast SET PIDs

This commit is contained in:
Kevin Matz 2021-08-11 00:04:08 -04:00
parent 75b4b13997
commit ef0f38f8ad
3 changed files with 31 additions and 7 deletions

View File

@ -61,6 +61,7 @@ struct Message
bool checksum_fail : 1;
bool incorrect_sc : 1;
bool incorrect_sub_sc: 1;
bool do_no_send : 1;
};
};

View File

@ -170,12 +170,30 @@ void Responder::receive(const Message *message)
break;
default:
delete response;
response = nullptr;
break;
return;
}
if (response)
queued_messages_.push(response);
if (!response)
return;
/// 5.3 Broadcast Message Addressing
/// When Broadcast Addressing is used for non-Discovery messages, the
/// responders shall not send a response.
if (message->destination.isBroadcast() &&
message->commandClass != DISCOVERY_COMMAND)
{
delete response;
return;
}
if (response->do_no_send)
{
delete response;
return;
}
queued_messages_.push(response);
}
/**
@ -255,10 +273,12 @@ void Responder::rxSet(const Message *message, Message* response)
Message * rsp = new Message(*response);
rsp->subDevice = num;
dev->set(message, rsp);
queued_messages_.push(rsp);
if (message->destination.isBroadcast())
delete rsp;
else
queued_messages_.push(rsp);
}
delete response;
response = nullptr;
response->do_no_send = true;
return;
}

View File

@ -36,6 +36,9 @@ struct UID {
uint32_t device;
};
};
bool isBroadcast() const {
return (uid == BROADCAST_ALL_DEVICES_ID || device == ALL_DEVICE_ID_MASK);
}
friend bool operator== (const UID& a, const UID& b)
{
if (a.uid == BROADCAST_ALL_DEVICES_ID || b.uid == BROADCAST_ALL_DEVICES_ID)