To enable custom replies an override must be defined in the devices coordinator that actually support custom replies.
The custom preferences allow to:
- enable / disable the default message suffix (Instinct 2 appends "sent from my $vendor device" to each reply by default)
- define custom messages to reply to calls and incoming messages (leaving those lists empty will enable the default messages to be used)
Also adds a new protobuf definition file of mostly unknown values that enable toggling the message suffix on Instinct 2.
This uses the (assumed) new method of passing multiple actions, instead of the (assumed) legacy accept/decline approach.
At the moment the preset messages stored on the watch firmware are used for replying, the code supports using custom messages already but those have to be updated to the watch somehow (probably by protobuf) and this is not supported yet. Using custom messages if they are not set will just do nothing.
The NotificationActionIconPosition values have been determined on a vívomove Style and might not work properly on other watches.
The evaluation of GBDeviceEvent have been moved in GarminSupport since the notification actions handling uses device events.
Also adds a method to read null terminated strings to GarminByteBufferReader.
Also adds a warning in NotificationListener if the wrong handle is used for replying to a notification.
adds synchronization of supported files from watch to external directory
adds support for Activity and Monitoring files (workouts and activity samples), but those are not integrated yet
adds upload functionality (not used ATM and not tested)
adds notification support without actions
introduces centralized processing of "messageHandlers" (protobuf, file transfer, notifications)
also properly dispose of the music timer when disconnecting
- add FitFile class that deals with parsing and generating outgoing files
- consider all field definitions with number 253 as Timestamps [0]
- add support for "compressed timestamps" in fit file parsing. Those are not returned among the other normal fields but are available through a method of RecordData
- adjust the test cases
[0]48b6554d8a/fitdecode/reader.py (L719)
- refactor the logic of Global and Local messages
- add some Global messages with naming taken from [1]
- Global messages are not enum because there are too many
- introduce the concept of FieldDefinitionPrimitive
- add new Field Definitions
- add support for developer fields and array fields
- add test case for FIT files taken from [0]
[0] https://github.com/polyvertex/fitdecode/
[1] https://www.fitfileviewer.com/
separate the logic specific for GFDI messages from the generally useful logic.
Also centralize the logging in case of leftover bytes while parsing GFDI messages.
The boundaries are enforced on the stored value when decoding, before applying the adjustments for scale and offset.
Also add some tests for the BaseTypes
Introduce new FieldDefinition for Temperature and WeatherCondition (removing the static class)
Add accessors for field data in the containing RecordData, thus keeping the FieldData private
note: only weather message definition and data tested so far
also enable weather support for Instinct 2S and vivomove style
also cleanup some unused constants that have been migrated to new enums in GFDIMessage
additionally switch to new local implementation of GarminTimeUtils with needed methods
- fix DEVICE_SETTINGS message ID
- put all status messages in own package
- allow protobuf handler to change the returned status message to signal unsupported requests
- fix various bugs
This commit takes aims to bring many new garmin devices up to a working status, with basic functionalities such as:
- garmin protocol initialization
- basic message exchange
- support for some messages in Garmin own format
- support for some messages in protobuf format
Currently translated at 94.8% (2592 of 2734 strings)
Translated using Weblate (Russian)
Currently translated at 94.8% (2589 of 2731 strings)
Co-authored-by: 0que <0que@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/freeyourgadget/gadgetbridge/ru/
Translation: Freeyourgadget/Gadgetbridge
Currently translated at 54.6% (1494 of 2735 strings)
Translated using Weblate (Japanese)
Currently translated at 45.8% (1255 of 2735 strings)
Translated using Weblate (Japanese)
Currently translated at 44.3% (1213 of 2735 strings)
Translated using Weblate (Japanese)
Currently translated at 42.3% (1157 of 2734 strings)
Translated using Weblate (Japanese)
Currently translated at 41.5% (1136 of 2734 strings)
Translated using Weblate (Japanese)
Currently translated at 41.5% (1135 of 2734 strings)
Translated using Weblate (Japanese)
Currently translated at 41.5% (1134 of 2731 strings)
Translated using Weblate (Japanese)
Currently translated at 41.4% (1131 of 2731 strings)
Translated using Weblate (Japanese)
Currently translated at 41.1% (1124 of 2731 strings)
Translated using Weblate (Japanese)
Currently translated at 39.3% (1069 of 2716 strings)
Translated using Weblate (Japanese)
Currently translated at 38.3% (1042 of 2714 strings)
Translated using Weblate (Japanese)
Currently translated at 36.8% (1000 of 2711 strings)
Co-authored-by: Nyatsuki <Odamaki@yandex.ru>
Translate-URL: https://hosted.weblate.org/projects/freeyourgadget/gadgetbridge/ja/
Translation: Freeyourgadget/Gadgetbridge