openchronos-ng / Blog: Recent posts

New buttons driver and rework of input layer

I just pushed a new patch into the BUTTONS branch which mainly implements:

  • More responsive button input.
  • No more long button presses for STAR and NUM buttons, use STAR+UP and NUM+DOWN respectively instead.
  • Support for continuous (auto-repeated) button presses.

Please let us know if you like the changes.

For the non-lazy, see the commit log

Posted by miknix 2013-03-21 Labels: buttons input

openchronos-ng got a boot menu!

For those of you following the development of openchronos-ng, we got some feedback from users at our IRC channel, saying that sometimes they could not flash the watch over RF (rfbsl). They also said this didn't happen with original TI's firmware.
Since sometimes we also have been unable to use rfbsl, I figured out that it was probably because the wireless updater didn't have enough RAM to store the firmware image. This makes sense because openchronos-ng uses more RAM to minimize the overall (RAM+flashmem) usage.... read more

Posted by miknix 2013-02-20 Labels: boot rfbsl

openchronos-ng and the swap wireless stack

Hello everybody,

The openchronos-ng team has the pleasure to announce that the development efforts to replace simpliciTI with another wireless stack have already started. The new stack, called swap.

What is swap?
The Simple Wireless Abstract protocol is a simple protocol that enables mesh-like wireless functionality using a very low firmware footprint. The current implementation of the swap stack in openchronos-ng takes only a fraction of the simpliciTI size on the firmware. Swap was developed by Daniel Berenguer, the guy behind the panstamps.... read more

Posted by miknix 2012-09-05 Labels: swap

Virtual Screens on openchronos-ng

Hello everybody,

First of all excuse my poor blogging ability because honestly this is the first time ever I'm writing to something resembling a blog.

Now straight to the topic,
I just pushed a commit that introduces a very cool feature. Basically it introduces
virtual screens. What is a virtual screen?

A virtual screen is a pointer to a memory region created by lcd_screen_create(). You can pass that pointer to all of the display functions:


when you do that, the data is not actually written to the real LCD memory but to a dynamic memory region. If you want to directly write to the real screen, just set the screen parameter of any of the above functions to NULL.

You can also copy, at any time, the contents of a virtual screen into the real screen and vice-versa, using the lcd_screen_virtual_to_real() and lcd_screen_real_to_virtual()
functions respectively.

You may now ask, alright but why do we need this?
Suppose you are developing a module which uses the num button to switch between several "screens". An actual example is the clock module, where in the first screen it shows the time, day and month and in the second screen it shows the year. As I was implementing that functionality, I realized the code was getting too complex.
I started wondering if there was a more efficient way of doing it and here we are!

If you look to the clock module, where I'm already using this functionality, you can see that two virtual screens are created.
Each virtual screen saves both segment and blinking information.
So I actually display stuff in the two virtual screens (time, day and month in screen0 and year in screen1) without worrying which screen is actually being shown. At each point where the real screen actually needs to be refreshed, I just copy the contents of the "active" virtual screen into the real screen using lcd_screen_virtual_to_real().

Now some technical notes:
Each virtual screen actually takes 24bytes of memory. It might seem a lot but if you consider the size of the code that you would actually need to write to handle the cases where these functions are meant to be used, I'm pretty sure the size of the code you would need to write would be way bigger. Hence we are saving flash by using a little more RAM.... read more

Posted by miknix 2012-05-13 Labels: virtual screens

Hello world

Well, we just moved to SourceForge, and we are quite excited about that! Just finishing setting everything up, we still have to come up with a nice logo and enrich the wiki pages. But we got the doxygen API working, and code is imported! We still need to create a nice website ;)

Posted by Aljaž Srebrnič 2012-05-13 Labels: intro