1
0
mirror of https://codeberg.org/Freeyourgadget/Gadgetbridge synced 2024-11-06 02:07:05 +01:00
Commit Graph

10290 Commits

Author SHA1 Message Date
José Rebelo
ef11dd0f16 Flush logs before sharing 2024-05-26 15:38:11 +01:00
José Rebelo
7b21f85613 Garmin Venu 2 Plus: Initial support 2024-05-26 09:04:57 +01:00
José Rebelo
db33bc3ee9 Xiaomi Spp: Log plaintext payload
It's very hard to troubleshoot issues with Xiaomi Spp devices from logs
without having access to the plain-text payload, so we now log it.
2024-05-25 09:35:25 +01:00
José Rebelo
b704276e49 Garmin: Fix 304 response when agps matches cache 2024-05-24 22:24:09 +02:00
Daniele Gobbetti
ba9e5c8a77 Garmin: various minor changes
remove message placeholders referring to legacy code,
remove try-catch from the weather data message building method
lower the frequency of music control messages
2024-05-24 22:24:09 +02:00
Daniele Gobbetti
9c4da444cf Garmin: fix protobuf chunked fragments handling
remove chunk from the map once it is complete if it is incoming, fix the removal of outgoing chunks
also return a warn log message if the protobuf status is not OK.
2024-05-24 22:24:09 +02:00
José Rebelo
5224244f74 Garmin: Fix edge case in sleep overlay
If the sleep session ends outside the queried time range, we need to
fetch the next sleep stage outside the range so that we can overlay it
properly.
2024-05-24 22:24:09 +02:00
José Rebelo
8e1511bd6e Garmin: Fix overcounting of steps in some cases
We need to take into account the previous sample that is outside the
range that was queried, so that we can correct the first sample in the
range.
2024-05-24 22:24:09 +02:00
José Rebelo
39bbd2e579 Garmin: Improve transaction logging 2024-05-24 22:24:09 +02:00
José Rebelo
d741b6ff66 Garmin: Ignore agps request if etag matches
Some watches reboot on http 304
2024-05-24 22:24:09 +02:00
José Rebelo
ca8d595493 Garmin: Configure contacts 2024-05-24 22:24:09 +02:00
José Rebelo
f3cc07af27 Garmin: Fix COBS encoding of long non-zero sections 2024-05-24 22:24:09 +02:00
José Rebelo
88f687496c Garmin: Improve logging during file downloading 2024-05-24 22:24:09 +02:00
José Rebelo
88a9c81dcc Garmin: Implement etag for agps requests 2024-05-24 22:24:09 +02:00
Daniele Gobbetti
ea1c1c808c Change java package of garmin protobuf files 2024-05-24 22:24:09 +02:00
Daniele Gobbetti
0cf73a2120 Remove all the legacy vivomove HR code.
Also replaces support for device through the new garmin code path.
The Entities are preserved to enable on-demand database migration in case some user had previously synchronized data.
2024-05-24 22:24:09 +02:00
José Rebelo
2f729dbe29 Garmin: Allow agps updates for multiple URLs 2024-05-24 22:24:09 +02:00
lorddavidiii
a0943649bd Initial support for Garmin Vivoactive 4 2024-05-24 22:24:09 +02:00
José Rebelo
6f9f49aa4a Garmin Venu 3: Fix device name 2024-05-24 22:24:09 +02:00
José Rebelo
2ac83fbc31 Garmin: Set default icon to a round watch 2024-05-24 22:24:09 +02:00
José Rebelo
f210b3b732 Garmin: Fix overcounting of steps
When going past midnight we were not resetting the number of steps,
resulting in a negative value, which would cause the next sample to
overcount.
2024-05-24 22:24:09 +02:00
Daniele Gobbetti
709afc5df7 Garmin: fix spurious protobuf messages 2024-05-24 22:24:09 +02:00
Daniele Gobbetti
2a9a01e40b Garmin: improve weather information
Add Aqi Field Definition and field to today weather and daily forecast, as both are available in WeatherSpec.
Add Feels like temperature to hourly forecast but populate with the forecasted temperature as the field is not available in Weatherspec for hourly.
Use temperature Field Definition for dew point and add it to today's weather.

Fields dew point and air quality could have been removed from the hourly weather definition but are kept in to test compatibility of these changes with watches.
2024-05-24 22:24:09 +02:00
Daniele Gobbetti
ebe371de3c Garmin: Remove handling of legacy cache directory 2024-05-24 22:24:09 +02:00
Daniele Gobbetti
c3a6db3309 Garmin: adjust test after adding distance field 2024-05-24 22:24:09 +02:00
José Rebelo
553f6171e6 Garmin: Map all supported workout types 2024-05-24 22:24:09 +02:00
José Rebelo
8be679d1fd Garmin: Overwrite files if local size is 0, omit date if equal to garmin epoch 2024-05-24 22:24:09 +02:00
José Rebelo
aee42ec1be Garmin: Fallback to session for workout type 2024-05-24 22:24:08 +02:00
José Rebelo
4d78fdd883 Garmin: Fix overcounting of steps 2024-05-24 22:24:08 +02:00
José Rebelo
904c995a3e Garmin: Throttle notification updates on fit parsing 2024-05-24 22:24:08 +02:00
José Rebelo
6f5f944235 Garmin: Fetch fit files HRV status 2024-05-24 22:24:08 +02:00
José Rebelo
f7bfd56d46 Garmin: Process downloaded fit files asynchronously
Fixes occasional ANR while syncing activity data.
2024-05-24 22:24:08 +02:00
José Rebelo
a25d8eae30 Activity Summary: Draw fit file if available 2024-05-24 22:24:08 +02:00
José Rebelo
0b07f36817 Garmin: Persist and display activity
- Steps, hr, intensity
- Sleep stages
- Stress
- SpO2
- Workouts
2024-05-24 22:24:08 +02:00
José Rebelo
89046d0815 Garmin: Improve computed timestamp parsing
timestamp16 must be applied against garmin epoch.
2024-05-24 22:24:08 +02:00
José Rebelo
bdd698b7d3 Garmin: Map more global fit messages
* Events
* Goals
* Gps Metadata
* Laps
* Record
* Respiration rate
* Sessions
* SpO2
* Time in Zone
2024-05-24 22:24:08 +02:00
José Rebelo
92b838f90c Garmin: Fix logging during tests 2024-05-24 22:24:08 +02:00
Lolek
1ecb1feb4d Initial support for Garmin Swim 2 2024-05-24 22:24:08 +02:00
hrdl
165f41a08f Add AGPS for Garmin Forerunner 245 2024-05-24 22:24:08 +02:00
Daniele Gobbetti
906ad0c68f Garmin: enable AGPS update for all Instinct 2 devices 2024-05-24 22:24:08 +02:00
kuhy
880e18fffc Garmin protocol: show AGPS data status in settings 2024-05-24 22:24:08 +02:00
kuhy
91c2408170 Garmin protocol: add AGPS data checks 2024-05-24 22:24:08 +02:00
kuhy
22fafebd91 Garmin protocol: install AGPS data as firmware 2024-05-24 22:24:08 +02:00
kuhy
9f9441ba01 Garmin protocol: improve detection of successfully sent files (DataTransferHandler) 2024-05-24 22:24:08 +02:00
kuhy
4152ec1570 Garmin protocol: add support for AGPS data retrieval 2024-05-24 22:24:08 +02:00
Daniele Gobbetti
457ff8b88f Fixup: Introduce device specific writable directory (MAC address)
Add logic to not fetch again files which had the previously defined name
2024-05-24 22:24:08 +02:00
Daniele Gobbetti
8c88cc992a Introduce device specific writable directory (MAC address)
Also adds temporary method to move the fetched files from the legacy path to the new one which does not include the device name.
Also moves the FileIndex to the end of the cached files to allow for easier sorting.

Cherry-picked from 525b395c01ce57449ee9a8f74af663595223279e and adapted
2024-05-24 22:24:08 +02:00
José Rebelo
72f1d0c82c Garmin: Make fit header crc optional 2024-05-24 22:24:08 +02:00
Daniele Gobbetti
3abf78d8c2 Garmin: enable unicode Emoji for all devices
This seems to be widely supported by garmin devices, hence enable it in the base coordinator. Specific devices not supporting Unicode Emojis can override this method and return false.
2024-05-24 22:24:08 +02:00
Daniele Gobbetti
f1f77abe18 Garmin: harmonize device names
All device name strings start with manufacturer name.
Normalized the usage of accented i.
2024-05-24 22:24:08 +02:00
Andreas Schneider
b6468db13c Garmin: add coordinator for Instinct Crossover 2024-05-24 22:24:08 +02:00
Daniele Gobbetti
a5dbb7fea7 Garmin: fix regression in call handling
Add a fictitious action to the notification to enable reply/hangup/reject from the watch.
Also fixes the behavior on sms reply, which should also reject the incoming call.

Change the log level in case some of the canned messages types are left as default to info, as this is a supported scenario.
2024-05-24 22:24:08 +02:00
Daniele Gobbetti
179f8a3a9e Garmin: encode unknown weather codes as invalid 2024-05-24 22:24:08 +02:00
meskio
77f119c211 Initial support for Garmin Instinct Solar 2024-05-24 22:24:08 +02:00
José Rebelo
1b45d71cc7 Garmin: Improve fit parsing
* Remove the dependency on PredefinedLocalMessage from generic fit parsing code
* Standardize toString methods, omit types for known fields
* Return null on unknown field number or names, instead of crashing
* Map more Global FIT messages (device info, monitoring, sleep stages, sleep stats, stress level)
* Prioritize "timestamp" over "253_timestamp" if specified explicitly in the global message definition
* Introduce RecordData wrappers for each global message, allowing us to have proper types when getting data. If missing or unknown, the getter returns null. All classes are auto-generated by the FitCodeGen.
* Persist a list of RecordData, instead of a Map from RecordDefinition
* Fix parsing of compressed timestamps - keep them in computedTimestamp on each data record
* Use timestamp16 if available in Monitoring records
2024-05-24 22:24:08 +02:00
Daniele Gobbetti
9e1bf07cd2 Garmin: add coordinator for Instinct 2 Solar Tactical
confirmed working in https://codeberg.org/Freeyourgadget/Gadgetbridge/issues/3063#issuecomment-1787762
2024-05-24 22:24:08 +02:00
José Rebelo
3c5eada403 Garmin: Send location to watch 2024-05-24 22:24:08 +02:00
Daniele Gobbetti
e46ea03693 Garmin: calendar integration improvements
use the protobuf fields described in the documentation[0]
build the message according to the requested fields

[0] https://gadgetbridge.org/internals/specifics/garmin-protocol/#calendarevent
2024-05-24 22:24:08 +02:00
a0z
ed0d41aa3a Garmin: Initial support of Instinct 2 Solar 2024-05-24 22:24:08 +02:00
Daniele Gobbetti
416b7b075c Garmin: fix notification crashes and handle SMS correctly
It looks like (some) watches really don't like having an empty list of actions, hence enable the legacy "refuse" action in every case, leaving it empty and inactive.
Further display the SMS sender in the notification and enable the correct code path for the reply action to work.
2024-05-24 22:24:08 +02:00
José Rebelo
cbd2c040bb Garmin: Auto-detect canned messages support 2024-05-24 22:24:08 +02:00
José Rebelo
9f1420e496 Garmin: Fix reply to sms 2024-05-24 22:24:08 +02:00
José Rebelo
cf02a02a48 Garmin: Add setting to disable notifications 2024-05-24 22:24:08 +02:00
José Rebelo
33eb748b64 Garmin Venu 3: Enable canned replies 2024-05-24 22:24:08 +02:00
Daniele Gobbetti
dbc270ad9f Garmin: use developer device setting for keeping data on device
Make use of the previously added preference to toggle file archival (deletion) on the watch.

Default is true (keep data on device) until we are sure of the consequences.
2024-05-24 22:24:08 +02:00
José Rebelo
d73eb849e6 Garmin: Map all known files types 2024-05-24 22:24:08 +02:00
José Rebelo
d8dcc57813 Garmin: Add support for http weather requests 2024-05-24 22:24:08 +02:00
Daniele Gobbetti
01d48cde91 Garmin: Rename LocalMessage to PredefinedLocalMessage and clarify its usage
PredefinedLocalMessage are only useful for FIT messages and should not interfere with FIT files. The only impact of using the local message in fit files was in the textual output, but it was confusing.

Add an explicit constructor to RecordHeader if PredefinedLocalMessage should be taken into account, and use this only in fit messages leaving the default constructor for fit files.

Also adjusts the test case as textual output comparison needs to be fixed.
2024-05-24 22:24:08 +02:00
kuhy
de019fc00a Initial support for Garmin Vivoactive 4S 2024-05-24 22:24:08 +02:00
Daniele Gobbetti
698908a589 Garmin: Add support for custom replies (notifications and calls)
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.
2024-05-24 22:24:08 +02:00
myxor
15916635e1 Initial support for Garmin Vivoactive 5 2024-05-24 22:24:08 +02:00
Daniele Gobbetti
45c13675e0 Garmin: Add support for replying to notifications
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.
2024-05-24 22:24:08 +02:00
Daniele Gobbetti
54070b2652 Garmin: Add FileDownloadedDeviceEvent and (disabled) file deletion
Also adds (disabled) file deletion in case of already downloaded files
2024-05-24 22:24:08 +02:00
Daniele Gobbetti
2c70f1a616 Garmin: Add DST/Timezone support 2024-05-24 22:24:08 +02:00
hrdl
69934b2d7c Add Garmin Forerunner 245 2024-05-24 22:24:07 +02:00
Daniele Gobbetti
42e44de1ac Garmin: Support file archival (deletion) on watch
Also add original timestamp to local cache filename as the file identifier are reused
Also fix imports of Test class
2024-05-24 22:24:07 +02:00
José Rebelo
5c57392b85 Garmin: Fetch activity on demand 2024-05-24 22:24:07 +02:00
José Rebelo
0d230ce0a5 Garmin: Fix proguard rules for release builds 2024-05-24 22:24:07 +02:00
José Rebelo
2eb342860a Garmin: Allow high MTU 2024-05-24 22:24:07 +02:00
José Rebelo
aaa3e086d0 Garmin protocol: Simplify FILE_TYPE 2024-05-24 22:24:07 +02:00
José Rebelo
fb06a48756 Garmin protocol: Fix linter warnings 2024-05-24 22:24:07 +02:00
José Rebelo
72de9bafe9 Garmin protocol: Introduce GarminCoordinator 2024-05-24 22:24:07 +02:00
José Rebelo
4c734e4717 Garmin protocol: fix crash when stopping find phone 2024-05-24 22:24:07 +02:00
Daniele Gobbetti
e6365638d4 Garmin protocol: basic file transfer and notification handling
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
2024-05-24 22:24:07 +02:00
Daniele Gobbetti
9dee71df6f Garmin protocol: enable media volume control from watch 2024-05-24 22:24:07 +02:00
Daniele Gobbetti
14c6ce1a3a Garmin protocol: store max packet size from DeviceInformationMessage
also adds messageType to the warnifleftover log message
2024-05-24 22:24:07 +02:00
Daniele Gobbetti
6cb5184e2b Garmin protocol: various changes
- 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)
2024-05-24 22:24:07 +02:00
Daniele Gobbetti
e814a63590 Garmin protocol: change naming and logic of several FIT classes
- 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/
2024-05-24 22:24:07 +02:00
Daniele Gobbetti
b2f995b736 Garmin protocol: create helper class GarminByteBufferReader
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.
2024-05-24 22:24:07 +02:00
Daniele Gobbetti
8524426b70 Garmin protocol: create custom GBDeviceEvent for weather request 2024-05-24 22:24:07 +02:00
Daniele Gobbetti
4054326535 Garmin protocol: use message enum instead of id in GFDI Messages 2024-05-24 22:24:07 +02:00
Daniele Gobbetti
c8c51064c3 Garmin protocol: refactoring and fixes of BaseTypes
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
2024-05-24 22:24:07 +02:00
Daniele Gobbetti
71f497ecbb Garmin protocol: create specific field definition for day of week 2024-05-24 22:24:07 +02:00
Daniele Gobbetti
e323e7fbde Garmin protocol: move field encode/decode interface to the FieldDefinition
This allows for semantic subclassing the FieldDefinition.
A FieldDefinitionTimestamp subclass is introduced as example
2024-05-24 22:24:07 +02:00
Daniele Gobbetti
4313fc833a Garmin protocol: fix invalid signed int base type value 2024-05-24 22:24:07 +02:00
Daniele Gobbetti
e691042265 Garmin protocol: add initial support for FIT messages
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
2024-05-24 22:24:07 +02:00
Daniele Gobbetti
afe41ee563 Garmin protocol: fixes
- 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
2024-05-24 22:24:07 +02:00
Daniele Gobbetti
559a73cc5e Garmin protocol: initial refactoring and basic functionalities
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
2024-05-24 22:24:07 +02:00
Gordon Williams
7ea2261ba3 Bangle.js: honour the enable_calendar_sync setting
Allow handleCalendarSync to send a single `calendar-` command with all IDs before it starts adding new items (faster)
2024-05-24 09:26:37 +01:00
Gordon Williams
4da5a73cd6 Bangle.js - remove large lines of _____ from calendar (generated by google teams) 2024-05-23 09:48:37 +01:00