don't respond to broadcast SET PIDs
This commit is contained in:
parent
75b4b13997
commit
ef0f38f8ad
@ -61,6 +61,7 @@ struct Message
|
||||
bool checksum_fail : 1;
|
||||
bool incorrect_sc : 1;
|
||||
bool incorrect_sub_sc: 1;
|
||||
bool do_no_send : 1;
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user