A go library for interfacing with InfiniTime firmware over BLE on Linux.
Go to file
yannickulrich 1f5301f5de Added Navigation service (#5)
InfiniTime implements a [Navigation Service](https://github.com/InfiniTimeOrg/InfiniTime/blob/develop/doc/NavigationService.md). This pull request will add it to the go library by defining a function
```go
func (i *Device) Navigation(flag string, narrative string, dist string, progress uint8) error {
  ...
}
```
From the InfiniTime manual
 * `flag`: the graphic instruction as provided by [Pure Maps](https://github.com/rinigus/pure-maps/tree/master/qml/icons/navigation). A list of valid instruction icons can be found [here](https://github.com/rinigus/pure-maps/tree/master/qml/icons/navigation)
 * `narrative`: the instruction in words, eg. "At the roundabout take the first exit".
 * `dist`: a short string describing the distance to the upcoming instruction such as "50 m".
 * `progress`: the percent complete in a `uint8`

Adding this to the `itd` daemon is straightforward
```patch
diff --git a/api/types.go b/api/types.go
index 281a85b..14c84de 100644
--- a/api/types.go
+++ b/api/types.go
@@ -22,6 +22,13 @@ type FwUpgradeData struct {
        Files []string
 }

+type NavigationData struct {
+       Flag         string
+       Narrative    string
+       Dist         string
+       Progress     uint8
+}
+
 type NotifyData struct {
        Title string
        Body  string
diff --git a/socket.go b/socket.go
index 6fcba5c..91b37c0 100644
--- a/socket.go
+++ b/socket.go
@@ -204,6 +204,10 @@ func (i *ITD) Address(_ *server.Context) string {
        return i.dev.Address()
 }

+func (i *ITD) Navigation(_ *server.Context, data api.NavigationData) error {
+       return i.dev.Navigation(data.Flag, data.Narrative, data.Dist, data.Progress)
+}
+
 func (i *ITD) Notify(_ *server.Context, data api.NotifyData) error {
        return i.dev.Notify(data.Title, data.Body)
 }
```

Co-authored-by: Yannick Ulrich <yannick.ulrich@durham.ac.uk>
Reviewed-on: https://gitea.arsenm.dev/Arsen6331/infinitime/pulls/5
Co-authored-by: yannickulrich <yannick.ulrich@protonmail.com>
Co-committed-by: yannickulrich <yannick.ulrich@protonmail.com>
2022-11-03 19:09:06 +00:00
blefs Assume MTU if not available from BlueZ 2022-10-25 12:36:34 -07:00
internal/utils Switch player to MPRIS interface 2021-11-24 16:31:18 -08:00
pkg/player Handle case where artists value is a single string rather than a slice. Fixes Arsen6331/itd#9. 2022-03-04 12:04:37 -08:00
weather Use timestamp with timezone offset to (finally) fix weather issue 2022-10-20 01:41:15 -07:00
LICENSE Initial Commit 2021-08-19 17:41:09 -07:00
README.md Added Navigation service (#5) 2022-11-03 19:09:06 +00:00
btsetup.go Use adapter ID in btmgmt as well 2022-05-02 20:20:16 -07:00
dfu.go Clarify DFU debug logs 2022-04-23 20:08:49 -07:00
go.mod Update go-bluetooth library for 5.65 support 2022-08-19 14:02:52 -07:00
go.sum Implement resource loading feature 2022-08-29 14:43:16 -07:00
infinitime.go Added Navigation service (#5) 2022-11-03 19:09:06 +00:00
music.go Add debug logging 2022-04-23 19:58:00 -07:00
navigation.go Added Navigation service (#5) 2022-11-03 19:09:06 +00:00
resources.go Close files properly when returning an error (Arsen6331/itd#29) 2022-10-17 12:49:49 -07:00

README.md

InfiniTime

This is a go library for interfacing with InfiniTime firmware over BLE on Linux.

Go Reference


Importing

This library's import path is go.arsenm.dev/infinitime.


Dependencies

This library requires dbus, bluez, and pactl to function. These allow the library to use bluetooth, control media, control volume, etc.

Arch

sudo pacman -S dbus bluez libpulse --needed

Debian/Ubuntu

sudo apt install dbus bluez pulseaudio-utils

Fedora

sudo dnf install dbus bluez pulseaudio-utils

Features

This library currently supports the following features:

  • Notifications
  • Heart rate monitoring
  • Setting time
  • Battery level
  • Music control
  • OTA firmware upgrades
  • Navigation

Mentions

The DFU process used in this library was created with the help of siglo's source code. Specifically, this file: ble_dfu.py