I have been building one for the past few days, as a Utility rather than a face, and some of what I hit is probably useful to whoever picks this up next. Feature set at a high level include:
- Local time taken from the watch, with a GPS fallback that picks the nearest of the 56 cities
- Configurable second timezone clock that also displays day when it differs from local time
- Handle timezones in one of two ways, change the method on-watch
– Support for all timezones through 2040 using major airports as label
– Alternate timezone shortlist configurable to be relevant to the wearer (timezones defined through the config file)
- Ability to set local timezone from selected second timezone, which is helpful while enroute to a new destination
- Display progress towards step and activity goals
- Display battery status
- Screen wake options (controlled through config file)
- Custom app icon
Why a Utility. Packing it as APP_TYPE "Clockface" produced a package the kernel silently deleted on the next boot, leaving an empty directory. Filed as issue 295. The cause looks like the unconditional -glance_capable flag that fix/uapp-glance-capable-flag addresses: every .uapp claimed a glance interface, and the glance bit outranks the declared type, so a Clockface was taken for a glance and then judged malformed for carrying a GUI. So the type may already work once that lands, which would be good news for this thread.
What the hardware wants. The display board is UNAview_LS012, a reflective memory LCD, and once I understood it better, a few design decisions became obvious:
-
It holds its own pixels, so a static face is nearly free and there is no burn-in to design around. What costs power is how often you update it.
-
So do not put seconds on a face here. A ticking second hand is sixty times the panel traffic, all day, for something nobody needs on a clock. That is not to say that some use cases don’t genuinely need seconds, just that most cases probably don’t.
-
It is readable in daylight without any light behind it, so lighting the backlight on a daytime wrist raise buys nothing. Mine only lights between sunset and sunrise, worked out from the date and a GPS fix, since there is no ambient light sensor. The screen light wake is handled in three ways depending on the configuration choice, disabled, night (default) and enabled.
Numbers, in case they save anyone a night of measuring. ~165mAh cell, 4.20V full.
With my face open, the quietest draw I have measured is about 1mA, which is nearly seven days. Two things I got wrong and fixed: I held the GPS subscription until a fix arrived, which indoors may mean forever, and I left the sensor periods at the driver default of about two seconds when a face redrawing once a minute should ask for 60,000ms. Together those had the average sitting at 3mA, which is two days.
Two small things worth knowing. localtime_r does return local time, though nothing hands an app the offset as a number, so difference it against gmtime_r (thanks to shatter_poetry for narrowing this down). And a held L2 never reaches an app, because the firmware opens its media controls, so my three hold actions live on L1 at different durations with the screen naming each while the button is down.
The question I would most like answered, given the selector is being built: what will a face be expected to provide? Specifically whether it autostarts and stays resident, whether it is suspended when the display sleeps or notified some other way, and whether there is a redraw cadence the firmware expects rather than one an app chooses.
And one about buttons, since it decides how much of a face can be interactive. On the built-in face a single press of L1 opens the app list, so I assume a face does not own the short press. Does it receive button events at all, and does a held L1 reach it? If it does, the idea I would like to try is borrowing: a long press hands L1 and L2 to the face for a few seconds, with something on screen saying so, and a timeout hands them back. That way the system keeps the press a wearer depends on and a face can still be more than a picture. If holds do not reach a face either, that is worth knowing before anyone designs around them.
Happy to try things and report back; I have a face and a willingness to break it.