1. if (rssi == 99 || ber != 99) { return -1; } this is a bug, as datasheet show, value 99 means 'not known or not detectable', so it should been fixed as below: if (rssi == 99 || ber == 99) { return -1; }