The config refactor in addf7ff6a broke health settings on GTR3 and GTS3
- GTS 3 and GTR 3 health configs use protocol v1. The only difference
seems to be that the steps goal is a SHORT instead of an INT.
- It needs a refactoring from the ground up to better handle different
versions, but this is enough to get the GTR 3 and GTS 3 working.
- File uploads are split in chunks, with the size dictated by the
watches. There seem to be 2 protocol versions, without any noticeable
differences
- Extract the file upload logic to a standalone class. This makes it
easier to keep track of concurrent requests, each of which have their
own session id
- Icons larger than 8KB will end up split in multiple chunks - we now
handle that correctly
- Notification icons are also requested in 2 different formats, but
the actual encoding seems to be the same, with only a different id
This has some advantages:
- Less stuff to download for building Gadgetbridge (CI Speedups)
- Shorter build time (no need to build shared library for all supported architectures)
- Easier debugging
- etc :P
What I did:
- remove all curves except B163 to make porting easier
- port to java with brain switched off
- fix the "java has no unsigned" bugs
- add some helpers to convert int[] to byte[] and back because java has no casts
The result is ugly, no one would write such crappy code from scratch, but I tried to
keep it as close to the C code as possible to prevent bugs. Since I did not know what
The previous one was too long, now that we loop it.
This one should be a sane default, even for devices that do not support
it (eg. Bip), as the total time is 1.5s.
- Reply with HTTP 404 to unknown weather endpoints
- Add some missing fields to weather responses
The official Zepp app itself gets a 404 when calling a /weather/tide
endpoint, so we don't know what the watch is supposed to receive.
Weather also seems to still not work correctly on the GTS 3, but this at
least fixes the request spam that was coming from the watch on the tide
endpoint.
Fix heartrate notify staying on after manual measurement.
Fix "live measurement" to use "continue" packet instead of restarting measurement every second.
Add basic initial support for the Amazfit GTS 3 based on Xiaomi Smart Band 7 support.
What was already tested (other features might work too):
**Implemented features**
Connection
Reconnect after Airplane mode
Set time
Notifications
Send to band
Delete notifications on phone/band when deleted on the other
Calls
Custom notification icons
Handle + ack notification replies from band
Music (with youtube music)
Music Info
Volume
Music buttons
Find Phone from band / stop on band when stopped on phone
Battery Info (request, parse)
Flash Watchface
Night mode (mode, schedule)
Lift wrist (mode, schedule, sensitivity)
(Not) working features might be similar to Miband 7.
Tested on
FW: 7.42.5.1
HW: 0.76.17.4
Co-authored-by: Andreas Sedlmayer <sedlmayer.andreas89@gmail.com>
Reviewed-on: https://codeberg.org/Freeyourgadget/Gadgetbridge/pulls/2871
Co-authored-by: sedy89 <sedy89@noreply.codeberg.org>
Co-committed-by: sedy89 <sedy89@noreply.codeberg.org>
The notification, once enabled, can only be triggerd once per day, mind that when testing.
Packet structure:
```
00:c2:00:3a:01:00:00:00:01:88:13:00:00
00:c2:00: - chunked transfer type 2
3a: - command set goals/notificatrions
01: - 01 - set steps goal, 02 - set calories goal, 03 - both
00:00:00: - delimiter
01: - enable steps goal notification
88:13: - set steps goal (5000)
00:00 - delimiter
```
This is sent when goal notification switch is enabled in Zepp app:
```
00:c2:00:3a:03:00:00:00:01:40:1f:00:00:01:2c:01:00:00
00:c2:00: - chunked transfer type 2
3a: - command set goals/notificatrions
03: - 01 - set steps goal, 02 - set calories goal, 03 - both
00:00:00: - delimiter
01: - enable steps goal notification
40:1f: - steps goal (8000)
00:00: - delimiter
01: - enable calories goal notification (seems to be not used in Neo)
2c:01: - set calories goal (300)
00:00 - delimiter
```
And when disabled:
`00:c2:00:3a:03:00:00:00:00:40:1f:00:00:00:2c:01:00:00`
Reviewed-on: https://codeberg.org/Freeyourgadget/Gadgetbridge/pulls/2780
Co-authored-by: NekoBox <nekobox@noreply.codeberg.org>
Co-committed-by: NekoBox <nekobox@noreply.codeberg.org>
this PR aims to add device for multiple connected devices at once.
A lot of stuff already works, some things need to be done:
- [x] change DeviceCommunicationService to hold multiple devices and supports
- [x] implement connect / disconnect logic
- [x] widgets, not really suited for multiple devices, so far
- [x] change the notification to show multiple devices
- [ ] change GBDeviceService#onFindDevice and similar API functions to target individual devices, not all connected.
- [x] move auto-reconnect setting to device settings
- [x] fix music event crash
- [x] work out behaviour when pressing "connect" from notification
- [ ] handle service crashes
- [ ] suit coordinator methods for multiple devices of same kind
- [x] change ACL_CONNECTED receiver to connect to devices that are not currently registered in DeviceCommunicationService
- [ ] adjust after-boot auto-connection logic
- [ ] fix hanging device support. Device says disconnected, GB says connected
- [x] firmware updater doesn't work
My attempt to make onFindDevice work was to change the arguments to ```EventHandler#onFindDevice(GBDevice device, boolean start)```.
The Problem is that this forces the device-specific implementations to also accept GBDevice as an argument.
Co-authored-by: Daniel Dakhno <dakhnod@gmail.com>
Co-authored-by: Andreas Shimokawa <shimokawa@fsfe.org>
Co-authored-by: dakhnod <dakhnod@gmail.com>
Reviewed-on: https://codeberg.org/Freeyourgadget/Gadgetbridge/pulls/2526
Co-authored-by: dakhnod <dakhnod@noreply.codeberg.org>
Co-committed-by: dakhnod <dakhnod@noreply.codeberg.org>
- Fitness App Tracking Start already works, Stop is commented out for
time being
- Catch exception in case the package name for controlled app doesn't
exist/work
This really seems to be the same device, but it does have a different firmware
and a different bluetooth name.
Do this to prevent cross flashing - which might actually be okay but we do not know.
New Huami Amazfit GTS 2 Mini activity for Outdoor Trekking/Hiking.
Reviewed-on: https://codeberg.org/Freeyourgadget/Gadgetbridge/pulls/2528
Co-authored-by: Sebastian Krey <skrey@noreply.codeberg.org>
Co-committed-by: Sebastian Krey <skrey@noreply.codeberg.org>
This is used for setting world clock and setting canned messages for call rejection.
This PR implements setting the canned messages, but unfortunately the feature is somehow not "unlocked"
This affects InfiniTime and Huami
For InfiniTime it probably resulted in the wrong time being displayed
For Huami is resulted to request the wrong data from the band/watch
We used timezone.getDSTOffset() which always returns the DST offset (also in non
DST time)
We need to pass the time being observed to calendar.getOffset() to get the real
offset including DST at that specfic time which then either includes DST offset or not.
fixup! huamni: send windspeed in beaufort
BipS: send windspeed as km/h
huami: Always send sunrise and sunset
There is no need to look at send_sunrise_sunset, this is peble spesific
because it could be annoying on that platform (an extra line in the
timeline). On huami devices, the watchface desides what to show.
Signed-off-by: Robbert Gurdeep Singh <git@beardhatcode.be>
Mi5: set supportsSunriseSunsetWindHumidity to true
Signed-off-by: Robbert Gurdeep Singh <git@beardhatcode.be>
huamni: send windspeed in beaufort
Signed-off-by: Robbert Gurdeep Singh <git@beardhatcode.be>
Co-authored-by: Robbert Gurdeep Singh <git@beardhatcode.be>
Reviewed-on: https://codeberg.org/Freeyourgadget/Gadgetbridge/pulls/2247
Co-Authored-By: beardhatcode <beardhatcode@noreply.codeberg.org>
Co-Committed-By: beardhatcode <beardhatcode@noreply.codeberg.org>
Amazfit GTS2/GTR2: Add missing menu items
Fixes#2193Fixes#2230Fixes#2242
Amazfit GTS2/GTR2: Fix setting menu items
At least on the GTR2e, including the "watchface" menu item causes the
configuration request to be ignored. Assuming the other GTS2 and GTR2
variants behave the same, this patch ensures the forceWatchface argument
is set to false when setting display items.
Additionally, we now use the correct resource ID for the default
settings.
Co-authored-by: Vianney le Clément de Saint-Marcq <code@quartic.eu>
Reviewed-on: https://codeberg.org/Freeyourgadget/Gadgetbridge/pulls/2249
Co-Authored-By: Vianney le Clément de Saint-Marcq <vianney@noreply.codeberg.org>
Co-Committed-By: Vianney le Clément de Saint-Marcq <vianney@noreply.codeberg.org>