When I say move from ethernet to serial remote, the code for ethernet is left behind, this causes severe problems as it means the dependencies on that are still in place.
There are a number of minor improvements needed in both UI's
Make the controller UI production ready by making editability better, and use a sustainable method of handling updates.
Add new sub-menus to the designer UI for recently edited projects, all sketch directories that contain menu (EMF) files and all examples packed in tcMenu.
Auto save after generation, source of lost changes!
Ensure structure is not dirty before any menu load operation
When the time out triggers and the menu is reset to its default state the editor and active states are not reset as well. Sometimes leaving two items editable.
In order to compile in visual micro the .cpp and .h files containing the menu definition (which are currently the same name as the project) need to be renamed. They will be renamed in 1.2 to projectName-menu.h & cpp
This needs to be done in each of the examples too in order to avoid confusion. A note on the release must indicate that the old files be removed.
At the moment the combination of no backlight setting on LiquidCrystalIO and no option for it in the generator means it is not possible to set the backlight out of the box.
The workaround is to manually set the backlight on the IO device by keeping a reference to it, and setting the backlight pin as output with the appropriate setting.
A problem has been detected in the Java side of the API. It looks like under some circumstances messages are being buffered in the input queue and not being processed until more messages are received. Shows up more with UipEthernet than Ethernet.
At the moment there is an oversight in the distribution and library structure. This means that AT24Cx and AdaFruitGFX libraries always must be on the path, but are not included with tcMenu / IoAbstraction. Workaround: copy these two libs into your libraries directory manually for now..
AT24:
Look into how to package AT24Cx as part of TcMenu and IoAbstraction such that no such installation problems are
AdaGFX:
Move the renderer into a separate module of it's own, or look at making the renderer so that it's copied into the users program directory with sensible defaults. This would make more sense as then custom rendering is much easier, and will probably be quite common.
The last area of hardwired code generation is in the menu structure initializers in the Java generation code. This needs to be replaced with a more generic system that will make it cleaner on 32-bit boards, especially ESP8266 where the compiler really doesn't like all the progmem declarations (which make no sense on 32-bit boards that are not Harvard arch. anyway.
It will be really useful to take values from the user. Also having to option to use this keypad with a rotary encoder will be really cool. One can, say, make a digital power supply with it.
Common theme here, the Arduino code should have some basic unit tests that provide a degree of confidence that the library is working properly. To start with maybe something that confirms proper functioning of the menu manager / items would be enough.
At the moment, too much logic by far is in the LCD renderer, this needs to be factored out into the base package, and the AdaGfx based graphical renderer will be the ultimate test of this.
Not really a bug, but something to look at in that there is a dependence on a very recent commit to the Print.h file - availableForWrite.
See how things pan out to see if its supported on at least AVR, SAMD and ESP8266.
Workaround: go to board manager in your IDE (Arduino IDE at the top of the board options) and update your boards.
Given that the UI Generator has now become pretty much the defacto way to generate menus, at least a degree of testing needs to be added to it, to provide some degree of automated testing, saving a lot of time during release, and increasing confidence in release quality.
This first JIRA should set the stage by testing some core flows in the UI, along with the other associated JIRA that will ensure the generator itself is fully tested.
On some machines it may not be possible to locate the Arduino directory, and therefore the libraries directory. In these situations pop up a dialog requesting the location of the Arduino directory.
Write a basic ethernet renderer that works with all APIs, this will initially be targeted at the standard ethernet libraries for ethernet shields. It will be easy to improve later for other ethernet/wifi chipsets.
As the generator will generate code that may not be compatible with older libraries, it is important that the designer can check the version of the libraries installed, and indicate when they are not up-to-date. It should also offer to update them, and only update when they need updating.
It appears that on large menu structures the name editing does not work as expected. The below appears to work on smaller menus, but the menu in question is quite large. Create a unit test that tests this case with over 200 items in three level nestings.
Copied from forum:
I have an item named "1Light 1".
I backspace the first "1" so it looks like "Light 1".
I type "1" and only the entry field updates everything else still says "Light 1".
I type "0" after the "1" and everything updates and says "10Light 1".
I backspace the "0" and only the field updates to "1Light 1". Everything else looks like "10Light 1".
I backspace the "1" and everything updates to "Light 1".
I write "1" once more to try to get to my original "1Light 1" but it only shows up in the field everything else says "Light 1"
The designer UI plugin facilities should be completed so that they can be shipped in separate jar files completely separate to the main UI. It is still an open question if one or more than one should be used for the initial basic set.
These plugins will contain all the code generators for displays, remotes and input. These will be automatically added to the Code generator. The idea of an I’d will be replaced by uuid, making it easy to handle shared plugins.
One of the open source projects should be used as the exemplar for others building a plugin.
The first display will probably be a 320x240 display 2.2" in size. But it should be fairly easy to use different units based on AdaGfx. Depends on the work to clean up base renderers.
We need to write a connector facility into the menu that allows them to be controlled remotely. Initial implementation will be RS232 with the Java API publicly available.
Initial protocol will be a text based protocol using simple tag value pairs that is very easy to decode. This will also allow other languages with less competent network and byte order handling to have easy APIs.
The remote layer and protocol shall be replaceable at runtime, such that other implementations can be later added.
Before the 1.3 release which will remove the beta / in development status some small code cleanups are needed on both the embedded and Java side. From this point onwards we'll try and minimise breaking changes.
The analog type should provide a far greater degree of helper methods to aid with setting and reading its values. This will be in the form of helper methods to and from float and to and from a simple fixed-point numeric format called WholeAndFraction.
For remote connections there are a few things that need to happen to make it production ready. These are listed below:
A basic level of authentication should be available that at least uses a key or pass-code before accepting connections. This is not for over internet situations, rather just for simple LAN security.
Each menu should have a UUID generated by the designer application, this should never change during the application lifetime.
When a menu item is updated remotely, the server should respond with a special update that also forms as an acknowledgment too.