Dean Roddey
Senior Member
You will find it a tough row to hoe if you don't allow for third party drivers. No company can really provide all of the drivers required for success, not even the most well financed ones. We've learned the hard way that you can do a thousand things well, but if you don't support some specific piece of gear, many to most customers will not commit. No matter how much you support it's never enough.
As far as shipped support, CQC ships with support for a couple hundred devices, which AFAIK is considerably more than CastleOS does. Some of those are third party, but they are shipped with the product and are as tightly integrated as any we provide ourselves. Since we have a very well defined driver architecture, a third party one is not really any different from one we write, other than that we can do C++ drivers where that's necessary and they cannot. But both types still work within the same standardized framework and work exactly the same, which is sort of part of my point above. We write very few C++ drivers, because it's just not justified in any way to do so except in very specific circumstances, such as the vendor won't allow an open source driver (e.g. Z-Wave.) CML works just as well and it's shipped as code so none of the issues with abandoned drivers comes up.
In CQC, very little 'scripting' is really ever done, in the coding sense. We support a very high level, point and click scheme that almost all user customization is done with. Only drivers, or web server plugins and the like, are usually ever written in CML. That is ultimately the fastest of all since there's no need to load up an external DLL into the process space. It's 'script' in that it's used for things that are often referred to as scripting but it's a very simple and compact scheme. So there's not a speed concern really. As has been discussed previously in this thread, it's very fast to react. If you want to write CML code for customization you can, and some folks do. But it's a very specialized language for the job, and it's designed to compile very quickly, unlike a general purpose language. Safety and speed of loading were key design goals for CML.
For a driver compile time is irrelevant, since drivers run forever, so even if it took five times longer than it does to load a CML driver it wouldn't make any difference. And speed of execution isn't much of an issue for drivers either, since they typically spend almost all of their time waiting for the device they control. CML certainly doesn't have any issue keeping up with devices. It's in the product infrastructure itself that efficiency is key.
As far as shipped support, CQC ships with support for a couple hundred devices, which AFAIK is considerably more than CastleOS does. Some of those are third party, but they are shipped with the product and are as tightly integrated as any we provide ourselves. Since we have a very well defined driver architecture, a third party one is not really any different from one we write, other than that we can do C++ drivers where that's necessary and they cannot. But both types still work within the same standardized framework and work exactly the same, which is sort of part of my point above. We write very few C++ drivers, because it's just not justified in any way to do so except in very specific circumstances, such as the vendor won't allow an open source driver (e.g. Z-Wave.) CML works just as well and it's shipped as code so none of the issues with abandoned drivers comes up.
In CQC, very little 'scripting' is really ever done, in the coding sense. We support a very high level, point and click scheme that almost all user customization is done with. Only drivers, or web server plugins and the like, are usually ever written in CML. That is ultimately the fastest of all since there's no need to load up an external DLL into the process space. It's 'script' in that it's used for things that are often referred to as scripting but it's a very simple and compact scheme. So there's not a speed concern really. As has been discussed previously in this thread, it's very fast to react. If you want to write CML code for customization you can, and some folks do. But it's a very specialized language for the job, and it's designed to compile very quickly, unlike a general purpose language. Safety and speed of loading were key design goals for CML.
For a driver compile time is irrelevant, since drivers run forever, so even if it took five times longer than it does to load a CML driver it wouldn't make any difference. And speed of execution isn't much of an issue for drivers either, since they typically spend almost all of their time waiting for the device they control. CML certainly doesn't have any issue keeping up with devices. It's in the product infrastructure itself that efficiency is key.