RTS Components - rallytac/pub GitHub Wiki
Engage Engine
The Engage Engine is our primary technology offering. This software is responsible for all the heavy lifting our stuff does to enable communications in hard-core tactical and (more sedate) enterprise environments. The Engine takes care of things like audio processing, status & presence, encryption, device interaction, transport of media packets, and so on.
That said, the Engage Engine is just that - an engine. By itself its a dead package of software but, once combined with a control application, this thing lights up like a Christmas tree.
We use the term Engine on purpose to convey its function - that of an engine. An engine much like what you'd find in a vehicle of some sort. For example, there's a company out there called "Cosworth". Prominent in their product line are their high-performance engines that are used in vehicles such as racing cars, or in manufacturing facilities, or aerial drones, and so on. You may see their logo on the side of a race car or somehwere else their stuff is used. But you won't see race cars made by Cosworth - that's the job of the manufacturers of the race cars who purchase engines from the specialist in engines - Cosworth. In the same way, the Engage Engine is the "engine" inside the "vehicle". In this case the "vehicle" is a software application of some sort - like a user app running on Android or a desktop dispatch position on Windows. The app can be "headless" too - like a server application that runs in the background and that little or no user interface.
Platforms
Like pretty much everything else we create, this thing is written in POSIX-compliant C++11 (making it compilable with even very old compilers) and is portable across a bunch of operating systems such as Android, iOS, Mac, Windows, and Linux; as well as CPU architectures including 32- and 64-bit CPUs from Intel & ARM.
Our use of C++11 means we not only get excellent performance but also very small, highly-optimized, event-driven code. So ... we can run on the fastest and biggest gear all the way down to tiny hardware for embedded systems, IoT devices, and whatnot. In fact, just for fun, we thought it'd be cool to impress folks with a "Dick Tracey" kind of experience. So we built a teeny application on an Android watch, whacked a PTT button on the screen, and tied it to Engage running right on the watch. Voila - we had a fully functional PTT application right on that Android watch! (In all honesty, though, the battery on a watch is not exactly a power station so we only got about an hour of use out of it before it ran out of juice.)
OS | CPU Architecture | Comments |
---|---|---|
Windows | Intel32, Intel64 | |
Mac | Intel64 | |
Android | Intel32, Intel64, ARM32, ARM64 | |
iOS | Intel64, ARM64 | |
Linux | Intel32, Intel64, ARM32, ARM64 | Red Hat, Debian, Customized |
API
Being a component of a larger product, the Engine is provided in binary form as a static or dynamic/shared library for all the above platforms. It's functionality is offered on a "northbound" API interface exposed as C-callable functions - meaning you can use the Engine from the language of your choice. This includes C, C++, Java, Javascript, C#, Nodejs, Python, and so on. Basically, if your programming system can call APIs in static or shared libraries; you're ready to rock and roll with Engage. (We even provide lightweight wrappers in source code for those languages where some translation is required.)
In addition to "regular" API interaction, Engage also supports the notion of application-defined callouts that provide app- or platform-specific services to the Engine. For example; let's say your environment or existing app uses a transport mechanism or waveform that Engage doesn't support. But you want Engage to use it. Well, your app can tell Engage (on an individual group basis) to use your custom transport and bypass Engage's built-in transport support (such as IP). We support this for transport and audio devices today and are happy to add additional app-specific callouts as needed.