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 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;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -170,12 +170,30 @@ void Responder::receive(const Message *message)
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
delete response;
|
delete response;
|
||||||
response = nullptr;
|
return;
|
||||||
break;
|
}
|
||||||
|
|
||||||
|
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (response)
|
|
||||||
queued_messages_.push(response);
|
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);
|
||||||
|
if (message->destination.isBroadcast())
|
||||||
|
delete rsp;
|
||||||
|
else
|
||||||
queued_messages_.push(rsp);
|
queued_messages_.push(rsp);
|
||||||
}
|
}
|
||||||
delete response;
|
response->do_no_send = true;
|
||||||
response = nullptr;
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user