List Of Commands
The format of the response to the commands
All the following commands have the same response data architecture. Here is the format of the response: B0 B1 B2 B3 B4 B5 Command code Response data CRC-8
Basically when the watch sends one of these commands (e.g. 49), it will always receive 6 bytes. The first byte will be the command itself (e.g. 49) and then 4 bytes of data, and then the last byte is the CRC8 of the previous 5 bytes. This is exactly compatible with most of the previously implemented commands (such as CMD_Get_Sleep_Size)
The list of commands
The list of commands
CMD_Get_HRM_Size = 3,
Description: (type: Get, from the central device perspective). to get the size of the HRM file on the watch.
The HRM file will be activated on the watch.
The response data format:
B0: 3
B1-B4 contain the size of the file
B5: CRC-8 of the previous 5 bytes
CMD_Get_Activity_Size = 4,
Description: (type: Get, from the central device perspective). Command to ask the watch the size of the activity file and activating the activity file for streaming. The response data format:
B0: 4
B1-B4 contain the size of the file
B5: CRC-8 of the previous 5 bytes
CMD_Get_Workout_Size = 5,
Description: (type: Get) Command to ask the watch the size of the workout file and activating the workout file for streaming. The response data format:
B0: 5
B1-B4 contain the size of the file
B5: CRC-8 of the previous 5 bytes
CMD_Get_HRV_Size = 6,
Description: (type: Get) Command to ask the watch the size of the HRV file and activating the HRV file for streaming. The response data format:
B0: 6
B1-B4 contain the size of the file
B5: CRC-8 of the previous 5 bytes
CMD_Get_Sleep_Size = 7,
Description: (type: Get) Command to ask the watch the size of the sleep file and activating the sleep file for streaming. The response data format:
B0: 7
B1-B4 contain the size of the file
B5: CRC-8 of the previous 5 bytes
CMD_Get_Logs_Size = 8,
Description: (type: Get) Command to ask the watch the size of the Logs file and activating the Log file for streaming. The response data format:
B0: 8
B1-B4 contain the size of the file
B5: CRC-8 of the previous 5 bytes
APP_CMD_Get_GPS_Size = 92,
Description: (type: Get) Command to ask the watch the size of the GPS file and activating the GPS file for streaming. The response data format:
B0: 92
B1-B4 contain the size of the file
B5: CRC-8 of the previous 5 bytes
CMD_GET_FILE_SIZE = 46,
Description: (type: Get) The size of a file. When sending this command, a byte is followed by the code (46) which indicates the file_id that the mobile app wants to know its size. The file_id can be the following (hereafter)
PPG_FILE= 1,
Activity_file= 2,
Hearbeat HRV = 3,
Workout = 4,
Sleep = 5,
Debug Logs: 6.
GPS = 8,
PPG2 = 9,
GPS_ASSIST_ONLINE = 10,
GPS_ASSIST_OFFLINE = 11,
GPS_DEBUG = 12,
ECG_file = 13
BioZ_file = 14
WORKOUT_SUMMARIES_FILE =15,
USER_INPUT_EVENTS_FILE = 16, // such as hydration
ANCS_BUNDLE_IDS_FILE = 17,
GREENTEG_FILE = 18,
LOG_FILE_BACKUP = 19,
Philips_OUTPUTS_DEBUG = 20,
STRESS_FILE =21,
ACC_FILE = 22,
The response data format:
B0: 46
B1: file_id
B2-B5 contain the size of the file
B6: CRC-8 of the previous 6 bytes
CMD_GET_FILES_SIZE_BUNCH = 201,
Description: (type: Get) The sum of the sizes of a bunch of files. When sending this command, a byte is followed by the code (201) which indicates the number of files that the mobile app wants to know the summation of their sizes. the the next bytes are the file_ids. The format of this command:
B0: 201
B1: number of files (1 to 14)
B2: file_id of the first file
B3: file_id of the second file
B4: file_id of the third file
B5: …
B6: … …
The response data format:
B0: 201
B1-B4 contain the sum of the size of the files
B5: CRC-8 of the previous 5 bytes
CMD_GET_ACTIVE_MODE = 49,
Description: (type: Get) To ask the watch what the current mode is. The response data format:
B0: 49
B1 contains the mode id.
B2=B3=B4 =0.
Possible return values (hereafter for the mode):
MODE_SHIPPING = 0,
POWER_SAVING_MODE = 1,
MODE_HRM = 2,
MODE_SLEEP_TRACKING = 3,
MODE_PREVENTICUS = 4,
MODE_PREVENTICUS_SLEEP = 5,
MODE_WORKOUT = 6,
MODE_NORMAL (day) = 7,
MODE_CHARGING = 8,
MODE_MAX_BATTERY = 9
CMD_GET_BATTERY_LEVEL = 50,
Description: (type: Get) To ask the watch the battery percentage and the battery voltage. The response data format:
B0: 50
B1 contains the battery level percentage (0-100)
B2,B3 contain the battery voltage level in mv.
B4 = 00 : it means the bracelet is not on charger. 01 : it means the bracelet is on charger but it is not charging, (it means it is fully charged but still on the charger) 11 : means it is on the charger and it is charging. 10 :should never happen (theoretically it means the bracelet is charging but it is not on the charger).
CMD_GET_CURRENT_TIME = 51,
Description: (type: Get) to ask the watch its current internal time (epoch GMT time in seconds) The response data format:
B0: 51
B1-B4 contain the time in epoch (GMT) in seconds.
CMD_GET_SLEEP_TIME = 52,
Description: (type: Get) to ask the watch its current go to bed time. The response data format:
B0: 52
B1 the go to bed hour (in GMT)
B2 the go to bed minute (in GMT)
B3 = b4 =0
CMD_GET_WAKEUP_TIME = 53,
Description: (type: Get) to ask the watch its current wake up time. The response data format:
B0: 53
B1 the wakeup hour (in GMT)
B2 the wakeup minute (in GMT)
B3 = b4 =0
CMD_GET_HEIGHT = 54,
Description: (type: Get) To ask the watch its internal current user height. The response data format:
B0: 54
B1 The height of the user (in cm)
B2= B3 = b4 =0
CMD_GET_WEIGHT = 55,
Description: (type: Get) To ask the watch its internal current user weight. The response data format:
B0: 55
B1 The weight of the user (in kg)
B2= B3 = b4 =0
CMD_GET_USER_BIRTHDATE = 56,
Description: (type: Get) To ask the watch its internal current user birth date. The response data format:
B0: 56
B1-B2 The birthdate year
B3 The birthdate month
B4 The birthdate day
CMD_SET_SLEEP_TIME = 40,
Description: (type: Set) To set in the watch the current go to bed time in GMT. The command data format:
B0: 40
B1 hour of going to bed (in GMT time zone).
B2 minute of going to bed (in GMT time zone).
CMD_SET_WAKEUP_TIME = 41,
Description: (type: Set) To set in the watch the current wakeup time in GMT. The command data format:
B0: 41
B1 hour of waking up (in GMT time zone).
B2 minute of waking up (in GMT time zone).
CMD_Set_Height = 42,
Description: (type: Set) To set in the watch the current user height. The command data format:
B0: 42
B1 height in centimeter (from 0 to 255)
CMD_Set_Weight = 43,
Description: (type: Set) To set in the watch the current weight of the user. The weight should be in kg unit. E.g. W=74 represents 74 kg. the range is zero to 200 (=200Kg). The command data format:
B0: 43
B1 the weight in kg
CMD_Set_PROFILE = 44,
Description: (type: Set) To set in the watch the current user profile (age, sex, handedness). The command data format:
B0: 44
B1 age
B2-B3 year of birth (B2 is the most significant byte, B3 is the least)
B4 month of birth
B5 day of birth,
B6 sex (0 male, 1 female, 2 unspecified)
B7 handedness
CMD_GET_PROFILE = 57,
Description: (type: Get) To ask the watch its internal current user profile (age, sex, handedness). The response data format:
B0: 57
B1 age
B2 sex (0 male, 1 female, 2 unspecified)
B3 handedness
B4 =0.
CMD_GET_CURRENT_FILE = 58,
Description: (type: Get) To ask the watch its internal current active file (for streaming) The response data format: B0: 58
B1 file number
B2 = B3= B4 =0.
CMD_GET_STREAMING_STATE = 59,
Description: (type: Get) To ask the watch if it is currently streaming or not The response data format:
B0: 59
B1 streaming status. 1 if streaming, 0 if not streaming
B2 = B3= B4 =0.
CMD_GET_LAST_ERROR = 60,
Description: (type: Get) To ask the watch the last error to report The response data format:
B0: 60
B1 the code of the last error on the watch (0: no error, x>0: error code)
B2 = B3= B4 =0.
CMD_GET_STEPS_DAY = 61,
Description: (type: Get) To ask the watch the current step count of the day The response data format:
B0: 61
B1-B1: The step count of the day
B3= B4 =0.
CMD_GET_FW_VERSION = 63,
Description: (type: Get) To ask the watch the current FW version. The response data format:
B0: 63
B1: 2 (for the watch 287N)
B1: 87 (for the watch 287N)
B3,B4: FW version.
CMD_SET_PREPARE_FOR_DFU = 64, // deprecated, not needed on FW version > 0.0.0.2.
Description: (type: Set) To inform the watch that the is a DFU process that is going to start shortly.
CMD_GET_HARDWARE_ID = 65,
Description: (type: Get) To ask the watch its hardware ID. The response data format:
B0: 65
B1: 50 (for the watch 287N), 51 for the bracelet 287B1
B2-B4: 0
CMDGET BODYPOSITION = 66,
Description: (type: Get) To ask the watch its internal current user position of the watch. The response data format:
B0: 66
B1: left: 1, right: 2
B2-B4: 0
CMDSET BODYPOSITION = 67,
Description: (type: Set) To inform the watch the current user position of the watch.
B0: 67
B1: left: 1, right: 2
B2-B4: 0
CMD_Update_Time = 22,
Description: (type: Set) To update the time in the watch. B0: 22
B1: year -2000 (if we are on 2020, this byte will be 20).
B2: month
B3: day
B4: hour
B5: minute
B6: second
B7: local time offset (in minutes) from the UTC (least significant byte)
B8: local time offset (in minutes) from the UTC (most significant byte)
APP_CMD_GET_LOCAL_TIME = 23,
Description: (type: Get) Gets the watch’s local time.
Command id: 23
Size: 1 byte (including the command id)
Param:
B0: 23 (command id)
Response:
B1-B4: A timestamp representing the local epoch time of the watch (unsigned 4-byte integer).
CMD_RESET= 24,
Description: (type: Set) Asks the watch to restart.
Command id: 24
Size: 1 byte (including the command id)
Param:
B0: 24 (command id)
Streaming commands:
CMD_Start_Streaming_data = 1,
Description: (type: Set) This command doesn’t have any parameters. The central device asks the watch to send the data. The central will send the active file (The one that has been activated with one of the get_file_size commands 3-8 and 46). And the data size for the streaming will be the last size of the file which was read by the central device.
CMD_Start_Streaming_File = 47,
Description: (type: Set) Similar to 1, except that the central device implicitly asks for a specific file. The data size of the stream will be the current size of the file in the watch (which might not be exactly the same as the one communicated with the central device previously due to new data stored in the flash). The format of this command is similar to 46.
CMD_Start_Streaming_File_With_Size = 48,
Description: (type: Set) Similar to 1, except that the central device implicitly asks for a specific file and it also specifies how much data it needs to get from the watch. If the central device asks for a data size that is larger than the file, the watch will send the whole file (but not more than that). The format is similar to 46 followed by 4 bytes for the data size.
CMD_Start_Streaming_File_With_Size = 68,
Description: (type: Set) Similar to 48, except that the central device asks the watch to streaming a specific file, from a specific offset with the size of the read. Format: [68][file number] [4 bytes for the size][4 bytes for the offset (i.e. start address of the read)]. Here is an example: [68][1] [100][0][0][0] [50][0][0][0] The command above means: stream to me the file 1 (which is the PPG data file, AKA HRM), 100 bytes starting from byte 50. This means that the central device is assuming that the PPG file has at least 150 bytes. If the central device asks for a data that exceeds from the end address of the file, the watch will send from the initial address to the end of the file. The format is similar to 48 followed by 4 bytes for the initial offset address. Erase commands:
CMD_ERASE_FROM_FILE = 45
Description: (type: Set) To erase from a file The command is followed by a file_id (one byte similar to 46) and a size (4 bytes). It asks the watch to erase from a file a specific amount of data.
Mode control commands
CMD_Set_Normal_Mode = 15,
Description: (type: Set) This is a command to ask the watch to switch to the Normal mode.
CMD_Set_Workout_Mode = 16,
Description: (type: Set) This is a command to ask the watch to switch to the Workout mode.
CMD_Set_Sleep_Mode = 17,
Description: (type: Set) This is a command to ask the watch to switch to the Sleep tracking mode.
CMD_Set_Preventicus_Mode = 18,
Description: (type: Set) This is a command to ask the watch to switch to the Preventicus mode.
CMD_Set_Intention_WakeUp = 19,
Description: (type: Set) This is a command to ask the watch to set the intention of the person to go to sleep.
CMD_Stop_Sleep_Mode = 20,
Description: (type: Set) This is a command to ask the watch to Stop the Sleep tracking mode. = 20
UI settings (only 284N and 287 watches)
APP_CMD_SET_UI_MODULES_LIST = 84,
Description: (type: Set) Set the ordered list of watch’s functions that the user wants to see on the watch.
Command id: 84
Size: 2 to N bytes (including the command id)
Param:
B0: 84 (command id)
B1-BN: An array of unsigned 1-byte non-zero integers, each representing a watch’s function. The list must be 0 terminated so that the FW can properly induce the number of functions to be enabled. ch.
#define UI_MODULE_ID_INFO (0x01) // 1
#define UI_MODULE_ID_STEPS (0x02) // 2
#define UI_MODULE_ID_HRM (0x03) // 3
#define UI_MODULE_ID_DATE (0x04) // 4
#define UI_MODULE_ID_TIME (0x05) // 5
#define UI_MODULE_ID_BATTERY (0x06) // 6
#define UI_MODULE_ID_WORKOUT (0x07) // 7
#define UI_MODULE_ID_WORLDTIMER (0x08) // 8
#define UI_MODULE_ID_ALARMS (0x09) // 9
#define UI_MODULE_ID_CHRONO (0x0A) // 10
#define UI_MODULE_ID_WEATHER (0x0B) // 11
#define UI_MODULE_ID_BREATHE (0x0C) // 12
#define UI_MODULE_ID_NOTIF (0x0D) // 13
#define UI_MODULE_ID_SLEEP (0x0E) // 14
#define UI_MODULE_ID_FUNC_MODE (0x0F) // 15
#define UI_MODULE_ID_WEARING (0x10) // 16
#define UI_MODULE_ID_BLE (0x11) // 17
#define UI_MODULE_ID_HYDRATION (0x12) // 18
#define UI_MODULE_ID_ENERGY (0x13) // 19
#define UI_MODULE_ID_HRM_SLEEP (0x14) // 20
#define UI_MODULE_ID_HRM_REST (0x15) // 21
#define UI_MODULE_ID_DIAGNOSIS (0x16) // 22
APP_CMD_GET_DISPLAY_SETTING = 85,
Description: (type: Get) This is a command to get the list of the UI screens on the watch. Note: Since the list size may be bigger than what the response buffer can hold, the list is split into batches of 10 items max. So if the list is bigger than 10, the command will have to be sent several times in order to retrieve the full list.
Command id: 85 Size: 1 byte (including the command id)
Param:
B0: 85(command id)
B1: The batch id, starting from 1 (first batch).
Response:
B1: The total number of modules in the list (1-byte unsigned integer).
B2-B11: The modules of the requested batch, each byte representing one module (see command 84 for id values). If there are less than 10 modules in the batch, the list is completed with zeros.
Example: For instance, for a list of 15 modules, the first response will contain the first 10 items:
response: [ 15, moduleId_01, moduleId_02, moduleId_03, moduleId_04, …, moduleId_10 ]
And the request for the second second batch will return:
response: [ 15, moduleId_11, moduleId_12, moduleId_13, moduleId_14, moduleId_15, 0, 0, 0, 0, 0 ]
APP_CMD_SET_TIME_FORMAT = 93,
Description: (type: Set) This is a command to set the display format of the time (12h or 24h) on the watch. Command id: 93
Size: 2 bytes (including the command id) Param:
B0: 93 (command id)
B1: Either 0 (for the 24h format) or 1 (for the 12h format).
APP_CMD_GET_TIME_FORMAT = 94,
Description: (type: Get) This is a command to get the display format of the time (12h or 24h) on the watch. Command id: 94
Size: 1 byte (including the command id)
Param:
B0: 94 (command id)
Response:
B1: Either 0 (for the 24h format) or 1 (for the 12h format).
APP_CMD_SET_UNITS_SYSTEM = 163,
Description: (type: Set) Set the units system of the watch, either metric or imperial. Command id: 163
Size: 2 bytes (including the command id)
Param:
B0: 163 (command id)
B1: Either 0 (for the metric system) or 1 (for the imperial system).
APP_CMD_GET_UNITS_SYSTEM = 176,
Description: (type: Get) This is a command to get the units system used on the watch. Command id: 176 Size: 1 bytes (including the command id)
Param:
B0: 176 (command id)
Response:
Either 0 (for the metric system) or 1 (for the imperial system).
APP_CMD_SET_BACKLIGHT_STANDARD_DURATION= 166,
Description: (type: Set) Set the default time, in second, that the backlight is on when pressing the crown. Default duration is 6 seconds. Command id: 166
Size: 2 bytes (including the command id)
Param:
B0: 166 (command id)
B1: An unsigned 1-byte integer in the range 3 to 30, representing the duration of the backlight in second.
APP_CMD_GET_BACKLIGHT_STANDARD_DURATION = 177,
Description: (type: Get) This is a command to get the standard time, in second, that the backlight is on when pressing the crown. Command id: 177 Size: 1 byte (including the command id)
Param:
B0: 177 (command id)
Response:
B1: The standard duration of the backlight when it is on.
APP_CMD_GET_CONFIG_CHANGED = 179,
Description: (type: Get) This is a command to check whether the UI configuration parameters changed on the watch side. Command id: 179 Size: 1 byte (including the command id)
Param:
B0: 179 (command id)
Response:
B1: The number of changes that have occurred since the last update.
B2-BN: The list of watch’s functions that have changed. Note that so far, a watch function is identified by the corresponding UI module id listed in command 84. Supported ids are UI_MODULE_ID_ALARMS and UI_MODULE_ID_NOTIF.
APP_PING_CONFIG_CHANGED = 180,
Description: (type: sent from the watch to phone) This is a command to notify the app that a UI configuration parameter has changed on the watch side. Command id: 180 Size: 1 byte (including the command id)
Param: B0: 180 (command id)
Response: B1: The id of the UI module whose configuration has changed.
B2-BN: Data related to the change, depending on the id in B1.
If B1 is UI_MODULE_ID_ALARMS:
B2: The alarm index of the alarm whose configuration has changed (1-byte unsigned integer).
If B1 is UI_MODULE_ID_NOTIF:
B2: The type of notifications whose configuration has changed (1-byte unsigned integer). See command 119.
If B1 is UI_MODULE_ID_HYDRATION:
B2: The current value (on the watch side) of the counter representing the number of glasses (1-byte unsigned integer).
B3: The difference between the current value of the counter and the counter previous value (1-byte signed integer). For instance, if the last value was 5 glasses and the current counter value is 7, the difference will be +2. If the last value was 10 glasses and the current counter value is 9, the difference will be -1.
B4-B7: The timestamp corresponding to the change. Note that this time is the one figuring in the corresponding file’s record.
If B1 is UI_MODULE_ID_WORKOUT:
B2: The type of Workout notification. Only 1 value is supported so far (see below).
typedef enum WorkoutPingType
{
WPT_NONE = 0,
WPT_GPS_FILE_REQUEST = 1, // To request a new GPS assisted file before a workout
} WorkoutPingType_t;
APP_CMD_SET_DEMO_ENABLE= 183,
Description: (type: Set) Set the flag to enable or disable the demo mode on the watch. Command id: 183 Size: 2 bytes (including the command id) Param: B0: 183 (command id) B1: Either 0: to disable the demo mode; or 1: to enable it.
APP_CMD_GET_DEMO_ENABLE= 184,
Description: (type: Get) This is a command to get the flag to enable or disable the demo mode on the watch. Command id: 184 Size: 1 byte (including the command id) Param: B0: 184 (command id) Response: B1: The demo enable flag value: either 0 (disabled) or 1 (enabled).
APPCMD = ,
Description: (type: Get) .
Command id:
Size: bytes (including the command id)
Param:
B0: (command id)
B1:
B2:
B3:
Response:
B1:
B2:
Weather
APP_CMD_SET_WEATHER_FORECAST = 88,
Description: (type: Set) This is a command to set a new weather forecast in the watch. The watch can store up to 8 forecasts, and automatically discards the ones that are outdated. Command id: 88 Size: 18 bytes (including the command id) Param: B0: 88 (command id)
B1-B4: The timestamp of the batch (when the forecast was done).
B5-B8: The validity timestamp (forecast valid from this time).
B9: The temperature unit, either 0 for °C or 1 for °F.
B10: The current weather type (see WeatherTypes_t below).
B11-12: The current temperature (2-byte signed integer).
B13-14: The minimal temperature (2-byte signed integer).
B15-B16: The maximal temperature (2-byte signed integer).
B17: The cloud cover percentage (1-byte unsigned integer).
typedef enum WeatherTypes {
WT_UNKNOWN = 0x00,
WT_CLEAR_SKY,
WT_FEW_CLOUDS,
WT_SCATTERED_CLOUDS,
WT_BROKEN_CLOUDS,
WT_RAIN,
WT_SHOWER_RAIN,
WT_THUNDERSTORM,
WT_MIST,
WT_SNOW,
} WeatherTypes_t;
APP_CMD_GET_WEATHER_FORECAST = 89,
Description: (type: Get) This is a command to get the parameters of the weather screen of the watch. Command id: 89 Size: 1 byte (including the command id)
Param: B0: 89 (command id)
Response: B1: The size of the data (1 byte so far) B2: The number of forecasts currently stored in the watch. Notifications
APP_CMD_SET_NOTIFICATION = 90,
Description: (type: Set) This is a command to send a notification to the watch. here is the format of this command:
B0: 90 (command id)
B1-B4 : 4 bytes indicating the notification’s unique ID.
B5: The category of the notification
B6: The size of the title of the notification (Size_t). This can be maximum 40.
B7- B(7 + Size_t-1): The title of the notification
B(7 + Size_t): The size of the body of the message of the notification (Size_m) . this can be maximum 100.
B(7 + Size_t+1) - B(7 + Size_t+1+size_m) : The body of notification
APP_CMD_GET_NOTIFICATION = 91,
// to be implemented.
Description: (type: Get) This is a command to get the notifications from the watch.
APP_SET_ALERT_ENABLE = 119,
Description: Set the enable flag value for a specific type of alert. Supported alert’s type are Activity (0), Social (2) and System (3). Command id: 119 Size: 3 bytes (including the command id)
Param: B0: 119 (command id) B1: A 1-byte unsigned integer representing the type of alert. B2: Either 0, to disable all the alerts of the type specified, or 1 to enable them.
APP_GET_ALERT_ENABLE = 120,
Description: Get the enable flag value for a specific type of alert. Supported alert types are Activity (0), Social (2) and System (3). Command id: 120 Size: 2 bytes (including the command id) Param:
B0: 120 (command id)
B1: A 1-byte unsigned integer representing the type of alert.
Response:
In case of success:
B1: Type of alert.
B2: Either 0 for disabled, or 1 for enabled.
In case of error:
B1: 0xFF.
B2: The error code:
1: Format error, typically missing parameter(s)
2: Invalid parameter(s)
APP_SET_ALERT_TIME_PERIOD = 121,
Description: Set the time interval during which the specified type of alert is allowed. This can be used for instance, to disable alerting during the night. Command id: 121 Size: 6 bytes (including the command id) Param:
B0: 121 (command id)
B1: A 1-byte unsigned integer representing the type of alert to be updated. Supported alert types are Activity (0), Social (2) and System (3).
B2: A 1-byte unsigned integer representing the interval starting hour.
B3: A 1-byte unsigned integer representing the interval starting minute.
B4: A 1-byte unsigned integer representing the interval ending hour.
B5: A 1-byte unsigned integer representing the interval ending minute.
APP_GET_ALERT_TIME_PERIOD = 122,
Description: Get the time interval during which the specified type of alert is allowed. Command id: 122 Size: 2 bytes (including the command id) Param: B0: 122 (command id) B1: A 1-byte unsigned integer representing the type of alert. Supported alert types are Activity (0), Social (2) and System (3).
Response: In case of success:
B1: The type of alert.
B2: The starting hour, as a 1-byte unsigned integer.
B3: The starting minute, as a 1-byte unsigned integer.
B4: The ending hour, as a 1-byte unsigned integer.
B5: The ending minute, as a 1-byte unsigned integer.
In case of error:
B1: 0xFF.
B2: The error code:
1: Format error, typically missing parameter(s)
2: Invalid parameter(s)
APP_SET_HR_ALERT_THRESHOLD = 123,
// to be implemented
APP_GET_HR_ALERT_THRESHOLD = 124,
// to be implemented
APP_SET_ALERT_VIBRATION_ENABLE = 164,
Description: (type: Set) Set the flag that enables or disables the vibrations when an alert is fired.
Command id: 164
Size: 3 bytes (including the command id)
Param:
B0: 164 (command id)
B1: A 1-byte unsigned integer representing the type of alert to be modified. Supported alert types are Activity (0), Social (2) and System (3).
B2: Either 0 to disable the vibrations, or 1 to enable them (1 byte).
APP_GET_ALERT_VIBRATION_ENABLE = 165,
Description: (type: Get) Get the flag that enables or disables the vibrations when an alert is fired. Command id: 165 Size: 2 bytes (including the command id) Param:
B0: 165 (command id)
B1: A 1-byte unsigned integer representing the type of alert to be checked. Supported alert types are Activity (0), Social (2) and System (3).
Response:
In case of success:
B1: Type of alert
B2: Either 0 for disabled, or 1 for enabled.
B3-B6: The timestamp corresponding to the last configuration change of this parameter on the watch side (4-byte unsigned integer).
In case of error:
B1: 0xFF.
B2: The error code:
1: Format error, typically missing parameter(s)
2: Invalid parameter(s)
APP_CMD_SET_ACTIVE_ALERT_DATA= 187,
Description: (type: Set) Set the inactive duration configured by the user for the ‘Get Active’ alert. Command id: 187 Size: 3 bytes (including the command id) Param:
B0: 187 (command id)
B1: The number of bytes sent (2 so far).
B2-3: A 2-byte unsigned integer representing the inactive duration configured by the user in number of minutes.
Response:
B1: 0 in case of success, or a non-zero value in case the settings could not be applied.
APP_CMD_GET_ACTIVE_ALERT_DATA= 188,
Description: (type: Get) Get the inactive duration set in the watch for the ‘Get Active’ alert. Command id: 188 Size: 1 byte (including the command id) Param:
B0: 188 (command id)
Response in case of success:
B1: The data size (2 so far).
B2-3: A 2-byte unsigned integer representing the inactive duration set in the watch in number of minutes.
Response in case of failure:
B1: The data size (1 so far).
B2: The error code ( a non-zero value).
Breathe
APP_CMD_SET_BREATHE_PARAMS = 100,
Description: (type: Set) This is a command to send the Breathe parameters to the watch. Warning: The command will fail in case the Breathe animation is ongoing. Command id: 100 Size: 6 bytes (including the command id)
Param:
B0: 100 (command id)
B1: Inhale stage settings: 1-byte raw data as follows:
bit 0-6: stages’s duration in seconds
bit 7: stage's haptic feedback enabled (0: off, 1: on)
B2: Hold inhale stage settings (same format as Inhale).
B3: Exhale stage settings (same format as Inhale).
B4: Hold exhale stage settings (same format as Inhale).
B5: Animation settings: 1-byte raw data as follows:
bit 0-6: animation’s duration in minutes
bit 7: unused
Response:
B1: 0 in case of success, or any non-zero value in case the settings couldn’t be applied. The reasons for failure could be that at least one parameter is invalid or that the Breathe animation is ongoing.
APP_CMD_GET_BREATHE_PARAMS = 101,
Description: (type: Get) This is a command to get the Breathe parameters from the watch. Command id: 101 Size: 1 byte (including the command id) Param: B0: 101 (command id) Response:
B1: Inhale stage settings: 1-byte raw data as follows:
bit 0-6: stages’s duration in seconds
bit 7: stage's haptic feedback enabled (0: off, 1: on)
B2: Hold inhale stage settings (same format as Inhale).
B3: Exhale stage settings (same format as Inhale).
B4: Hold exhale stage settings (same format as Inhale).
B5: Animation settings: 1-byte raw data as follows:
bit 0-6: animation’s duration in minutes
bit 7: unused
Alarms
APP_CMD_SET_ALARM = 102,
Description: (type: Set) This is a command to update an existing alarm with new settings. Command id: 102 Size: 6 bytes (including the command id) Param:
B0: 102 (command id)
B1: A 1-byte unsigned integer representing the index of the alarm to be updated.
B2: A 1-byte unsigned integer representing the new hour value to be applied, in the range 0 to 23.
B3: A 1-byte unsigned integer representing the new minute value to be applied, in the range 0 to 59.
B4: A 1-byte unsigned integer representing the days of the week where the alarm is enabled, where each bit from position 0 to 6 represent one day of the week, starting with Sunday. The last bit is ignored. Set the Nth bit to 0 to disabled the alarm the Nth day of the week, or set it to 1 to enable it. Bit 0 is the least significant bit.
B5: The global alarm enabled / disabled flag, where 0 is disabled and 1 is enabled.
APP_CMD_GET_ALARM = 103,
Description: (type: Set) This is a command to get the settings of the alarm at a specific index. Command id: 103 Size: 2 bytes (including the command id) Param:
B0: 103 (command id)
B1: A 1-byte unsigned integer representing the index of the alarm on the list of configured alarms stored in the watch.
Response:
B1: The alarm index.
B2: A 1-byte unsigned integer representing the new hour value of the alarm, or 0x80 if the index is invalid.
B3: A 1-byte unsigned integer representing the new minute value of the alarm, or 0x80 if the index is invalid.
B4: A 1-byte unsigned integer representing the days of the week where the alarm is enabled, or 0x80 if the index is invalid.
B5: A 1-byte unsigned integer representing the global enabled flag of the alarm, or an undefined value if the index is invalid.
B6-B9: The timestamp (UTC) corresponding to the last time the alarm settings have been modified (4-byte unsigned integer).
APP_CMD_ADD_ALARM = 104,
Description: (type: Set) This is a command to add an alarm to the list of configured alarms stored in the watch. Command id: 104 Size: 6 bytes (including the command id)
Param:
B0: 104 (command id)
B1: A 1-byte unsigned integer representing the new hour value to be applied, in the range 0 to 23.
B2: A 1-byte unsigned integer representing the new minute value to be applied, in the range 0 to 59.
B3: A 1-byte unsigned integer representing the days of the week where the alarm is enabled, where each bit from position 0 to 6 represent one day of the week, starting with Sunday. The last bit is ignored. Set the Nth bit to 0 to disabled the alarm the Nth day of the week, or set it to 1 to enable it. Bit 0 is the least significant bit.
B4: The global alarm enabled / disabled flag, where 0 is disabled and 1 is enabled.
APP_CMD_REMOVE_ALARM = 105,
Description: (type: Set) This is a command to remove an alarm from the list of configured alarms stored in the watch. Warning: If an alarm is ringing at the moment the command is executed, the alarm will not be erased. Command id: 105 Size: 2 bytes (including the command id) Param:
B0: 105 (command id)
B1: A 1-byte unsigned integer representing the index of the alarm to be removed from the list.
APP_CMD_GET_NO_ALARMS = 106,
Description: (type: Get) This is a command to get the number of configured alarms stored in the watch. Command id: 106 Size: 1 bytes (including the command id)
Param:
B0: 106 (command id)
Response:
B1: A 1-byte unsigned integer representing the number of alarms currently configured in the watch.
APP_CMD_ERASE_ALL_ALARMS = 178,
Description: (type: Set) This is a command to erase all the configured alarms stored in the watch. Warning: If an alarm is ringing at the moment the command is executed, the alarms will not be erased. Command id: 178 Size: 1 bytes (including the command id)
Param:
B0: 178 (command id)
Response:
B1: A 1-byte unsigned integer representing the number of alarms currently configured in the watch, which should be 0 if the command was executed without errors.
Workout
APP_CMD_START_SEND_FILE = 130,
Description: Send information (file’s header) to prepare the watch to receive a file.
Note: To be used with commands 131 and 132.
Command id: 130
Size: 14 bytes (including the command id)
Param:
B0: 130 (command id)
B1: The type of file to be sent by the app to the watch. Supported types are GPS_ASSIST_ONLINE (10) and GPS_ASSIS_OFFLINE (11).
B2-B5: A 4-byte unsigned integer representing the timestamp.A 4-byte unsigned integer representing the size of the file to be sent.
B6-B9: A 4-byte unsigned integer representing the size of the file to be sent.
B10-B13: A 4-byte unsigned integer representing the CRC of the file.
Response:
B1-B2: A 2-byte unsigned integer representing the maximum size of data that the watch can receive at a time.
APP_CMD_STOP_SEND_FILE = 131,
Description: Notify the watch that the file transmission is complete.
Note: To be used with commands 130 and 132.
Command id: 131
Size: 1 byte (including the command id)
Param:
B0: 131 (command id)
Response:
B1-4: A 4-byte unsigned integer representing the size of the received file, or 0 if there was an error in the transmission (wrong size or CRC).
APP_CMD_SEND_FILE_DATA = 132,
Description: Send a packet of data from the app to the watch. Note: To be used with commands 130 and 131. Command id: 132
Size: from 2 bytes (including the command id) to the data packet maximum size (see command 130)
Param:
B0: 132 (command id)
B1-BN: A data packet of the file.
Response:
B1-B4: A 4-byte unsigned integer representing the current size of the file that’s being transmitted.
APP_GET_WORKOUT_DATA = 107,
// Not implemented on 287N platforms Description: (type: Get) This is a command to get the workout data from the watch. World timer
APP_CMD_SET_WORLDTIMER_SETTING = 86,
Description: (type: Set) This is a command to set the time difference between the local time and the time zone selected by the user as well as the corresponding city name. Command id: 86 Size: 3 to 16 bytes (including the command id)
Param:
B0: 86 (command id)
B1: The time zone id, in case many time zones are supported (unused so far). Unsigned 1-byte integer.
B2: A 1-byte signed integer representing the hour difference to be applied to the local time hour in order to get the world time hour.
B3: A 1-byte signed integer representing the minute difference to be applied to the local time minute in order to get the world time minute.
B4: An array of ASCII characters representing the name of the city chosen by the user. This array must be 0 terminated so that the length of the string can be induced properly. The maximum size for the city name is 12 significant characters + 1 null terminating character.
APP_CMD_GET_WORLDTIMER_SETTING = 87,
Description: (type: Get) This is a command to get the settings of the world timer of the watch. Command id: 87 Size: 16 bytes (including the command id) Param: B0: 87 B1: A 1-byte unsigned integer indicating the index of the world timer. Response:
B1: The (maximum) size of the data.
B2: The index of the world timer (0 if there is only one).
B3: The hour difference compared to the local time (1-byte signed integer).
B4: The minute difference compared to the local time (1-byte signed integer).
B5-16: The name of the configured city. The maximum size for the city name cannot be more than 10 significant characters (see note below). If the name is shorter, there will be at least 1 byte set to zero directly following the last char of the name.
Note that the maximum size of the city name for this command is shorter than for the ‘Set’ command (86), due to the size limitation of the BLE buffer for sending a response to the phone.
APP_SET_CURRENT_CITY = 108,
// Not implemented
Description: (type: Set) This is a command to set the current city of the watch.
APP_GET_CURRENT_CITY = 109,
// Not implemented Description: (type: Get) This is a command to get the current city of the watch.
Hands alignment
CMD_SET_HANDS_ALIGNMENT_ZERO = 62,
Description: (type: Set) Start the process of aligning the hands by moving the hands to Zero (12h00) position.
Note: To be used with command 99.
Command id: 62
Size: 1 byte (including the command id)
Param:
B0: 62 (command id)
APP_SET_END_HANDS_ALIGNMENT = 99,
Description: (type: Set) This is a command to end the hand alignment process in the watch.
Note: To be used with command 62.
Command id: 99
Size: 1 byte (including the command id)
Param:
B0: 99 (command id)
APP_CMD_HAND_MINUTE_PLUS = 25,
Description: (type: Set) . To ask the watch to increment the position of the minutes hand by a given number of steps. Command id: 25 Size: 2 bytes (including the command id) Param: B0: 25 B1: A 1-byte unsigned integer indicating how many steps to move the hand.
APP_CMD_HAND_MINUTE_MINUS = 26,
Description: (type: Set) . To ask the watch to decrement the position of the minutes hand by a given number of steps. Command id: 26 Size: 2 bytes (including the command id) Param: B0: 26 B1: A 1-byte unsigned integer indicating how many steps to move the hand.
APP_CMD_HAND_HOUR_PLUS = 27,
Description: (type: Set) . To ask the watch to increment the position of the hour hand by a given number of steps. Command id: 27 Size: 2 bytes (including the command id) Param: B0: 27 B1: A 1-byte unsigned integer indicating how many steps to move the hand.
APP_CMD_HAND_HOUR_MINUS = 28,
Description: (type: Set) . To ask the watch to decrement the position of the hour hand by a given number of steps. Command id: 28 Size: 2 bytes (including the command id) Param: B0: 28 B1: A 1-byte unsigned integer indicating how many steps to move the hand. Sleep UI
APP_CMD_SET_SLEEP_DATA = 172,
Description: (type: Set) Set the user’s sleep data, which consists of the sleep total duration, the associated sleep score, and HRM statistics. All those data are computed by the app and transmitted to the watch for display. Command id: 172 Size: 6 bytes (including the command id)
Param:
B0: 172 (command id)
B1: The sleep duration: hours value, 1-byte unsigned integer
B2: The sleep duration: minutes value, 1-byte unsigned integer
B3: The sleep score, 1-byte unsigned integer. Note that this value cannot exceed 999.
B4: The HRM sleeping average, 1-byte unsigned integer.
B5: The HRM resting rate, 1-byte unsigned integer.
APP_CMD_GET_SLEEP_DATA = 173,
Description: (type: Get) Get the user’s sleep score. Command id: 173 Size: 1 byte (including the command id)
Param:
B0: 173 (command id)
Response:
B1: The data size (9 so far), starting from B2.
B2: The sleep duration: hours value, 1-byte unsigned integer
B3: The sleep duration: minutes value, 1-byte unsigned integer
B4: The sleep score, 1-byte unsigned integer.
B5: The HRM sleeping average, 1-byte unsigned integer.
B6: The HRM resting rate, 1-byte unsigned integer.
B7-B10: The timestamp corresponding to the time when the sleep data have been set to the watch.
Energy UI
APP_CMD_SET_ENERGY_TARGET = 174,
Description: (type: Set) Set the user’s energy expenditure target. Command id: 174 Size: 3 bytes (including the command id) Param: B0: 174 (command id) B1-B2: The user’s energy expenditure target (2-byte unsigned integer).
APP_CMD_GET_ENERGY_TARGET = 175,
Description: (type: Get) Get the user’s energy expenditure target.. Command id: 175 Size: 1 byte (including the command id) Param: B0: 175 (command id) Response: B1-B2: The user’s energy expenditure target (2-byte unsigned integer). Hydration
APP_CMD_SET_HYDRATION_DATA = 181,
Description: (type: Set) Set the hydration data. Command id: 181 Size: 2 bytes (including the command id) Param: B0: 181(command id) B1: The number of glasses (1-byte unsigned integer).
APP_CMD_GET_HYDRATION_DATA = 182,
Description: (type: Get) Get the user’s number of glasses accounted for on the watch’s side. Command id: 182 Size: 1 byte (including the command id) Param: B0: 182(command id) Response: B1: The number of glasses of the day on the watch’s side (1-byte unsigned integer). Others
APP_CMD_SET_STEPS_TARGET = 95,
Description: (type: Set) This is a command to send the target daily steps to the watch. Command id: 95 Size: 3 bytes (including the command id) Param: B0: 95 (command id) B1-B2: The user’s daily number of steps target (2-byte unsigned integer).
APP_CMD_GET_STEPS_TARGET = 96,
Description: (type: Get) This is a command to get the target daily steps of the watch. Command id: 96 Size: 1 byte (including the command id) Param: B0: 96 (command id) Response: B1-B2: The user’s daily number of steps target (2-byte unsigned integer).
APP_GET_CURRENT_HRM = 97,
Description: (type: Get) This is a command to get the current HRM of the watch.
APP_GET_CURRENT_SLEEP_DURATION = 98,
Description: (type: Get) This is a command to get the current sleep duration of the watch.
APP_GET_CONNECTION_STATUS = 110,
Description: (type: Get) Command to ask the watch the bonding status of the ble connection. The response data format: B0: 110
B1: the status of bonding. This byte can be either 100 or 101.
100: bonding is secure
101: not bonded, pairing is required to be able to communicate with the watch.
Note: If any of the other ble commands (e.g. command### APP_GET_CURRENT_CITY) is sent to the watch while the connection is not secure, the watch (instead of responding to the received command), will respond with### APP_GET_CONNECTION_STATUS command with data B1= 101 to show that the connection is not secured.
APP_SET_SHUTDOWN = 111,
// to be implemented.
Description: (type: Set) Command to ask the watch to shutdown. the bracelet can start again if it is put on a charger.
APP_GET_PPG2_FILE_SIZE = 112,
Description: (type: Get) Command to ask the watch the size of the PPG multi-color file and activating the PPG2 file for streaming. The response data format: B0: 112
B1-B4 contain the size of the PPG2 file B5: CRC-8 of the previous 5 bytes
APP_SET_ERASE_PPG2_FILE = 113,
Description: (type: Set) Command to erase the PPG multi/color file on the watch.
APP_SET_LED1 =114,
Description: (type: Set) Command to Set the LED1 of the bracelet on. The LED will blink for a few seconds.
APP_SET_LED2 =115,
Description: (type: Set) Command to Set the LED2 of the bracelet on. The LED will blink for a few seconds.
APP_SET_VIBRATOR =116,
Description: (type: Set) Command to turn the vibrator of the watch on (for a short period).
APP_GET_RESULTS_OPTICAL_TEST1 = 117,
Description: (type: Get) Command to read the results of the optical test1.
APP_GET_RESULTS_OPTICAL_TEST2 = 118,
Description: (type: Get) Command to read the results of the optical test2.
FW_SET_WAKE_UP =125,
Description: (type: sent from the watch to phone) A periodic ping command that comes from the watch to the app. The command is followed by 4 bytes which contains the current UTC time in the watch and a CRC. The default ping period is 1 minute but it can be modified by the app using the command 126. The command format: B0: 125
B1 contain the least significant bytes of the UTC time
B2 : battery level
B3-B4 size of PPG file
B5-B6 size of activity file
B7-B8 size of HRV file
B9-B10 size of workout file
B11-B12 size of sleep file
B13-B14 size of log file
B15: CRC-8 of the previous bytes
Note: if the size of the file is bigger than 65535, it will be capped to 65535 in the above command.
APP_SET_WAKEUP_PING_PERIOD = 126,
Description: (type: Set) Command to set the period (in seconds) of the ping command (cmd=125). If the period is set to zero, then the ping service is disabled in the watch and no further ping messages is sent to the phone. It can be set multiple times and the watch adapts all the time. The maximum ping period can be set to 1 day (=246060s). The command format: B0: 126 B1-B4 the ping period
APP_GET_WAKEUP_PING_PERIOD = 127,
Description: (type: Get) Command to read the current ping period. The respond data format: B0: 127 B1-B4 the ping period B5: CRC8
APP_SET_PACKET_SIZE = 128,
Description: (type: Set) Command to set the packet size of data transfer. This value can be between 20bytes to maximum 175 bytes. If a phone doesn’t support ble5, then this value should set to maximum 27. On the good phones, the bigger this value is the higher the transfer speed will be. The command format: B0: 128 B1: packet size.
APP_GET_PACKET_SIZE = 129,
Description: (type: Get) Command to read the current packet size of data transfer. The response data format: B0: 129 B1: packet size. B2: CRC8
APP_CMD_READ_UID = 138,
Description: (type: Get) Command to read the device unique ID. The response data format: B0: 138 B1-B8:Unique ID. B9: CRC8
APP_CMD_READ_MAC_ADDRESS = 139,
Description: (type: Get) Command to read the MAC address of the app. The response data format: B0: 139 B1-B6: MAC address. B7: CRC8
APP_CMD_SET_BED_TIME_TOLERANCE = 157,
Description: (type: Set) Command to set the tolerance time that the device goes to sleep tracking mode before the go-to-bed time. This value by default is set to one hour, meaning that if the user’s bed time is 10 PM, the device starts sleep tracking at 9PM. The command format: B0: 145 B1: bed time tolerance in minutes. This value is between 0 and 255.
APP_CMD_GET_BED_TIME_TOLERANCE = 158,
Description: (type: Get) Command to get the tolerance time that the device goes to sleep tracking mode before the go-to-bed time. This value by default is set to one hour, meaning that if the user’s bed time is 10 PM, the device starts sleep tracking at 9PM. The command format:
The response data format: B0: 146 B1: bed time tolerance in minutes. This value is between 0 and 255. B2: CRC8
APP_CMD_SET_RISE_TIME_TOLERANCE = 147,
Description: (type: Set) Command to set the tolerance time that the device gets out of sleep tracking mode after the rise-up time. This value by default is set to 2 hours, meaning that if the user’s rise time is 8 AM, the device stops sleep tracking at 10PM. The command format: B0: 147 B1: rise time tolerance in minutes. This value is between 0 and 255.
APP_CMD_GET_RISE_TIME_TOLERANCE = 148,
Description: (type: Get) Command to get the tolerance time that the device gets out of sleep tracking mode after the rise-up time. This value by default is set to 2 hours, meaning that if the user’s rise time is 8 AM, the device stops sleep tracking at 10PM. The response data format: B0: 148 B1: rise time tolerance in minutes. This value is between 0 and 255. B2: CRC8
APP_CMD_SET_PLAN = 149,
Description: (type: Set) To set the device to activate a plan The command format: B0: 149
B1: the plan to activate
B2: (Only for 287-2b bracelet FW > 0.0.2.3) if B1 is 4 or 5, then this byte indicates the frequency of the PPG2 measurements. below is a table for these frequencies.
B3: (Only for 287-2b bracelet FW > 0.0.2.24) if B1 is 4 or 5, then this byte indicates the sampling rate of the activity file metrics. B3 is in seconds and can be from 1 to 255. if set to 0 or to 255, the activity file sampling rate is set to the default 10s value.
B2 PPG frequency
1 32 Hz
2 64 Hz (not supported yet on version FW.0.2.3)
3 128 Hz
4 256 Hz
5 512 Hz (not supported yet on version FW.0.2.3)
example: 149 5 3 20 the bracelet will go to hospital raw plan, with 128Hz PPG sampling rate and it will write into the activity file every 20 seconds.
Documentation for the plans: https://docs.google.com/spreadsheets/d/1gKhuE-AC5Mux2rtNbyJO8SgVXQ02f96wuzBTgd36IMM/edit?usp=sharing
Vital parameters documentation
APP_CMD_GET_PLAN = 150,
Description: (type: Get) To get the current plan of the device Documentation for the plans: https://docs.google.com/spreadsheets/d/1gKhuE-AC5Mux2rtNbyJO8SgVXQ02f96wuzBTgd36IMM/edit?usp=sharing
Vital parameters documentation
The response data format: B0: 150
B1: the current plan of the device (0 to 5)
B2: (Only for 287-2b bracelet FW > 0.0.2.3) this byte indicates the frequency of the PPG2 measurements during hospital plans (4 and 5). Please refer to command### APP_CMD_SET_PLAN for the details of its value. otherwise this byte is zero for other platforms and other plans.
B2: (Only for 287-2b bracelet FW > 0.0.2.24) this byte indicates the sampling rate of the activity metrics during hospital plans (4 and 5). Please refer to command### APP_CMD_SET_PLAN for the details of its value. otherwise this byte is zero for other platforms and other plans.
B4: 0
B5: CRC8
APP_CMD_GET_PREVIOUS_BLE_COMMAND = 151,
Description: (type: Get) To get the previous successful ble command that was executed on the device. This command can be used in the case of NACK to a ble command to verify if the last command was reached to the device or the NACK was lost. In answering to this command, the device does not take into account the command 110 , 151 or the commands that probably have been sent on an unsecured connection.
The response data format:
B0: 151
B1: The last ble command that was run successfully
B2-B5: four bytes of the ble response to the last command
B6: CRC8
Example: The mobile app sends and receives the following commands:
Sends: 148 Receives: 148 2 CRC Sends: 45 2 100 10 0 0 Receives 45 100 0 0 0 CRC
Then if the mobile app runs the command 151, it will get 151 45 100 0 0 0 CRC. In case that the answer to the command 45 was not received on the app, the app can make sure this command was executed properly. If the device would answer like: 151 148 0 0 0 CRC then the app would know that the command 45 has never been arrived in the device.
APP_CMD_GET_SESSION_STATUS = 152,
Description: (type: Get) To get the status of a session (e.g. workout or sleep). In fact every mode when it starts has a session. With this command we can ask the device the information about that session. The command format:
B0: 152
B1: the mode id.
The response data format: B0: 152 B1: mode B2 : session number (increments every time the mode starts a new session) B3-B6: session start time (in epoch UTC format, GMT zone) B7-B8: duration of a session in second (if the session is still on-going, this will be zero) B9: status of the session (0: not started, 1: on-going, 2: finished) B10: CRC8
This command can be used especially for the sleep session to see if it is already finished on the device or not.
APP_CMD_SET_WORKOUT_MAX_TIME = 153,
Description: (type: Set) To set the maximum time for the workout sessions. This value by default is 2 hours. When the timeout exceeds this time limit, the device automatically will go back to its previous mode.
The command format:
B0: 153
B1-B2: time duration in seconds.
APP_CMD_GET_WORKOUT_MAX_TIME = 154,
Description: (type: Get) ) To get the maximum time for the workout sessions. The response data format: B0: 154 B1-B2: the current max time of the workout sessions B3: CRC8
APP_CMD_WORKOUT_STOP = 155,
Description: (type: Set) To deactivate the workout mode in the device. The device will automatically go back to its previous mode (or to a proper mode based on the time and the active plan). The response to this command is the summary of the workout as following: The command format:
B0: 155
B1: average hrm during the workout.
B2-B3: Steps during the workout.
B4-B5: energy expenditure during the workout
B6: max hrm during the workout
B7: average speed during the workout
B8: max speed during the workout
B9: duration of the workout (in minutes)
B10-B12: start time of the workout (here called W_ST). This is a compressed variable. Please use the following formula to get the real start_time of the workout: Real start time of the workout = W_ST *60 + 1609459200. The calculated “Real start time” will be in seconds and in epoch UTC format. The accuracy is up to the minute.
If (W_ST ==0) it indicates an error meaning that the start time of the workout is not available.
B13: Cardio Fitness Index
B14: Vo2Max
B15: CRC of all the previous bytes.
APP_CMD_GET_BRACELET_STATUS= 156,
Description: (type: Get) ) To get the status of the bracelet in terms of measurements, wearing, charging, sleeping, etc. The response data format for 287b, 284N, 287N: B0: wearing state, 0 to 4. 0 not wearing, 4 good wearing. For values 0, 1 , and 2, we can give a warning to the user for bad wearing.
B1: mode state: 0 or 1. 1 means the bracelet is in sleep-idle mode for saving battery. 0 means it is active.
B2: battery percentage.
B3. Charging state.
B4: idle state: 0 to 4. 0 means the bracelet is not moving at all, 4 means the bracelet is in motion.
B5: for 287-2b: 0 if the measurement is not running. 1 if the measurement is already started.
B6: CRC8
APP_PING_LIVE_HRM = 160,
Description: (type: sent from the watch to phone) A periodic ping command that comes from the watch to the app. The command is followed by 6 bytes which contains the live information about the hrm and steps. The command format: B0: 160
B1: current live unfiltered hrm.
B2: quality of live hrm (0 to 4)
B3-B4: steps since start of the workout.
B5-B6: energy expenditure during the workout (in Kilo Calories)
B7: max hrm during the workout
B8: current speed
B9: 0: for future use.
B10-B11: duration of the workout so far (in seconds)
B12: battery level in percentage
B13: average HRM during the workout.
B14: Average speed during the workout
B15: CRC of all the previous bytes.
APP_SET_PREV_USER_STATUS= 189,
Description: (type: Set) To set the status of the bracelet in terms of preventicus subscription. The command format: B0: 189
B1: The state of the user in terms of preventicus subscription. 100 to enable the valid subscription (so enable 5-min every 30-min measurements during the sleep). 101 to deactivate the subscription. APP_GET_PREV_USER_STATUS= 190, Description: (type: Get) ) To get the status of the bracelet in terms of preventicus subscription
The response data format :
B0: subscription status: 100 if the user has a valid subscription (5-min every 30-min measurements enabled at nights). 101 if the user has no subscriptions
B1: CRC8
APP_CMD_GET_RESET_REASON= 191,
Description: (type: Get) Get and/or clear the last reset reason. Command id: 191 Size: 3 bytes (including the command id) Param:
B0: 191 (command id)
B1: 1 or 0, in order to read the last reset reason or not (1 byte).
B2: 1 or 0, in order to clear the last reset reason or not (1 byte).
Response:
B1: The last reset reason if requested, or 0 otherwise (see ResetReason below).
B2: 1 in case the reset reason was cleared, or 0 otherwise.
B3: The error code if something went wrong (missing parameter(s)), or 0 in case of success.
typedef enum ResetReason
{
RR_UNKNOWN = 0, /*!< Unknown reason. */
RR_PIN_RESET = 1, /*!< Flat battery. */
RR_WATCHDOG = 2, /*!< Watchdog. */
RR_SOFT_RESET = 3, /*!< DFU. */
} ResetReason_t;
APP_CMD_SET_VITAL_PARAM = 192
Description: (type: Set) To set the device a vital parameter setting The command format: B0: 192
B1: the vital parameter to set based on the table below
B2, B3: the setting of the vital parameter. based on the table below vital parameter B1 B2 B3 comments:
BioZ 1 the emography plan to activate (1 disable ,2 bedtime-risetime or 3 continuous) the raw bioz plan to activate (1 disable ,2 bedtime-risetime or 3 continuous)
Accelerometer 2 1: disable recording Accelerometer raw data.
3: enable recording accelerometer raw data continously. 0 Raw PPG and ACC measurement during SPO2 monitoring every 30 minutes 3 1: disable recording
3: enable recording 0 This comes to action when the plan is set to 7.
Documentation for the plans: https://docs.google.com/spreadsheets/d/1gKhuE-AC5Mux2rtNbyJO8SgVXQ02f96wuzBTgd36IMM/edit?usp=sharing Vital parameters documentation
APP_CMD_GET_VITAL_PARAM = 193,
Description: (type: Get) To get the current state of a vital parameter. The command format:
B0: 193
B1: the vital parameter to get (based on the table above)
Documentation for the plans: https://docs.google.com/spreadsheets/d/1gKhuE-AC5Mux2rtNbyJO8SgVXQ02f96wuzBTgd36IMM/edit?usp=sharing Vital parameters documentation The response data format: B0: 193
B1: the vital parameter
B2, B3: the setting of the vital parameter in the bracelet.
B4: 0
B5: CRC8
APP_CMD_GET_BLE_CONFIG= 203,
Description: (type: Get) To get the current state of a ble parameter. The command format:
B0: 203
B1: the ble parameter to get (based on the table below)
The response data format: B0: 203
B1: the ble parameter
B2: the setting of the ble parameter in the bracelet.
B3,B4: 0
B5: CRC8
Ble parameter B1 B2
Connection power 1 The tx power in db, it can be one of the following values: -40dBm, -20dBm, -16dBm, -12dBm, -8dBm, -4dBm, 0dBm, +2dBm, +3dBm, +4dBm, +5dBm, +6dBm, +7dBm and +8dBm Advertising power 2 The tx power in db, it can be one of the following values: -40dBm, -20dBm, -16dBm, -12dBm, -8dBm, -4dBm, 0dBm, +2dBm, +3dBm, +4dBm, +5dBm, +6dBm, +7dBm and +8dBm APP_CMD_SET_BLE_CONFIG= 204, Description: (type: Set) To set the current state of a ble parameter. The command format:
B0: 204
B1: the ble parameter to set (based on the table above)
B2: the value of the ble parameter to set
example: command 204 1 8 will set the tx power of the ble connection (while connected) to the maximum +8dBm.
APP_CMD_SET_MEASUREMENT_CHANNELS_STATUS = 205,
Description: (type: Get) To get the state measurements in the wiff files. The command format: B0: 205 The response data format: B0: 205
B1: PPG_GREEN status
B2: PPG_Red status
B3: PPG_InfraRed status
B4: PPG_Ambient status,
B5: 0 (reserved for future use)
B6: 0 (reserved for future use)
B7: 0 (reserved for future use)
B8: 0 (reserved for future use)
B9: CRC of the previous bytes.
for each of the “status“ bytes above the following values are possible: 0: disabled, 1: channel one is enabled, 2: channel two is enabled, 3: both channles enabled.
APP_CMD_SET_MEASUREMENT_CHANNELS_STATUS = 206,
Description: (type: Set) To set the state measurements in the wiff files. The command format: B0: 206
B1: PPG_GREEN status
B2: PPG_Red status
B3: PPG_InfraRed status
B4: PPG_Ambient status,
B5: 0
B6: 0
B7: 0
B8: 0
for each of the “status“ bytes above the following values can be sent: 0: disabled, 1: channel one is enabled, 2: channel two is enabled, 3: both channles enabled.
example: command 206 1 2 0 3 0 0 0 0 will do the following: it will enable chanel one of the green, channel 2 of the red, disable both infrared channels and enable both ambinet channels.
APP_CMD_START_SPECIAL_MODE= 216,
Description: (type: Set) To set the bracelet into one of the speical modes The command format:
B0: 216
B1: The number indicating the special mode
1: Strap Optimization example: command 213 1 will do the following: it will enable the strap optimization mode on the bracelet. The bracelet will send pings of 218 every second for 2 minutes (or until command 214 is executed)
APP_CMD_STOP_SPECIAL_MODE= 217,
Description: (type: Set) To stop the special mode on the bracelet The command format:
B0: 217
B1: The number indicating the special mode
1: Strap Optimization
APP_PING_SPECIAL_MODE= 218,
Description: (type: ping) if the bracelet is in one of the special modes, it sends every minute one ping with some relevant data The command format:
B0: 218
B1: The number indicating the special mode
1: Strap Optimization
B2:B14: data relevant to the special mode.
B15: CRC8
for Strap Optimization:
B2: the quality of PPG Green
B3: the quality of PPG Red
B4: the quality of PPG Infra Red
B5: reserved
B6-B7: ACC_X
B8-B9: ACC_Y
B10-B11: ACC_Z
B12-B14: reserved
B15: crc of the above
examples of returned values:
PPG:
- if the person is moving his body (e.g. hand or body or the bracelet), the ppg values go above 100.
- if the bracelet is too tight, one or more of the ppg channels will return values smaller than 15.
- the ideal case for good wearing is when the PPG values are between 20 and 100
Acc: • wearing on left:
o hand downwards:
y around 512 (+/- 50 is acceptable) (if the user wears the bracelet on a wrong direction, this value will be around -512, we should ask him to fix)
x around 0 (+/- 250 is acceptable)
z aroun 0 (+/- 250 is acceptable)
o hand on the table: during the ppg strap optimization, if the value of acc gets out of the range below, it will be good to notify the user to not move).
z around -512 (+/- 50 is acceptable)
y around 0 (+/- 250 is acceptable)
x aroun 0 (+/- 250 is acceptable)
• wearing on right:
o hand downwards:
y around -512 (+/- 50 is acceptable) (if the user wears the bracelet on a wrong direction, this value will be around +512, we should ask him to fix)
x around 0 (+/- 250 is acceptable)
z aroun 0 (+/- 250 is acceptable)
o hand on the table:
z around -512 (+/- 50 is acceptable)
y around 0 (+/- 250 is acceptable)
x aroun 0 (+/- 250 is acceptable)
Test-related commands
APP_CMD_GET_sensor_value = 141,
Description: (type: Get) The last value of a sensor. When sending this command, a byte is followed by the code (141) which indicates the sensor_id that the mobile app wants to know its value. The sensor_id can be the following (hereafter)
Temperature 1 for the bracelets = 0,
Temperature 2 for the bracelets =1,
heat flux for the bracelets2 = 2,
acc = 10 (for acc the command 198) can be used as well.
bioz = 20,
ecg = 21,
The answer to this command will be as following: The response data format for sensor id 0, 1, and 2 B0: 141
B1-B2: Sensor value.
B3-B4:0
B5: CRC8
The response data format for sensor id 10 (acc) B0: 141
B1-B2: Acc X.
B3-B4: Acc Y.
B5-B6: Acc Z.
B7: CRC8
The response data format for sensor id 20 (BioZ)
B0: 141
[B1-B4]: bioz average (signed value , can be also negative)
[B5-B8]: bioz standard deviation (signed value , can be also negative)
[B9-B12]: bioz zero bias (signed value , usually negative)
[B13-B14]: bioz open offset. Please multiply this number by 256 and show it.
B15: CRC8
The response data format for sensor id 21 (ECG)
B0: 141
[B1-B4]: ECG average (signed value , can be also negative)
[B5-B8]: ECG standard deviation (signed value , can be also negative)
B9: CRC8
APP_CMD_SET_START_AUTO_TEST = 142,
Description: (type: Set) Command to start a hardware self-test. When sending this command, a byte is followed by the code (142) which indicates which self-test should be executed. For now only self-test zero is implemented which tests all the hardware modules. APP_CMD_GET_TEST_RESULT = 143,
Description: (type: Get) Command to read the result of a hardware self-test. When sending this command, a byte is followed by the code (143) which indicates the result of which self-test should be read. For now only self-test zero is implemented which tests all the hardware modules. The response data format:
B0: 143
B1-B2: self-test results.
B3-B4:0.
B5: CRC8
APP_CMD_TEST_HANDS= 194,
Description: Starts the test process of the hands. Command id: 194 Size: 1 byte (including the command id)
Param:
B0: 194 (command id)
Response:
B1: The error code in case the command was rejected, or 0 if the test was launched. The error can be: CEC_FORMAT_ERROR (1): Not enough bytes received. CEC_NOT_SUPPORTED (3): The device does not support this command.
APP_CMD_TEST_PIEZO= 195,
Description: Starts the test of the piezo.
Command id: 195
Size: 2 bytes (including the command id)
Param:
B0: 195 (command id)
B1: The type of the alert (see AlertVibType_T below).
typedef enum AlertVibType
{
AT_ALERT_1 = 1, // 3 Short vibrations + 5 pauses each second
AT_ALERT_2 = 2, // Continuous smooth vibration
AT_ALERT_3 = 3, // 2 vibrations (1 very short, 1 short)
AT_ALERT_4 = 4, // 1 smooth & short vibration
AT_ALERT_5 = 5, // 2 smooth & short vibrations
AT_ALERT_6 = 6, // 1 Short vibration + long pause
} AlertVibType_T;
Response:
B1: The error code in case the command was rejected, or 0 if the test was launched. The error can be:
- CEC_FORMAT_ERROR (1): Not enough bytes received.
- CEC_INVALID_PARAM (2): Invalid parameter.
- CEC_NOT_SUPPORTED (3): The device does not support this command.
APP_CMD_GET_PUSHER_STATE= 196,
Description: Gets the state of a pusher. Command id: 196 Size: 2 bytes (including the command id)
Param:
B0: 196 (command id)
B1: The pusher id (see PusherId_t below).
typedef enum PusherId
{
PUSHER_ID_2OC = 2, /*!< 2 o'clock position pusher (top). */
PUSHER_ID_3OC = 3, /*!< 3 o'clock position pusher (middle). */
PUSHER_ID_4OC = 4, /*!< 4 o'clock position pusher (bottom). */
} PusherId_t;
Response:
B1: The error code in case the command was rejected, or CEC_NO_ERROR (0) otherwise. The error can be:
- CEC_FORMAT_ERROR (1): Not enough bytes received.
- CEC_INVALID_PARAM (2): Invalid parameter.
- CEC_NOT_SUPPORTED (3): The device does not support this command.
B2: The pusher state (see PusherState_t below).
typedef enum PusherState
{
PUSHER_STATE_UNKNOWN = 0,
PUSHER_STATE_PRESSED = 1,
PUSHER_STATE_RELEASED = 2,
} PusherState_t;
APP_CMD_GET_CPU_TEMPERATURE= 197,
Description: Reads the temperature of the chip, and returns a value in °Celsius. Note that the accuracy is very low: +/- 4°C. Command id: 197 Size: 1 byte (including the command id)
Param:
B0: 197 (command id)
Response:
B1: The error code in case the command was rejected, or CEC_NO_ERROR (0) otherwise. The error can be:
- CEC_FORMAT_ERROR (1): Not enough bytes received.
- CEC_NOT_SUPPORTED (3): The device does not support this command.
B2: The temperature of the chip in °Celsius (1-byte signed integer), or 0 in case of error.
APP_CMD_GET_ACC_DATA= 198,
Description: Get the scaled values of the accelerometer. Command id: 198 Size: 1 byte (including the command id)
Param:
B0: 198 (command id)
Response:
B1: The error code in case the command was rejected, or CEC_NO_ERROR (0) otherwise. The error can be:
CEC_FORMAT_ERROR (1): Not enough bytes received.
CEC_NOT_SUPPORTED (3): The device does not support this command.
CEC_INVALID_STATE (4): The accelerometer is not running.
B2-B3: The scaled X-axis value (2-byte signed integer) of the accelerometer.
B4-B5: The scaled Y-axis value (2-byte signed integer) of the accelerometer.
B6-B7: The scaled Z-axis value (2-byte signed integer) of the accelerometer.
APP_CMD_TEST_EXTERNAL_FLASH= 199,
Description: Test the external Flash memory. Command id: 199 Size: 1 byte (including the command id)
Param: B0: 199 (command id)
Response: B1: The error code in case the command was rejected, or CEC_NO_ERROR (0) otherwise. The error can be:
- CEC_FORMAT_ERROR (1): Not enough bytes received.
- CEC_NOT_SUPPORTED (3): The device does not support this command. B2: The result of the test:
- 0: Failure
- 1: Success
APP_CMD_TEST_EXTERNAL_FLASH= 200,
Description: Erase the internal and/or external Flash and reset if needed. Command id: 200 Size: 3 bytes (including the command id)
Param:
B0: 200 (command id)
B1: Flag to indicate whether to erase all files from Flash memory (HRM, Activity,…).
B2: Flag to indicate whether to erase all FDS files (user settings, date and time,…).
Response: B1: The error code in case the command was rejected, or CEC_NO_ERROR (0) otherwise. The error can be:
- CEC_FORMAT_ERROR (1): Not enough bytes received.
- CEC_NOT_SUPPORTED (3): The device does not support this command. B2: A flag indicating whether a reset of the watch will occur in the coming seconds:
- 0: No reset needed. The watch program is still running and other commands can be sent.
- 1: A Reset action has been put in the queue and will occur soon (takes a few seconds). Do not send other commands before the device has restarted.
287-2b related commands:
APP_CMD_START_PPG2_ECG_MEASUREMENT = 34,
Description: (type: Set) . To ask the bracelet to start a multi-color ppg/ ecg measurement. the measurement type is given as a parameter in this command. for example if B1 is set to 2, then the bracelet will start an ECG measurement. if the B1 is set to 4, it will start a PPG and an ECG measurement at the same time. starting a measurement will not affect the previously and already running measurements. The command format:
B0: 34
B1: Measurement type 1 to 7 based on the following table:
Measuremem type:
PPG = 1,
ECG = 2,
BIOZ = 3,
PPG_ECG = 4,
PPG_BIOZ = 5,
ECG_BIOZ = 6,
PPG_ECG_BIOZ = 7,
APP_CMD_STOP_PPG2_ECG_MEASUREMENT = 35,
Description: (type: Set) . To ask the bracelet to stop a multi-color ppg/ ecg measurement. stopping one measurement type (for example ECG) will not affect other running measurements (for example PPG). The command format:
B0: 35
B1: Measurement type 1 to 7 based on the table in command 34.
APP_CMD_GET_PPG_CONTROL_LOOP_STATUS = 159,
Description: (type: Get) ) To get the status of the control loop in the bracelet. The response data format:
B0: 0 if the control loop is disabled, 1 if it is enabled.
B1-B3: 0
B4: CRC8
APP_GET_ECG_FILE_SIZE = 161,
Description: (type: Get) Command to ask the watch the size of the ECG file and activating the ECG file for streaming. The response data format:
B0: 161
B1-B4 contain the size of the ecg file
B5: CRC-8 of the previous 5 bytes
APP_SET_ERASE_ECG_FILE = 162,
Description: (type: Set) Command to erase the ECG file on the watch.
APP_GET_BioZ_FILE_SIZE = 169,
Description: (type: Get) Command to ask the watch the size of the BioZ file and activating the ECG file for streaming. The response data format:
B0: 169
B1-B4 contain the size of the BioZ file
B5: CRC-8 of the previous 5 bytes
APP_SET_ERASE_BioZ_FILE = 170,
Description: (type: Set) Command to erase the BioZ file on the watch.
APP_CMD_GET_ECG_STATUS= 219,
Description: (type: Get) Command to ask the bracelet if the ecg measurement is running or not The response data format:
B0: 219
B1: 1 if ecg is running. 0 if ecg is not running.
B2-B5: the start time of the last ecg meausrement (0 if ecg is not running)
B6: 0
B7: CRC-8 of the previous bytes