1
0
mirror of https://codeberg.org/Freeyourgadget/Gadgetbridge synced 2024-07-09 23:21:34 +02:00
Gadgetbridge/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/makibeshr3/MakibesHR3Constants.java
2022-03-30 22:01:08 +02:00

339 lines
11 KiB
Java

/* Copyright (C) 2019-2021 Andreas Shimokawa, Cre3per
This file is part of Gadgetbridge.
Gadgetbridge is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Gadgetbridge is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
package nodomain.freeyourgadget.gadgetbridge.devices.makibeshr3;
import java.util.UUID;
public final class MakibesHR3Constants {
public static final UUID UUID_SERVICE = UUID.fromString("6e400001-b5a3-f393-e0a9-e50e24dcca9e");
public static final UUID UUID_CHARACTERISTIC_CONTROL = UUID.fromString("6e400002-b5a3-f393-e0a9-e50e24dcca9e");
public static final UUID UUID_CHARACTERISTIC_REPORT = UUID.fromString("6e400003-b5a3-f393-e0a9-e50e24dcca9e");
// Services and Characteristics
// 00001801-0000-1000-8000-00805f9b34fb
// 00002a05-0000-1000-8000-00805f9b34fb
// 00001800-0000-1000-8000-00805f9b34fb
// 00002a00-0000-1000-8000-00805f9b34fb
// 00002a01-0000-1000-8000-00805f9b34fb
// 00002a02-0000-1000-8000-00805f9b34fb
// 00002a04-0000-1000-8000-00805f9b34fb
// 00002aa6-0000-1000-8000-00805f9b34fb
// 6e400001-b5a3-f393-e0a9-e50e24dcca9e // Nordic UART Service
// 6e400002-b5a3-f393-e0a9-e50e24dcca9e // control (RX)
// 6e400003-b5a3-f393-e0a9-e50e24dcca9e // report
// 0000fee7-0000-1000-8000-00805f9b34fb
// 0000fec9-0000-1000-8000-00805f9b34fb
// 0000fea1-0000-1000-8000-00805f9b34fb
// 0000fea2-0000-1000-8000-00805f9b34fb
// Command structure
// ab 00 [argument_count] ff [command] 80 [arguments]
// where [argument_count] is [arguments].length + 3
// 80 might by different.
public static final byte[] DATA_TEMPLATE = {
(byte) 0xab,
(byte) 0x00,
(byte) 0, // argument_count
(byte) 0xff,
(byte) 0, // command
(byte) 0x80
// ,arguments
};
public static final int DATA_ARGUMENT_COUNT_INDEX = 2;
public static final int DATA_COMMAND_INDEX = 4;
public static final int DATA_ARGUMENTS_INDEX = 6;
// blood oxygen percentage
public static final byte[] RPRT_BLOOD_OXYGEN = new byte[]{ (byte) 0x31, (byte) 0x12 };
// blood oxygen percentage
// blood oxygen percentage
public static final byte[] RPRT_SINGLE_BLOOD_OXYGEN = new byte[]{ (byte) 0x31, (byte) 0x11 };
// steps might take up more bytes. I don't know which ones and I won't walk that much.
// Only sent after we send CMD_51
// 00 (maybe also used for steps)
// [steps hi]
// [steps lo]
// 00
// 00
// 01 (also was 0b. Maybe minutes of activity.)
// 00
// 00
// 00
// 00
// 00
public static final byte[] RPRT_FITNESS = new byte[]{ (byte) 0x51, 0x08 };
// year (+2000)
// month
// day
// hour
// minute
// heart rate
// heart rate
public static final byte[] RPRT_HEART_RATE_SAMPLE = new byte[]{ (byte) 0x51, (byte) 0x11 };
// WearFit says "walking" in the step details. This is probably also in here, but
// I don't run :O
// year (+2000)
// month
// day
// hour (start of measurement. interval is 1h. Might be longer when running.)
// 00 (either used for steps or minute)
// accumulated steps (hi)
// accumulated steps (lo)
// 00
// 00
// ?? (changes whenever steps change. Ranges from 00 to 16.)
// 00
// 00
// 00
// 00
public static final byte[] RPRT_STEPS_SAMPLE = new byte[]{ (byte) 0x51, (byte) 0x20 };
// enable (00/01)
public static final byte RPRT_REVERSE_FIND_DEVICE = (byte) 0x7d;
// The proximity sensor sees air..
public static final byte ARG_HEARTRATE_NO_TARGET = (byte) 0xff;
// The hr sensor didn't find the heart rate yet.
public static final byte ARG_HEARTRATE_NO_READING = (byte) 0x00;
// heart rate
public static final byte RPRT_HEARTRATE = (byte) 0x84;
// charging (00/01)
// battery percentage (step size is 20).
public static final byte RPRT_BATTERY = (byte) 0x91;
// firmware_major
// firmware_minor
// 37
// 00
// 00
// 00
// 00
// 00
// 00
// 20
// 0e
public static final byte RPRT_SOFTWARE = (byte) 0x92;
// 00
public static final byte CMD_FACTORY_RESET = (byte) 0x23;
// enable (00/01)
public static final byte[] CMD_SET_REAL_TIME_BLOOD_OXYGEN = new byte[]{ (byte) 0x31, (byte) 0x12 };
// After disabling, the watch replies with RPRT_SINGLE_BLOOD_OXYGEN
// enable (00/01)
public static final byte[] CMD_SET_SINGLE_BLOOD_OXYGEN = new byte[]{ (byte) 0x31, (byte) 0x11 };
// device replies with
// {@link MakibesHR3Constants#RPRT_HEART_RATE_SAMPLE}
// {@link MakibesHR3Constants#RPRT_STEPS_SAMPLE} (Only if steps are non-zero)
// {@link MakibesHR3Constants#RPRT_FITNESS}
// there are also multiple 6 * 00 reports
// 00
// year (+2000) steps after
// month steps after
// day steps after
// hour steps after
// minute steps after
// year (+2000) heart rate after
// month heart rate after
// day heart rate after
// hour heart rate after
// minute heart rate after
public static final byte CMD_REQUEST_FITNESS = (byte) 0x51;
// Manually sending this doesn't yield a reply. The heart rate history is sent in response to
// CMD_CMD_REQUEST_FITNESS.
// 00
// year (+2000) (probably not current)
// month (not current!)
// day (not current!)
// hour (current)
// minute (current)
public static final byte CMD_52 = (byte) 0x52;
// vibrates 6 times
public static final byte CMD_FIND_DEVICE = (byte) 0x71;
// WearFit writes uses other sources as well. They don't do anything though.
public static final byte ARG_SEND_NOTIFICATION_SOURCE_CALL = (byte) 0x01;
public static final byte ARG_SEND_NOTIFICATION_SOURCE_STOP_CALL = (byte) 0x02;
public static final byte ARG_SEND_NOTIFICATION_SOURCE_MESSAGE = (byte) 0x03;
public static final byte ARG_SEND_NOTIFICATION_SOURCE_QQ = (byte) 0x07;
public static final byte ARG_SEND_NOTIFICATION_SOURCE_WECHAT = (byte) 0x09;
public static final byte ARG_SEND_NOTIFICATION_SOURCE_WHATSAPP = (byte) 0x0a;
public static final byte ARG_SEND_NOTIFICATION_SOURCE_LINE = (byte) 0x0e;
public static final byte ARG_SEND_NOTIFICATION_SOURCE_TWITTER = (byte) 0x0f;
public static final byte ARG_SEND_NOTIFICATION_SOURCE_FACEBOOK = (byte) 0x10;
public static final byte ARG_SEND_NOTIFICATION_SOURCE_FACEBOOK2 = (byte) 0x11;
public static final byte ARG_SEND_NOTIFICATION_SOURCE_WEIBO = (byte) 0x13;
public static final byte ARG_SEND_NOTIFICATION_SOURCE_KAKOTALK = (byte) 0x14;
// ARG_SET_NOTIFICATION_SOURCE_*
// 02 (This is 00 and 01 during connection. Doesn't seem to do anything.)
// ASCII
public static final byte CMD_SEND_NOTIFICATION = (byte) 0x72;
public static final byte ARG_SET_ALARM_REMINDER_REPEAT_WEEKDAY = (byte) 0x1F;
public static final byte ARG_SET_ALARM_REMINDER_REPEAT_EVERY_DAY = (byte) 0x7F;
public static final byte ARG_SET_ALARM_REMINDER_REPEAT_ONE_TIME = (byte) 0x80;
public static final byte ARG_SET_ALARM_REMINDER_REPEAT_MONDAY = (byte) 0x01;
public static final byte ARG_SET_ALARM_REMINDER_REPEAT_TUESDAY = (byte) 0x02;
public static final byte ARG_SET_ALARM_REMINDER_REPEAT_WEDNESDAY = (byte) 0x04;
public static final byte ARG_SET_ALARM_REMINDER_REPEAT_THURSDAY = (byte) 0x08;
public static final byte ARG_SET_ALARM_REMINDER_REPEAT_FRIDAY = (byte) 0x10;
public static final byte ARG_SET_ALARM_REMINDER_REPEAT_SATURDAY = (byte) 0x20;
public static final byte ARG_SET_ALARM_REMINDER_REPEAT_SUNDAY = (byte) 0x40;
// reminder id starting at 0
// enable (00/01)
// hour
// minute
// bit field of ARG_SET_ALARM_REMINDER_REPEAT_*
public static final byte CMD_SET_ALARM_REMINDER = (byte) 0x73;
public static final byte ARG_SET_PERSONAL_INFORMATION_UNIT_DISTANCE_MILES = (byte) 0x00;
public static final byte ARG_SET_PERSONAL_INFORMATION_UNIT_DISTANCE_KILOMETERS = (byte) 0x01;
// step length (in/cm)
// step length (in/cm)
// age (years)
// height (in/cm)
// weight (lb/kg)
// ARG_SET_PERSONAL_INFORMATION_UNIT_DISTANCE_*
// target step count (kilo)
// 5a
// 82
// 3c
// 5a
// 28
// b4
// 5d
// 64
public static final byte CMD_SET_PERSONAL_INFORMATION = (byte) 0x74;
// enable (00/01)
// start hour
// start minute
// end hour
// end minute
// 2d
public static final byte CMD_SET_SEDENTARY_REMINDER = (byte) 0x75;
// enable (00/01)
// start hour
// start minute
// end hour
// end minute
public static final byte CMD_SET_QUITE_HOURS = (byte) 0x76;
// enable (00/01)
public static final byte CMD_SET_HEADS_UP_SCREEN = (byte) 0x77;
// Looks like enable/disable.
public static final byte CMD_78 = (byte) 0x78;
// The watch enters photograph mode, but doesn't appear to send a trigger signal.
// enable (00/01)
public static final byte CMD_SET_PHOTOGRAPH_MODE = (byte) 0x79;
// enable (00/01)
public static final byte CMD_SET_LOST_REMINDER = (byte) 0x7a;
// 7b has 1 argument. Looks like enable/disable.
public static final byte ARG_SET_TIMEMODE_24H = 0x00;
public static final byte ARG_SET_TIMEMODE_12H = 0x01;
// ARG_SET_TIMEMODE_*
public static final byte CMD_SET_TIMEMODE = (byte) 0x7c;
// 14 arguments. Watch might reply with RPRT_BATTERY.
public static final byte CMD_7e = (byte) 0x7e;
// 01
// fall hour
// fall minute
// awake hour
// awake minute
public static final byte CMD_SET_SLEEP_TIME = (byte) 0x7f;
// enable (00/01)
public static final byte CMD_SET_REAL_TIME_HEART_RATE = (byte) 0x84;
// looks like enable/disable.
public static final byte CMD_85 = (byte) 0x85;
// 00
// year hi
// year lo
// month
// day
// hour
// minute
// second
public static final byte CMD_SET_DATE_TIME = (byte) 0x93;
// 3 arguments. Sent when saving personal information.
public static final byte CMD_95 = (byte) 0x95;
// looks like enable/disable.
public static final byte CMD_96 = (byte) 0x96;
// looks like enable/disable.
public static final byte CMD_e5 = (byte) 0xe5;
// If this is sent after {@link CMD_FACTORY_RESET}, it's a shutdown, not a reboot.
// Rebooting resets the watch face and wallpaper.
public static final byte CMD_REBOOT = (byte) 0xff;
}