Commit Graph

10869 Commits

Author SHA1 Message Date
José Rebelo 636069eaf8 Garmin: Set icon to a round watch 2024-05-04 11:41:48 +01:00
José Rebelo 3b6897b871 Garmin TEST: Disable BUSY_CHECKING flag 2024-05-04 11:36:32 +01:00
José Rebelo 3cf1a9a1d5 Garmin HACK: Use GarminSupport for Vivomove HR 2024-05-04 11:35:06 +01:00
José Rebelo 3d34eacf1c Garmin HACK: Parse messageTypes > 0x8000 2024-05-04 11:35:01 +01:00
José Rebelo bf26764b9c Activity Summary: Draw fit file if available 2024-05-03 20:57:47 +01:00
José Rebelo b1829c2436 Garmin: Persist and display activity
- Steps, hr, intensity
- Sleep stages
- Stress
- SpO2
- Workouts
2024-05-03 20:53:00 +01:00
José Rebelo c8012e18d7 Garmin: Improve computed timestamp parsing
timestamp16 must be applied against garmin epoch.
2024-05-03 20:53:00 +01:00
José Rebelo 11850f819f Garmin: Map more global fit messages
* Events
* Goals
* Gps Metadata
* Laps
* Record
* Respiration rate
* Sessions
* SpO2
* Time in Zone
2024-05-03 20:53:00 +01:00
José Rebelo 2e68d9f12a Garmin: Fix logging during tests 2024-05-03 20:53:00 +01:00
Daniele Gobbetti 226277bcdc Garmin: enable AGPS update for all Instinct 2 devices 2024-05-03 20:28:12 +02:00
kuhy 60066014e0 Garmin protocol: show AGPS data status in settings 2024-05-03 20:28:12 +02:00
kuhy eeb80d712b Garmin protocol: add AGPS data checks 2024-05-03 20:28:12 +02:00
kuhy ad44459fc4 Garmin protocol: install AGPS data as firmware 2024-05-03 20:28:12 +02:00
kuhy c9cb7d788e Garmin protocol: improve detection of successfully sent files (DataTransferHandler) 2024-05-03 20:28:12 +02:00
kuhy 5841058863 Garmin protocol: add support for AGPS data retrieval 2024-05-03 20:28:12 +02:00
Daniele Gobbetti f3b07694b2 Fixup: Introduce device specific writable directory (MAC address)
Add logic to not fetch again files which had the previously defined name
2024-05-03 20:28:12 +02:00
Daniele Gobbetti 4d06eb7339 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 525b395c01 and adapted
2024-05-03 20:28:12 +02:00
José Rebelo 6c79b42130 Garmin: Make fit header crc optional 2024-05-03 20:28:12 +02:00
Daniele Gobbetti fee3b9188c 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-03 20:28:12 +02:00
Daniele Gobbetti 4eabf87e18 Garmin: harmonize device names
All device name strings start with manufacturer name.
Normalized the usage of accented i.
2024-05-03 20:28:12 +02:00
Andreas Schneider d0f0db833c Garmin: add coordinator for Instinct Crossover 2024-05-03 20:28:12 +02:00
Daniele Gobbetti 36781e6958 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-03 20:28:12 +02:00
Daniele Gobbetti 4faf95a417 Garmin: encode unknown weather codes as invalid 2024-05-03 20:28:12 +02:00
meskio 709544e6bd Initial support for Garmin Instinct Solar 2024-05-03 20:28:12 +02:00
José Rebelo 1328ce13e1 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-03 20:28:12 +02:00
Daniele Gobbetti d240597bfe Garmin: add coordinator for Instinct 2 Solar Tactical
confirmed working in https://codeberg.org/Freeyourgadget/Gadgetbridge/issues/3063#issuecomment-1787762
2024-05-03 20:28:12 +02:00
José Rebelo eec88c3dd5 Garmin: Send location to watch 2024-05-03 20:28:12 +02:00
Daniele Gobbetti 7700154b16 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-03 20:28:12 +02:00
a0z 1dec34afea Garmin: Initial support of Instinct 2 Solar 2024-05-03 20:28:12 +02:00
Daniele Gobbetti eba72bd40f 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-03 20:28:12 +02:00
José Rebelo 915d059c1c Garmin: Auto-detect canned messages support 2024-05-03 20:28:12 +02:00
José Rebelo de9e087e2d Garmin: Fix reply to sms 2024-05-03 20:28:12 +02:00
José Rebelo 27b0a5ce49 Garmin: Add setting to disable notifications 2024-05-03 20:28:12 +02:00
José Rebelo 36c52e1900 Garmin Venu 3: Enable canned replies 2024-05-03 20:28:12 +02:00
Daniele Gobbetti b75ecae454 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-03 20:28:12 +02:00
José Rebelo bcb8f7504d Garmin: Map all known files types 2024-05-03 20:28:12 +02:00
José Rebelo 46ea7d87b1 Garmin: Add support for http weather requests 2024-05-03 20:28:12 +02:00
Daniele Gobbetti 77e64b149b 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-03 20:28:11 +02:00
kuhy f46929c080 Initial support for Garmin Vivoactive 4S 2024-05-03 20:28:11 +02:00
Daniele Gobbetti a7d4f3df93 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-03 20:28:11 +02:00
myxor d72113c0cb Initial support for Garmin Vivoactive 5 2024-05-03 20:28:11 +02:00
Daniele Gobbetti bdfab59a81 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-03 20:28:11 +02:00
Daniele Gobbetti ce968e1ea8 Garmin: Add FileDownloadedDeviceEvent and (disabled) file deletion
Also adds (disabled) file deletion in case of already downloaded files
2024-05-03 20:28:11 +02:00
Daniele Gobbetti e6f78bbba4 Garmin: Add DST/Timezone support 2024-05-03 20:28:11 +02:00
hrdl 2673edf05b Add Garmin Forerunner 245 2024-05-03 20:28:11 +02:00
Daniele Gobbetti 9d2a42b173 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-03 20:28:11 +02:00
José Rebelo a21ceb606c Garmin: Fetch activity on demand 2024-05-03 20:28:11 +02:00
José Rebelo b0932d0f17 Garmin: Fix proguard rules for release builds 2024-05-03 20:28:11 +02:00
José Rebelo 3dab968805 Garmin: Allow high MTU 2024-05-03 20:28:11 +02:00
José Rebelo 9c7aa8c22b Garmin protocol: Simplify FILE_TYPE 2024-05-03 20:28:11 +02:00