mirror of https://github.com/arendst/Tasmota.git
Update LQI on ZDO messages
This commit is contained in:
parent
1733b4c772
commit
f8ab917688
|
@ -647,12 +647,14 @@ void Z_Devices::setReachable(uint16_t shortaddr, bool reachable) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Z_Devices::setLQI(uint16_t shortaddr, uint8_t lqi) {
|
void Z_Devices::setLQI(uint16_t shortaddr, uint8_t lqi) {
|
||||||
|
if (shortaddr == localShortAddr) { return; }
|
||||||
Z_Device & device = getShortAddr(shortaddr);
|
Z_Device & device = getShortAddr(shortaddr);
|
||||||
if (&device == nullptr) { return; } // don't crash if not found
|
if (&device == nullptr) { return; } // don't crash if not found
|
||||||
device.linkquality = lqi;
|
device.linkquality = lqi;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t Z_Devices::getLQI(uint16_t shortaddr) const {
|
uint8_t Z_Devices::getLQI(uint16_t shortaddr) const {
|
||||||
|
if (shortaddr == localShortAddr) { return 0xFF; }
|
||||||
int32_t found = findShortAddr(shortaddr);
|
int32_t found = findShortAddr(shortaddr);
|
||||||
if (found >= 0) {
|
if (found >= 0) {
|
||||||
const Z_Device & device = devicesAt(found);
|
const Z_Device & device = devicesAt(found);
|
||||||
|
|
|
@ -1152,7 +1152,6 @@ int32_t EZ_IncomingMessage(int32_t res, const class SBuffer &buf) {
|
||||||
bool securityuse = (apsoptions & EMBER_APS_OPTION_ENCRYPTION) ? true : false;
|
bool securityuse = (apsoptions & EMBER_APS_OPTION_ENCRYPTION) ? true : false;
|
||||||
uint16_t groupid = buf.get16(11);
|
uint16_t groupid = buf.get16(11);
|
||||||
uint8_t seqnumber = buf.get8(13);
|
uint8_t seqnumber = buf.get8(13);
|
||||||
// uint8_t linkquality = buf.get8(14);
|
|
||||||
int8_t linkrssi = buf.get8(15);
|
int8_t linkrssi = buf.get8(15);
|
||||||
uint8_t linkquality = ZNP_RSSI2Lqi(linkrssi); // don't take EZSP LQI but calculate our own based on ZNP
|
uint8_t linkquality = ZNP_RSSI2Lqi(linkrssi); // don't take EZSP LQI but calculate our own based on ZNP
|
||||||
uint16_t srcaddr = buf.get16(16);
|
uint16_t srcaddr = buf.get16(16);
|
||||||
|
@ -1163,6 +1162,8 @@ int32_t EZ_IncomingMessage(int32_t res, const class SBuffer &buf) {
|
||||||
|
|
||||||
if ((0x0000 == profileid) && (0x00 == srcendpoint)) {
|
if ((0x0000 == profileid) && (0x00 == srcendpoint)) {
|
||||||
// ZDO request
|
// ZDO request
|
||||||
|
// Report LQI
|
||||||
|
zigbee_devices.setLQI(srcaddr, linkquality);
|
||||||
// Since ZDO messages start with a sequence number, we skip it
|
// Since ZDO messages start with a sequence number, we skip it
|
||||||
// but we add the source address in the last 2 bytes
|
// but we add the source address in the last 2 bytes
|
||||||
SBuffer zdo_buf(buf.get8(20) - 1 + 2);
|
SBuffer zdo_buf(buf.get8(20) - 1 + 2);
|
||||||
|
|
Loading…
Reference in New Issue