kopia lustrzana https://github.com/weetmuts/wmbusmeters
Merge branch 'master' into HenryNe-patch-cs-print
commit
866e163d3b
|
@ -218,12 +218,11 @@ void WMBusAmber::getConfiguration()
|
|||
//
|
||||
// These are just some random config settings store in non-volatile memory.
|
||||
verbose("(amb8465) config: uart %02x\n", received_payload_[2]);
|
||||
verbose("(amb8465) config: IND output enabled %02x\n", received_payload_[5+2]);
|
||||
verbose("(amb8465) config: radio Channel %02x\n", received_payload_[60+2]);
|
||||
uchar re = received_payload_[69+2];
|
||||
verbose("(amb8465) config: rssi enabled %02x\n", re);
|
||||
if (re != 0) {
|
||||
rssi_expected_ = true;
|
||||
}
|
||||
rssi_expected_ = (re != 0) ? true : false;
|
||||
verbose("(amb8465) config: mode Preselect %02x\n", received_payload_[70+2]);
|
||||
}
|
||||
|
||||
|
@ -308,21 +307,23 @@ FrameStatus WMBusAmber::checkAMB8465Frame(vector<uchar> &data,
|
|||
debug("(amb8465) not enough bytes yet for command.\n");
|
||||
return PartialFrame;
|
||||
}
|
||||
|
||||
// Only response from CMD_DATA_IND has rssi
|
||||
int rssi_len = (rssi_expected_ && data[1] == (0x80|CMD_DATA_IND)) ? 1 : 0;
|
||||
|
||||
// A command response begins with 0xff
|
||||
*msgid_out = data[1];
|
||||
payload_len = data[2];
|
||||
*payload_len_out = payload_len;
|
||||
*payload_offset = 3;
|
||||
*frame_length = 3+payload_len + (int)rssi_expected_;
|
||||
// FF CMD len payload [RSSI] CS
|
||||
*frame_length = 4 + payload_len + rssi_len;
|
||||
if (data.size() < *frame_length)
|
||||
{
|
||||
debug("(amb8465) not enough bytes yet, partial command response %d %d.\n", data.size(), *frame_length);
|
||||
return PartialFrame;
|
||||
}
|
||||
|
||||
if (rssi_expected_) {
|
||||
*rssi = data[*frame_length-1];
|
||||
}
|
||||
debug("(amb8465) received full command frame\n");
|
||||
|
||||
uchar cs = xorChecksum(data, *frame_length-1);
|
||||
|
@ -330,7 +331,13 @@ FrameStatus WMBusAmber::checkAMB8465Frame(vector<uchar> &data,
|
|||
verbose("(amb8465) checksum error %02x (should %02x)\n", data[*frame_length-1], cs);
|
||||
}
|
||||
|
||||
return FullFrame;
|
||||
if (rssi_len) {
|
||||
*rssi = data[*frame_length-2];
|
||||
signed int dbm = (*rssi >= 128) ? (*rssi - 256) / 2 - 74 : *rssi / 2 - 74;
|
||||
verbose("(amb8465) rssi %d (%d dBm)\n", *rssi, dbm);
|
||||
}
|
||||
|
||||
return FullFrame;
|
||||
}
|
||||
// If it is not a 0xff we assume it is a message beginning with a length.
|
||||
// There might be a different mode where the data is wrapped in 0xff. But for the moment
|
||||
|
@ -347,6 +354,14 @@ FrameStatus WMBusAmber::checkAMB8465Frame(vector<uchar> &data,
|
|||
}
|
||||
|
||||
debug("(amb8465) received full frame\n");
|
||||
|
||||
if (rssi_expected_)
|
||||
{
|
||||
*rssi = data[*frame_length-1];
|
||||
signed int dbm = (*rssi >= 128) ? (*rssi - 256) / 2 - 74 : *rssi / 2 - 74;
|
||||
verbose("(amb8465) rssi %d (%d dBm)\n", *rssi, dbm);
|
||||
}
|
||||
|
||||
return FullFrame;
|
||||
}
|
||||
|
||||
|
@ -392,10 +407,6 @@ void WMBusAmber::processSerialData()
|
|||
|
||||
read_buffer_.erase(read_buffer_.begin(), read_buffer_.begin()+frame_length);
|
||||
|
||||
if (rssi_expected_)
|
||||
{
|
||||
verbose("(amb8465) rssi %d\n", rssi);
|
||||
}
|
||||
handleMessage(msgid, payload);
|
||||
}
|
||||
}
|
||||
|
|
Ładowanie…
Reference in New Issue