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 checksum_fail : 1;
bool incorrect_sc : 1; bool incorrect_sc : 1;
bool incorrect_sub_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; break;
default: default:
delete response; delete response;
response = nullptr; return;
break;
} }
if (response) if (!response)
queued_messages_.push(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); Message * rsp = new Message(*response);
rsp->subDevice = num; rsp->subDevice = num;
dev->set(message, rsp); dev->set(message, rsp);
queued_messages_.push(rsp); if (message->destination.isBroadcast())
delete rsp;
else
queued_messages_.push(rsp);
} }
delete response; response->do_no_send = true;
response = nullptr;
return; return;
} }

View File

@ -36,6 +36,9 @@ struct UID {
uint32_t device; 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) friend bool operator== (const UID& a, const UID& b)
{ {
if (a.uid == BROADCAST_ALL_DEVICES_ID || b.uid == BROADCAST_ALL_DEVICES_ID) if (a.uid == BROADCAST_ALL_DEVICES_ID || b.uid == BROADCAST_ALL_DEVICES_ID)