Is there an always on display basic example anywhere?

I am trying to add always on display capabilities to my watch faces.  I’ve been searching for an example that basically just does time and an always on time so I can learn specifically about it.  Is there one (written somewhat recently would be even better)?

Thanks

  • Just to double check, do you mean always on or always active?

    [https://developer.garmin.com/connect-iq/user-experience-guidelines/watch-faces/]

    Always On (applies to AMOLED watches): user configurable mode where the screen doesn't turn off [but does dim after an inactivity timeout]. CIQ watchfaces need to obey certain burn-in rules (*) to keep the screen on in this mode. CIQ watchfaces can only update once per minute, except for a few seconds after the user turns their wrist [and they're assumed to be looking at their watch], during which time the watchface can update once per second [this period of time is referred to as high-power state]. The period of time when they're not looking at their watch [which is the majority of time] is referred to as low-power state.

    (*) Burn-in rules

    - The original rule was that no pixel can be on continuously for 3 minutes. [I don't think this rule applies to any watches anymore, except maybe the original Venu].

    - The previous rule was replaced with a requirement that up to 10% of pixels could be lit in low-power state

    - The newest rule (for CIQ 5) is only 10% of luminance can be used in low-power state. [e.g. I think this means you could have 100% of pixels lit at 10% brightness, or 10% of pixels lit at 100% brightness.]

    If you want to test your watchface to see if it will stay on in low power mode, when always-on mode is enabled, you can use the 24 hour burn-in test in the simulator: Select File > View Screen Heat Map. Also, if you select Settings > Display Mode > Always On, the simulator will automatically warn you if your watchface is using more than 10% luminance.

    Always Active (applies to MIP watches): refers to watchfaces that can update once per second all the time, either during high-power mode or low-power mode. There's a good thread about this: https://forums.garmin.com/developer/connect-iq/f/discussion/5156/1hz-watch-faces---q-a

    Crystal-Tesla [a fork of the popular Crystal watchface] supports both always on and always active modes. It's not a simple example though: github.com/.../crystal-face

  • Always on (I own/program mostly for Venu series).  Thanks for the link.  I read through it earlier.  I want to make sure I'm heading down the right path.

    I’ve added 2 new functions, onEnterSleep and onExitSleep.  In them, I mark if the watch is in low power mode or not.  Then, in-line with my onLayout and onUpdate I check to see what mode I’m in and adjust the display accordingly.

    I found a program from a wee ways back (ComplexWF, thanks agasin to the OG poster) that I’m trying to gain info from.

    Am I heading the right way?

  • Yes. ComplexWF demonstrates this

    In the view, look at onEnterSleep and onExitSleep, as well as how canBurnIn is set, and what's done in onUpdate.

    In this one in low power with AMOLED, I switch the time from the top half of the screen to the bottom half of the screen, so it avoids the "no pixel on for more than 3 minutes" condition.

    It also runs fine on devices with a MIP display.

  • Thanks. I’m working on higher def graphics watches to start with. It does not appear that I need to check for burn in protection on the newer AMOLED wtahces (lek Venu 3).  Is that correct? I can just check to see if they have always on available (system) and selected (my settings).  Correct?

    Remember, I’m a one step at a time kind of learner, so I know I’ll need the rest later to make my other watch faces more compatible.

  • Follow Up questions...

    Why do I have to check in the normal flow of displaying the watch face what power mode it is in?  Wouldn’t the onPartialUpdate be where I display the AOD time? In my case, all the watches have the onPartialUpdate available to them.

    Second, for the setClip(), I am having issued following where you change it.  This is what you change when you move the display from the top half to the bottom, correct?  I just clear it, re-define it, and re-display in the onPartialUpdate?

  • onPartialUpdate is only run on devices with a MIP display.  Not on devices with an AMOLED display.  With the complexWF run it on something lwith AMOLED ike a venu 2 and a MIP display fenix 5 in the sim, switching the display mode between high power and AOD to see how things work differently, maybe adding some println calls to understand what's happening.

    setClip() defines what part of the screen you are changing in inPartialUpdate so is never called for AMOLED devices,

  • Got it (I think).  Thanks.  I was thinking backwards (onPartial for MAOLED).

  • Well…Doing the AOD for the AMOLED is actually pretty simple (after Jim pointed me towards the front).  Maybe 10 lines of code total.  Not real runtime error checks yet, but it works.  I’m kind of disappointed I waited this long to try.

    Thanks again!

    If you want one more related… Is there a way to “dim” the pixels to help when I go to the older systems?  Mine seem quite bright (I clocked in at less than 0.7% on my burn in test, so technically, I’m good).  I do not have my own set of fonts, so I am trapped with the stock.  I did not find any kind of dim command I could use.  Am I just missing it, or do I need custom fonts for that?

  • In case anyone is referencing this thread for info...

    If you are only updating your info every minute (I am just displaying 2 different times that only display hours and minutes), onPartialUpdate is not needed at all.  I just handle both displays in onUpdate().  This also avoids the whole setClip()/clearClip() requirements.

    I have burn in protection included for all, even though (in theory) the AMOLED displays no longer require it.

  • I have burn in protection included for all, even though (in theory) the AMOLED displays no longer require it.

    I think they do, as the rule for CIQ 5 devices is that only 10% of luminance can be used in low-power mode. (The previous rule was that only 10% of pixels could be lit in low-power mode.)

    You can test what I said by disabling your burn-in protection, simulating an AMOLED CIQ 5 device such as fr965, and selecting Settings > Display Mode > Always On. If I'm right, you should get a warning that the display will automatically shut off due to a violation of the rule (assuming that your watchface normally uses more than 10% of luminance).