Skip to content

AltBeacon is detected as iBeacon #32

@micolous

Description

@micolous

Steps to reproduce

  1. Get in proximity of an AltBeacon (or simulate one).
  2. Scan for beacons.

Expected behaviour

Beacon is reported as an AltBeacon.

Actual behaviour

Beacon is detected as an iBeacon. The decoded values (UUID, major, minor) appear to be otherwise correct.

Other details

It looks like the issue is here:

@Override
public boolean isEddystone() {
return (getBeaconTypeCode() == TYPE_EDDYSTONE_UID)
|| (getBeaconTypeCode() == TYPE_EDDYSTONE_URL) || (getBeaconTypeCode() == TYPE_EDDYSTONE_TLM);
}
@Override
public BeaconType getBeaconType() {
if (isEddystone()) {
switch (getBeaconTypeCode()) {
case TYPE_IBEACON_ALTBEACON:
return BeaconType.ALTBEACON;
case TYPE_EDDYSTONE_TLM:
return BeaconType.EDDYSTONE_TLM;
case TYPE_EDDYSTONE_UID:
return BeaconType.EDDYSTONE_UID;
case TYPE_EDDYSTONE_URL:
return BeaconType.EDDYSTONE_URL;
default:
return BeaconType.EDDYSTONE;
}
}
return BeaconType.IBEACON;
}

TYPE_IBEACON_ALTBEACON is only tested in a switch statement if isEddystone() == true. But the tests in isEddystone already exclude TYPE_IBEACON_ALTBEACON.

Looking at the upstream matcher (m:2-3=beac), to test for AltBeacon you'd need to look for getBeaconTypeCode() == 0xBEAC.

Version tested

Version 1.2.2 (F-Droid)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions