Featured Post

Site Navigation is in the Left Column

Sunday, February 23, 2025

Small Enhancements

I made a few small enhancements to the GUI.  

The graph shows two lines. The trap line tracks the temperature-pressure curve of the trap.  The tank line tracks the temperature-pressure curve of the tank.  These two lines now display in different colors.

The text for each of these lines now display in their corresponding color.

Each line now has an X on the current data point.  This helps with displaying the data if the line folds back on itself.  

A ring buffer was added to each line to track its data.  This is required due to changes in the GTK library.  The ring buffers hold each datapoint to be graphed for each line.  These ring buffers can be easily resized in code.  The current setting allows for the storage of 1000 datapoints per line.

Upgrade to GTK 3

The upgrade to the latest 3.x version of GTK has been less than impressive.  One of the issues with GTK is that even point-upgrades change functionality.  The library is very powerful but is in desperate need of version control.  

Some of the things I found no longer worked include the following:

The way images are displayed changed.  I was able to easily adapt the code to compensate for this, but the fact it changed on a point upgrade is annoying.

The way lines are dealt with has changed.  In the past, you could plot line segments one at a time.  After each line segment, you could call the stroke() function and the line would be drawn.  The existing lines would remain intact one the screen.  With the latest version, the stroke() function clears the DrawingArea each time stroke() is called.  This is by design and forces the user to track the entire graphic in code so it can be redrawn every time anything changes.  This is very inefficient when it comes to coding.

Sunday, February 9, 2025

Larger State-Transition Diagram

In the blog, you will see that the state-transition diagram is much larger than it needs to be.  

I was able to find an SVG file of that diagram which allows me to make significant adjustments to it.  The nice thing about an SVG is that it's a text file that describes vector graphics.  This allows you to expand a graphic as large as you want.  I did not need the entire state-transition diagram.  I only needed the operational zone.

I modified the original SVG so that it only displays the operational zone of the freeze dryer.  This makes much better use of the screen real estate.  I was able to make the operational zone about 4 times larger than the original diagram that used a PNG.

Update. A LOT has changed!

It has been a while since I have posted, but I HAVE been working on this project.

First and foremost, I moved to another state.  During that time I had to sell 5 properties, buy a property and get it ready for living.

NEW HOME
A large part of the new property has been remodeled (by me) but still has a ways to go.  I have completely gutted and remodeled the living room, entry way and dining room, including soundproofing the walls, correcting structural defects etc.  

I also remodeled the master bedroom, my office and the master closet.

I relaced the well pump and got the entire system working.

I renovated the 2.5 acre yard.

Cut and split (by hand) several cords of firewood.

I still have a den, a bedroom, and 2 bathrooms to remodel...most of them are complete guts.

NEW SHOP
the new property has a massive, climate-controlled shop, complete with a full bath and an explosion-proof paint booth.

With all of its grandeur, the new shop needs a lot of work.  I am looking at a full gut ad replacing sheathing.  In some areas, the plates are rotted out and studs are compromised.  Additionally, it has a 16' wide bay door with an undersized header that needs beefed up.

DEATHS
I have had 2 deaths in my family and my wife has had 2 deaths in hers.

RESOURCE CONTENTION
The project was originally started on the Raspberry Pi3b.  As the project grew and became more complex, it became clear that eh Pi3b was not up to the challenge.  It had significant issues compiling the code, particularly if I changed too many source files at one time.  I resorted to compiling the application several times in a row hoping it would get multiple object files built before it crashed.  I made it a standard to ONLY change one file at a time, if possible.  This helped, but the compilation could still take 5-10 minutes.  

I was looking at cross-compiling, but 1) it is a challenge all it own and 2) I could not really test the code without the I2C physical interface installed o the cross-compiling machine.

I was diligently trying to get a path using cross-compiling, but the Raspberry Pi5 came out before I could get a suitable strategy.

RASPBERRY PI5
I decided to buy a Pi5 but was disappointed to find out it was on back order for 3-5 months.  So I had to wait, ad wait, and wait.  One I received it, I was disappointed to find out that it came with NOTHING...not even a power supply.

So, I had to find a power supply online.  Guess what, they were all sold out, too.  The Pi5 has a low-power mode, but you really need a high-power power supply to run it at its full potential.  The power supply exceeds the power capabilities of any USB-C power module, so I had to wait.  It arrived about 2 months later.

BTW, the PI5 has dual video ports, but they require a cable that was not very common at the time.  It is basically a micro-HDMI connector.  They were also hard to find at the time.

After 8 months of waiting on the Pi5 to be useable, I started porting everything over.  I ran into other issues.  The IDE I was using would not run on the PI5 so I had to change IDEs.  The libraries I was using were not installed on the PI5 as it had newer versions installed.

I tried porting the application over to the newer versions of the libraries, but it did NOT go well.  I originally developed using GTK2, which was a bolt-on to the PI3b.  Well, that library was not installed on the PI5.  So, I decided to switch over to the latest and greatest GTK4.  Boy was that an adventure!  Apparently, the developers of the library radically change things between major revisions.  GTK4 is NOT and upgrade of GTK2, it is a total redesign, complete with no viable documentation and no viable upgrade path.

After many long hours of trying, I bastardized my PI5 by hand-installing a GTK3 version on it.  I was able to go to GTK3 (with some significant redesign.)  at this point, GTK4 is not an option.  I will never use GTK for a project again.  It was a HUGE mistake!

One of the major changes in GTK3 is in the way it handles DrawingAreas.  Someone thought it would be a good idea to require the entire drawing area to be redrawn every time you wanted a change to be made.  They made it impossible to write a custom function to write to the drawing area without doing it through an event handler.  As a result, you can no longer just draw a line on a drawing area.  You have to stage the data to draw the line, then trigger a drawing area redraw.  This triggers the on_draw handler which you then use to call another custom function that reads the draw data and draws it.  Basically, it's a hokey work around to get around the fact they do not allow you to write to a drawing area dynamically, anymore.

WIRING PI
In addition to the above, the author of the WiringPI library has stopped developing it and has killed it from his web page.  The PI5 has it installed, but it is not supported in any way.  So I decided to write my own library.

Fortunately, I abstracted WiringPi functions in my original design, so it was fairly simple to inject my library into the project.

FINALLY
As of today, the Freeze Dryer code is back up and operational running on the PI5.  

MORE ISSUES
When we moved, I had to leave behind my project refrigerator.  I have to find an old refrigerator I can cannibalize for parts.