itd is a daemon that uses my infinitime library to interact with the PineTime smartwatch running InfiniTime.
Go to file
2021-08-21 03:07:48 -07:00
cmd/itctl Initial Commit 2021-08-21 01:19:49 -07:00
internal/types Initial Commit 2021-08-21 01:19:49 -07:00
.gitignore Initial Commit 2021-08-21 01:19:49 -07:00
go.mod Remove replace directive and update infinitime library 2021-08-21 01:37:16 -07:00
go.sum Remove replace directive and update infinitime library 2021-08-21 01:37:16 -07:00
itd.service Initial Commit 2021-08-21 01:19:49 -07:00
itd.toml Initial Commit 2021-08-21 01:19:49 -07:00
LICENSE Initial Commit 2021-08-21 01:19:49 -07:00
main.go Watch config for changes and apply automatically 2021-08-21 03:07:48 -07:00
Makefile Initial Commit 2021-08-21 01:19:49 -07:00
music.go Initial Commit 2021-08-21 01:19:49 -07:00
notifs.go Initial Commit 2021-08-21 01:19:49 -07:00
README.md Initial Commit 2021-08-21 01:19:49 -07:00
socket.go Initial Commit 2021-08-21 01:19:49 -07:00

ITD

InfiniTime Daemon

itd is a daemon that uses my infinitime library to interact with the PineTime running InfiniTime.


Features

  • Notification relay
  • Music control
  • Set current time
  • Control socket
  • Firmware upgrades

Socket

This daemon creates a UNIX socket at /tmp/itd/socket. It allows you to directly control the daemon and, by extension, the connected watch.

The socket accepts JSON requests. For example, sending a notification looks like this:

{"type": "notify", "data": {"title": "title1", "body": "body1"}}

It will return a JSON response. A response can have 3 fields: error, msg, and value. Error is a boolean that signals whether an error was returned. If error is true, the msg field will contain the error. Value can contain any data and depends on what the request was.

The various request types and their data requirements can be seen in internal/types. I can make separate docs for it if I get enough requests.


itctl

This daemon comes with a binary called itctl which uses the socket to control the daemon from the command line. As such, it can be scripted using bash.

This is the itctl usage screen:

Control the itd daemon for InfiniTime smartwatches

Usage:
  itctl [command]

Available Commands:
  completion  generate the autocompletion script for the specified shell
  firmware    Manage InfiniTime firmware
  get         Get information from InfiniTime
  help        Help about any command
  notify      Send notification to InfiniTime
  set         Set information on InfiniTime

Flags:
  -h, --help   help for itctl

Use "itctl [command] --help" for more information about a command.

Installation

To install, install the go compiler and make. Usually, go is provided by a package either named go or golang, and make is usually provided by make.

To install, run

make && sudo make install

Cross compiling

To cross compile, simply set the go environment variables. For example, for PinePhone, use:

make GOOS=linux GOARCH=arm64

This will compile itd and itctl for Linux aarch64 which is what runs on the PinePhone. This daemon only runs on Linux due to the library's dependencies (dbus, bluez, and playerctl specifically).


Configuration

This daemon places a config file at /etc/itd.toml. This is the global config. itd will also look for a config at ~/.config/itd.toml.