diff --git a/android_app/app/src/main/java/com/health/openscale/core/bluetooth/BluetoothYunmaiSE_Mini.java b/android_app/app/src/main/java/com/health/openscale/core/bluetooth/BluetoothYunmaiSE_Mini.java index 84531228..23b3d202 100644 --- a/android_app/app/src/main/java/com/health/openscale/core/bluetooth/BluetoothYunmaiSE_Mini.java +++ b/android_app/app/src/main/java/com/health/openscale/core/bluetooth/BluetoothYunmaiSE_Mini.java @@ -55,20 +55,26 @@ public class BluetoothYunmaiSE_Mini extends BluetoothCommunication { boolean nextInitCmd(int stateNr) { switch (stateNr) { case 0: - int user_id = getUniqueNumber(); + byte[] userId = Converters.toUnsignedInt16Be(getUniqueNumber()); final ScaleUser selectedUser = OpenScale.getInstance(context).getSelectedScaleUser(); byte sex = selectedUser.getGender().isMale() ? (byte)0x01 : (byte)0x02; byte display_unit = selectedUser.getScaleUnit() == Converters.WeightUnit.KG ? (byte) 0x01 : (byte) 0x02; - byte[] user_add_or_query = new byte[]{(byte)0x0d, (byte)0x12, (byte)0x10, (byte)0x01, (byte)0x00, (byte) 0x00, (byte) ((user_id & 0xFF00) >> 8), (byte) ((user_id & 0xFF) >> 0), (byte)selectedUser.getBodyHeight(), (byte)sex, (byte) selectedUser.getAge(new Date()), (byte) 0x55, (byte) 0x5a, (byte) 0x00, (byte)0x00, (byte) display_unit, (byte) 0x03, (byte) 0x00 }; + byte[] user_add_or_query = new byte[]{ + (byte) 0x0d, (byte) 0x12, (byte) 0x10, (byte) 0x01, (byte) 0x00, (byte) 0x00, + userId[0], userId[1], (byte) selectedUser.getBodyHeight(), sex, + (byte) selectedUser.getAge(new Date()), (byte) 0x55, (byte) 0x5a, (byte) 0x00, + (byte)0x00, display_unit, (byte) 0x03, (byte) 0x00}; user_add_or_query[17] = xor_checksum(user_add_or_query); writeBytes(WEIGHT_CMD_SERVICE, WEIGHT_CMD_CHARACTERISTIC, user_add_or_query); break; case 1: - long unix_time = new Date().getTime() / 1000; + byte[] unixTime = Converters.toUnsignedInt32Be(new Date().getTime() / 1000); - byte[] set_time = new byte[]{(byte)0x0d, (byte) 0x0d, (byte) 0x11, (byte)((unix_time & 0xFF000000) >> 32), (byte)((unix_time & 0xFF0000) >> 16), (byte)((unix_time & 0xFF00) >> 8), (byte)((unix_time & 0xFF) >> 0), (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00}; + byte[] set_time = new byte[]{(byte)0x0d, (byte) 0x0d, (byte) 0x11, + unixTime[0], unixTime[1], unixTime[2], unixTime[3], + (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00}; set_time[12] = xor_checksum(set_time); writeBytes(WEIGHT_CMD_SERVICE, WEIGHT_CMD_CHARACTERISTIC, set_time); @@ -111,21 +117,18 @@ public class BluetoothYunmaiSE_Mini extends BluetoothCommunication { } private void parseBytes(byte[] weightBytes) { - long unix_timestamp = ((weightBytes[5] & 0xFF) << 24) | ((weightBytes[6] & 0xFF) << 16) | ((weightBytes[7] & 0xFF) << 8) | (weightBytes[8] & 0xFF); - Date btDate = new Date(); - btDate.setTime(unix_timestamp*1000); - - float weight = (float) (((weightBytes[13] & 0xFF) << 8) | (weightBytes[14] & 0xFF)) / 100.0f; + final ScaleUser selectedUser = OpenScale.getInstance(context).getSelectedScaleUser(); ScaleMeasurement scaleBtData = new ScaleMeasurement(); - final ScaleUser selectedUser = OpenScale.getInstance(context).getSelectedScaleUser(); + long timestamp = Converters.fromUnsignedInt32Be(weightBytes, 5) * 1000; + scaleBtData.setDateTime(new Date(timestamp)); + float weight = Converters.fromUnsignedInt16Be(weightBytes, 13) / 100.0f; scaleBtData.setConvertedWeight(weight, selectedUser.getScaleUnit()); - scaleBtData.setDateTime(btDate); if (isMini) { - float fat = (float)(((weightBytes[17] & 0xFF) << 8) | (weightBytes[18] & 0xFF)) / 100.0f; + float fat = Converters.fromUnsignedInt16Be(weightBytes, 17) / 100.0f; scaleBtData.setFat(fat); }