Our experience allows us to be involved in every stage of the software development process. From initial discussions to determine requirements we can produce detailed requirement and technical specification. Software design and coding is also carried out in-house, as is design verification and testing. Where appropriate software can be supplied as an installable package. Technical and user documentation can be supplied for new or existing software.
As well as creating new software we can modify existing software to add new functionality or support new hardware. This can often be done where little, or no, documentation is available and reverse engineering has to be employed. In such cases appropriate documentation can be written.
We have experience of producing software for a wide variety of platforms, from real-time firmware for embedded microprocessor PCBs that have been designed in-house, to "state of the art" multi-processor UNIX systems.
Most of our software is written in C, C++ or assembler. Software written for Microsoft Windows is usually written using either Visual C++ or Visual BASIC. Various flavours of UNIX scripts can be supplied, including PERL.
Embedded Systems
We have developed software for many products incorporating embedded microprocessors, using our own hardware designs and clients hardware designs. Our expertise ranges from single PIC boards to state of the art multi-processor systems. The range of microprocessors that have been used include Intel 8086 to Pentium, Motorola 68000 series, Hitachi H8/16 series, Intel 8051 series, Z80 families and various PICs.
More complex projects may require a kernel or operating system layer under the application code. We have worked with Wind River's Tornado system to develop code for VxWorks. As embedded Linux becomes more popular we are porting systems from VxWorks to Linux. We have experience of embedded Linux on PowerPC and x86 platforms. In addition we are familiar with other systems such as uCos and RTEMS. In contrast, simpler projects can often be realised with the application code directly controlling the hardware, saving the expense and complexity of an operating system.
Our kernel / RTOS / device driver level code has included IEEE 1394 and USB device drivers. Application code has included complex projects for navigation and communications products. All aspects of such developments are covered in-house, including specification, design, user interface, testing, system management, documentation and utilities such as FLASH programming tools. We place particular emphasis on ensuring that the balance of size versus performance is optimised for each project, and are accustomed to working with tight memory constraints.
We can also advise on, and arrange, manufacturing of embedded system. Our experience covers consumer, automotive and aeronautical designs.
Unix and Linux
We have supplied applications for UNIX systems ranging from SCO Xenix to DEC Alpha. All types of application can be produced such as device drivers, simple filters, system administration utilities, multi-user software, application porting and scripts. We have written applications distributed over multiple platforms at remote locations, connected to a central server via the Internet.
User interfaces can be designed for traditional terminals, X Windows or web browsers using CGI.
Software can be supplied as a set of installation disks, installed directly onto a client's systems or pre-installed on a custom system built to a client's specification.
Windows
Most of the applications that we have developed have been designed as user interfaces to embedded systems. Typical applications are "in vehicle display" systems for on-board navigation systems using mapping technology to display a vehicle's position in real-time.
We are experienced at debugging third party applications to allow the developers to enhance reliability.
National Instruments LabVIEW and LabWindows
We have using Labview on and off to develop software for a few years now. Although it is not our first choice of software our customers often have very good reasons for using it.
Sometimes LabVIEW can be used to provide a complete solution, sometimes we incorporate LabWindows code to provide more complex functionality. Occasionally it is necessary to create custom DLLs containing the functionality that we need.
Miscellaneous
PLC software for industrial process control.
IBM PC BIOS - We produced a customised BIOS and operating system for a PDA.