@Override public boolean isValid(byte[] buffer) { // Check STX (Start of Text), ETX (End of Text) and CRC Checksum return buffer.length > ZEPHYR_HXM_BYTE_ETX && buffer[ZEPHYR_HXM_BYTE_STX] == 0x02 && buffer[ZEPHYR_HXM_BYTE_ETX] == 0x03 && SensorUtils.getCrc8(buffer, 3, 55) == buffer[ZEPHYR_HXM_BYTE_CRC]; }
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); }