Complex software environments have a layered structure. This is usually visualized as a stack of layers in which each layer uses the interface provided by the one immediately below it. The lowest layer interfaces directly with hardware while the uppermost layer interfaces with users. Programs developed for each layer widely differ in function, features, and characteristics. Our software development capabilities span the entire software stack, from low-level firmware to to graphical user interface (GUI) applications.
Firmware
This is the most basic software layer. Firmware is most closely associated with the hardware and usually resides in a non-volatile memory. To be truly effective, firmware programs must be compact and efficient. There is often a trade-off in implementing a functionality in firmware versus hardware (i.e. programmable logic). Significant cost savings can be made by careful balancing between hardware and firmware implementation.Device Drivers
Hardware devices interfacing with the operating system over one of the standard buses require device drivers for both functionality and testing. The device driver development may accompany the device design, if requested.System Programming
These are low-level programs closely associated with the operating system. System-level programming usually involves multi-threading, networking, and inter-process communications. Different operating systems, such as Windows or Unix, require specific approach to program development.Applications Programming
These are user-level utility programs developed (in our case) mainly for testing and the graphical user interfaces for controlling hardware. The programs are usually written in C or C++. Developing GUI programs for Windows benefits from object-oriented approach in C++.Supported Platforms
TRILENT develops software for the following operating system platforms:- Embedded Systems – include off-the shelf and custom RTOS (real-time operating systems).
- Windows – we specialize in system programming for Windows NT/2000/XP/2003 family.
- Unix – the most widely-used versions of Unix are supported, including BSD Unix, Linux, Solaris.
- Palm OS – software development for handheld devices includes simple utility application programs.
Languages and Tools
Our programs are written in Assembly, C, C++, and Java. We support a range of software development tools to ensure the best tool for each particular task.
- Assembly – used for the embedded development, firmware, and some critical sections of device drivers and system-level programs.
- C – used for some legacy applications.
- C++ – our main software development language.
- Java – object-oriented language used mainly in development of web-based applications.