private void setCadence(Sensor.SensorDataSet.Builder sds, byte[] buffer) { // Device Firmware ID, Firmware Version, Hardware ID, Hardware Version // 0x1A00316550003162 produces erroneous values for Cadence and needs // a workaround based on the stride counter. // Firmware values range from field 3 to 10 (inclusive) of the byte buffer. byte[] hardwareFirmwareId = ApiAdapterFactory.getApiAdapter().copyByteArray(buffer, 3, 11); Sensor.SensorData.Builder cadence = Sensor.SensorData.newBuilder(); if (Arrays.equals(hardwareFirmwareId, CADENCE_BUG_FW_ID)) { if (strideReadings == null) { strideReadings = new StrideReadings(); } strideReadings.updateStrideReading(buffer[54] & 0xFF); if (strideReadings.getCadence() != StrideReadings.CADENCE_NOT_AVAILABLE) { cadence.setValue(strideReadings.getCadence()).setState(Sensor.SensorState.SENDING); } } else { cadence .setValue(SensorUtils.unsignedShortToIntLittleEndian(buffer, 56) / 16) .setState(Sensor.SensorState.SENDING); } sds.setCadence(cadence); }