Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Official 5.4 Beta Release Thread
#31
5.3.931
  • My safe enum work broke the drops downs where expression types are set. It is a sort of messy scenario and I missed reproducing the messiness correctly when I updated that. It wasn't skipping the first 'None' statement type when it loaded the statements (after unused and reg ex) and that pushed everything down one in the list. The data on disc was fine, but it would show up wrong in the dialogs when you edited them.
Dean Roddey
Explorans limites defectum
Reply
#32
5.3.932
  • The Z-Wave driver doesn't attempt to send queued msgs for battery powered units when it gets a NIF. This should be done since we can't really get a wakeup in most cases until we get configuration msgs sent (to set up associations, to set wakeup interval, etc...) And some devices will only send a NIF in response to the user pressing a button or something, and if even if they do they often wil only send them via associations, not broadcast. So sending the queue in response to the NIF helps us bootstrap the process.
  • The thermo set point Z-Wave CC handler was incorrectly calculating the precision divisor. Instead of doing 10 to the 'decimals count' power, it was doign 10 TIMES the decimals count. So it would get, say, 20, instead of 100. That would make the set point come out way too high if any precision digits were being reported.
  • Currently, if a new trigger is added to a field, the latching state is being set back to 'first' state, which is used to prevent bogus triggers when we get the first value for a field. This causes the next transition to be ignored even though we could correctly send it. The latching state has been kept up, even if not latching or even if no trigger is installed. So it's correct and can just be left alone.
  • My recent code updates broke the media repo manager. If you add a collection manually, the initial item count is zero, and it tries to set a collection to zero size which fails.
  • My recent work introduced a bug into the repo manager that causes an error when you try to add a new collection manually.
Dean Roddey
Explorans limites defectum
Reply
#33
5.3.933
  • Somehow the default error state on field values was set to false instead of true, which happened many years ago. This means that any fields that a driver doesn't write to will end up not in error, but with a default value. That's not good, but changing that now would be a mess. So, instead add a 'first write' flag that can be used to watch for the first actual value being stored
  • The event monitor tab isn't accounting for the border when it calculates the area in which to display the information. Actually it's the scrolling text output window that it uses. This causes the bottom line to get interfered with when scrolling, often leaving some droppings there. Also, when doing consequtive color filled lines, something is messing up and it always leaves a pixel of background color between them when scrolled. So, for now, change the format to avoid this, and I think it looks nicer as well.
  • Add a check, after a successful return from the driver connect callback, to see if any of the fields have not been written a value to yet, and log a message if so. This will help us start to weed out these issues so that we can eventually set the initial error state to true and such fields will come up in error state.
  • For those drivers that have to be prepared to come up without all of the fields necessarily being ready, such as the Z-Wave driver, becasue there's no way to guarantee we can get the values up front, add a SetAllErrStates() method to the C++ and CML base driver classes. The driver can call this upon field registration to initialize them all to error state. Any that don't get set will then be initially in error state. But, the will be marked as having been explicitly set to a state, and won't cause the above log msg to be generated.
  • Update the new Z-Wave driver to call the above error state initialization method. Others may later need it but this is the most obvious one that we know does.
  • Add a new method to C++ and CML drivers called UseDefFldValue(), which lets them just tell the driver that the default initial value is acceptable. For readable fields that aren't driven by device data, this may be more convenient than having to do a field write of the appropriate type with the appropriate data.
  • As a start, get all of the simulator drivers up to date so that they don't have any uninitialized fields. These were used to work out the above stuff.
Dean Roddey
Explorans limites defectum
Reply
#34
5.3.934
  • The SetAllErrStates() method should NOT affect the special stats collecting fields.
  • Adding SetAllErrStates() call to Z-Wave driver broke it because that cause would be rejected once past connected state, and if you save config the driver has to re-create/register the fields and it would be called again and fail. It should be legal to call it after connection. The driver just has to be reasonable about why/when it calls it.
  • The NewConfig field of the Z-Wave driver wasn't getting an initial value set, which the above pointed out, so it was fixed.
  • My recent safe enum changes, which required changes to how collections are created, caused a mess in the HTTP support code. Any URL with no outgoing header lines, and probably any incoming without any incoming header lines, would create a zero sized collection which isn't legal. It's only because that's pretty uncommon that it didn't show up immediately. But apparently it does happen at least in some circumstances, such as the Nest driver (though it doesn't happen to me when I run it, probably dependent on configuration of the Nest hardware.) Probably it would have bitten some other things.
Dean Roddey
Explorans limites defectum
Reply
#35
5.3.935
  • The recent changes related to converting to type safe enums broke the IR/trigger related drivers because something out of date in the manifest files is now getting caught and so it fails to load the manifest. So update those manifest files.
  • Have the CmpDrivers test program watch for IR drivers and test the extraction of the fixed prompt values, just to catch future issues such as above. There's already a helper to do that extraction so no need to duplicate the code.
Dean Roddey
Explorans limites defectum
Reply
#36
5.3.936
  • Convert the code base over to use "#pragma once" instead of hand hewn multiple inclusion header guards that were traditionally included. A little quick and dirty conversion program made this pretty easy. It may be slightly slower to build, but gets rid of a lot of header clutter.
  • The base media renderer class doesn't do an initial query of the derived class' audio/transport state info before Connect() returns so some fields will get flagged as not having gotten set to valid values. So just add an initial query after fields are registered but before connect returns.
  • Do a major reworking of our 'pool' class, which is used to create pools of reusable objects in high traffic code. It avoids a lot of overhead by avoiding create/destroy cycles constantly. The changes allow for smarter selection of objects in the pool to match the capacity required, so as to not to make the objects get larger than needed. And it also cuts down a good bit on the templated code.
  • Do pre-fab variations of the updated pool, for strings and memory buffers, which will be not unlikely to be pooled.
  • The above required updating the various places that use pools to use the updated pool scheme. The CD ripper engine, the base driver class' command queing stuff, the old USB Z-Wave driver, the new Omni drivers, the XML parser, the old RIVA server and client, and the new MQTT stuff. The XML one can be replaced with the pre-fab string pool from above, and the Z-Wave and old/new Omni TCP drivers can use the memory buffer one.
  • Also, go back and finally update the server side ORB to use a pool for work items. This should make it considerably more efficient. It was historically pretty messy to do so it had never been done; but, now with the new stuff, and a little ad hoc helper code, it isn't hard at all.
  • Add support for the Vesternet Eurotronic Spirit Smart Thermo to the Z-Wave driver. This is a by eye, initial attempt, so it may require some tweaking based on feedback.
  • Lots of ongoing code modernization and improvement.
Dean Roddey
Explorans limites defectum
Reply
#37
5.3.937
  • Go back and get rid of the 'safe enum type' marker in the IDL system. All of them are supposed to be safe now and so we don't need that anymore. Of course I then realized that I hadn't gotten them all and had to go back to the heinous enum update grind for a bit. But now they are all and that sad story is behind me.
  • The event server is taking longer than it should to shut down because it's not doing overlapping shutdown requests on all the worker/event processing threads.
  • The object pool updates in the previous couple releases required changes to the actual implementations of the pool. In the one for the digital audio extraction engine (CD ripping) a bug introduced in that process was basically leaking a buffer for every CD sector ripped, so it would end up using the amount of memory of each CD ripped in the CQSL repo manager. That's not optimal.
  • The logic server config tab isn't disabling the comparison value for edited expressions if the exrpession type doesn't need one.
  • There's an error in the CML Array class such that, if you assign one array to another, it's attempt to be uber-efficient and reuse element objects from the previous setup can get it into an infinite loop in some circumstances, most likely if assigning an array with fewer elements to one with more.
  • Update the docs to discuss bi-directional latched triggers, and latching in general.
  • Add a little command line utility that will provide access to some of the raw data server reports, which will be useful for some in the field debugging and such.
  • A first public viewing of the new MQTT work. It's in the form of a driver. It requires a configuration file to tell it what MQTT topics drive what fields and how to interpret the MQTT payload data to translate it to the field's required format. At some point there will be a client side driver, but we need to work out the requirements a lot more before taking that on. It's purely an MQTT client, i.e. it only pulls MQTT info into CQC, it doesn't provide fo r pushing CQC data out to MQTT at this point. It's read only at this point, no field write will work. Be aware that the config file format may change radically still.
  • Since the web cam support stuff in WebRIVA has always been semi-useless, take another whack at it to allow for more flexibility. Improve the web cam extension stuff to allow the customer to create his own DOM element. If they don't it will still create a standard video element. But, if their particular platform can display video in an iFrame or some such, they can create one of those for their own needs. Also, the after the fact setting of the URL wasn't getting forwarded to the WebRIVA clients. And the new optional parameters weren't getting forwarded in the creation and URL setting commands. Those are now passed and show up a JSON object to the extension file.
  • Update and improve the WebRIVA stuff in the docs.
  • Update the installer to deal with the above. Even though its unlikely anyone had any useful implementations of the web cam extension file, if upgrading from before 5.3.937, save the old file and copy over the new default one so that the right stuff is in place, but the old stuff is still available to copy forward.
Dean Roddey
Explorans limites defectum
Reply
#38
Version 5.3.938 is posted. This is mostly a lot of internal code improvements. I think it improves the speed and responsiveness as well, but maybe I'm fooling myself. Let me know if it seems that way to you. There are also some small tweaks.

5.3.938
  • Do a huge overhaul of equality testing support, moving from function pointers to templatized comparator parameters. It's super-annoying since the slightest mistake can generate a thousand error msgs. But it allows for capturing lamba and functor comparators for sorting, searching, collection comparisons and so forth, in addition to the traditional function pointer. That provides a huge amount of extra flexibility.
  • Solidify our position on what collection equality means and what copy/assign/move means and update all the code to reflect this.It now means just the elements contained being equal in iteration order. Only those things relevant to insuring that after assign they are thusly equal will be updated on assign.
  • Get rid of the maximum elements aspect of collections. It's technically a very good thing but in practice very difficult to deal with. In those places where the max was being set for a specific reason, not just because there needed to be one, add external checks for it being full within the context of the code that manages it.
  • Re-work the object pool stuff again. After the last re-working, it became apparent that it was more flexible than required, and therefore the amount of per-derivative code required could be greatly reduced. We can do another one in the future if there are circumnstances where this one isn't sufficient. Also discovered an important flaw in how most derivatives have always chosen a new object from the pool, which would lead to more growth of the pool than is really necessary. It now appears to be remaining quite minimal in its memory usage, and that logic is now within the base pool class where it can be always correct. Since a lot of programs used it, the memory savings is significant.
  • Drop the Dwin 700 projector driver. It's an old C++ driver, no one has one anymore, and it's just time wasted keeping it up to date.
  • Some tweaks to the Z-Wave driver. It wasn't really correctly reporting if an incoming field write never got handled by any Unit/CC.
  • Some more tweaks to the Z-Wave Eurotronics thermo thingie based on feedback.
  • If you hit F1 in the action editor on an Intf.Viewer target, it goes to the wrong place in the help.
  • The docs for the Dune player have a sample shared directory path file. But it's XML and the docs are XML and apparently I didn't escape the less than characters enough levels and it got eaten during the compilation to HTML, so there's just a blank spot there.
  • If you just call Close() on a stream socket, instead of doing a clean shutdown, the connected/shutdown flags never get updated. We need a virtual on the base socket class that it can call when doing a hard close to let derived classes clean up as required.
  • In the Admin Intf, when the user does a save on the active tab, call it's 'check for changes' method so that it can update the tab changes indicator immediately instead of waiting for the next time scan.

This time I really, really won't do anymore big code improvements and will start solidifying towards a release. Or, if I do, it'll be in a separate source control branch for the next version and I'll just do fixes and tweaks on this stuff.
Dean Roddey
Explorans limites defectum
Reply
#39
5.3.939
  • The newly added check (after return from a driver's connect method) to check for unitialized fields is being called even if the driver doesn't return success. I didn't notice it because I didn't have any drivers failing.
  • The new Eurotronics Z-Wave thermo guy is using a generic 'thermo SP' handler, and it's not currently looking to see if thermo mode is supported and adding a CC for that.
  • While going through the code for improvement purposes some issues with thread safe interlocked operations were potentially seen, so that stuff was updated. In the process quite useful new efficiencies were implemented, in particular moving to lockless counted pointers.
  • We need to swizzle the build environment stuff around now that CIDLib is open source. The stuff needed to set up CIDLib needs to be down in that directory so it becomes part of the repository. That also affects the CQC installer image builder.
  • The AWS MQTT server requires support for ALPN (Application Layer Protocol Negotiation), which is part of the secure socket stuff. So I had to go ferret out that secret information (as is everything related to the Win32 SChannel stuff) and add support for that. I haven't gotten the AWS connection to work yet, but I'm pretty sure the ALPN is working since I can enable it on other servers to indicate HTTP version and such.
  • The Hue protocol is going to require SNI (Server Name Indication) as of April 30th, which is yet another secure socket thing. Looking at the code, it appears that I've been doing what is required all along and that nothing new is needed, so we'll see on the 30th.
  • Udpate the MQTT server and the configuration file thereof to support the new APLN stuff. You can indicate a preferred protocol in the main XML element now if you need it. Though multiples can be used, I don't think any MQTT server is going to require a list.
  • And the AWS MQTT server also requires client side certificate support for secure connections. I hadn't supported that so far, so I had to add that. I haven't been able to test it, but I have the code that I think is correct. The MQTT driver's config file now has a CertInfo="" option for that. It's the same scheme as used by the CQC web server. Though, by default the secure channel stuff will look for an appropriate certificate, so let it try on its own first.
  • Another significant step forward on the MQTT driver front. I've worked out the issues of mapping between MQTT and field values so that it's reasonably manageable and provided a number of mappingings, though others could obviously be done. Added a Generic field type for things that don't fit cleanly within any of the supported semantic types.
  • Add a /TestConn option to the CheckMQTTCfg program. If you pass this parameter, it will use the configured connection info to try to connect to the server, send an MQTT connect message, and wait for an ack. If that works, you are probably good. This could save a lot of back and forth, particularly for secure connection setup.
  • Add a bit more logging ot the Dune HD file related to it not being able to load the config file.
  • Add field write support to the MQTT driver. Also add a default 'passthrough' value map that will be used if you don't provide a map, in those cases where the field values and the MQTT values are the same.
Dean Roddey
Explorans limites defectum
Reply
#40
5.3.940
  • The XML parser's entity spooler doesn't automatically skip over a UTF-8 byte order mark. So, if one is present, it will cause it to choke because it thinks the entity content starts with a bad byte.
  • Get the CIDLib code compiling in VC++'s non-permissive mode (though still with old style two phase mode.) It took a lot less work than I thought it would, so I wasn't that far off, disabling the two phase thing is going require a lot more work.)
  • And get CQC compile in the same sort of basic non-permissive mode as above.
  • Update CIDBuild to support per-platform options, which may be important moving forward
  • Add support to the MQTT driver for JSON formatted MQTT payloads.
  • The MQTT driver wasn't storing the parsed output values for the BoolNumMap so it was always sending out the default 0 and 1 values.
  • The AI's log query dialog is using the literal list index when it updates the info at the bottom of the screen. But the list can be sorted so it needs to be finding the original index of the selected item to get the right stuff.
Dean Roddey
Explorans limites defectum
Reply


Possibly Related Threads...
Thread Author Replies Views Last Post
  Official 5.4 Beta Discussion Thread Dean Roddey 441 41,754 06-15-2019, 02:33 AM
Last Post: Bugman
  Official 5.3 Beta Discussion Thread Dean Roddey 815 151,300 07-05-2018, 12:44 PM
Last Post: Dean Roddey
  Official 5.3 Release Thread Dean Roddey 27 7,910 07-05-2018, 12:44 PM
Last Post: Dean Roddey
  Official 5.2 Beta Discussion Thread Dean Roddey 244 87,644 10-14-2017, 07:57 PM
Last Post: Dean Roddey
  Official 5.2 Beta Release Thread Dean Roddey 13 8,804 10-09-2017, 06:49 PM
Last Post: Dean Roddey
  Official 5.1 Beta Discussion Thread Dean Roddey 453 197,129 05-16-2017, 03:45 PM
Last Post: Dean Roddey
  Official 5.1 Beta Release Thread Dean Roddey 28 19,502 05-12-2017, 05:44 PM
Last Post: Dean Roddey
  Official 5.0 Beta Discussions Dean Roddey 2,019 489,144 11-09-2016, 04:34 PM
Last Post: Dean Roddey
  Official 5.0 Beta Release Thread Dean Roddey 15 13,314 11-01-2016, 10:32 AM
Last Post: Dean Roddey
  How to obtain Beta versions? willsauter 3 3,574 07-15-2016, 04:57 PM
Last Post: willsauter

Forum Jump:


Users browsing this thread: 1 Guest(s)