A Rapid Application Development Tool For Aculab and PIKA media Processing and Signalling Boards.

The Telecom Engine is a scripting language and virtual Run-Time Engine (RTE) that vastly reduces the time it takes to develop and design carrier-grade telecommunications applications built upon the Aculab range of voice and signal processing boards (Prosody, Prosody X, Prosody S etc.) as well as the PIKA range of boards (Daytona MM, PrimeNetMM and Host Media Processing (HMP) products).

Latest News:

1st February 2010:

Version 1.6 of the Telecom Engine Released. Improved performance and extended support for ADO database access.

3rd August 2009:

Version 1.5 of the Telecom Engine Released. Provides extended support for PIKA HMP GrandPrix library plus more examples.

1st July 2009:

Version 1.4 of the Telecom Engine Released. Now provides support for the PIKA GrandPrix library functionality through the cxpika.dll library (beta version).

11th June 2009:

Version 1.3 of the Telecom Engine Released. Provides more sophisicated configuration via the ACUCFG.CFG file. Also includes TDM end-points and more consistent functioning across ProsodyS and ProsodyX.

It runs on top of the Microsoft Windows Operating System thereby allowing one to take advantage of the benefits that modern Windows Server environments now provide (stability, ease of use, wide-spread adoption etc).

Some of the challenges faced by developers when building high-end telecommunications are as follows:

The Telecom Engine addresses all of the above concerns and provides a stable virtual engine and simple high level scripting language that has been optimized using techniques borrowed from 3D gaming engines. It provides a high speed multi-tasking environment that switches between tasks at a rate of many tens of thousands of times per second to allow many hundreds or thousands of channels of speech and call-processing to be controlled in a single PC chassis.

The Engine takes a 'thin-client' approach to the implementation of the underlying Aculab and PIKA APIs thereby providing access to all of the power of the underlying boards whilst vastly simplifying the development cycle.

A simple example is shown below to show the power and simplicity of the language. This example (for ACULAB boards) waits for a call on the first channel of the first E1 and then plays a voice prompt to the caller before hanging up. This example is less than 50 lines of code, whereas a similar application with the same functionality written in 'C' would require as much as 3000 lines of code to carry out the same functionality (see here for equivalent 'C' program).

////////////////////////////////////////////////////////////////////////////////////////
$include "aculab.inc"

int port, chan, vox_chan, x;
var filename:64;

main
    // hard-code some variables for the example...
    port=0; chan=1; vox_chan=1; filename="hello.vox";

    // Make full duplex H.100 bus routing between vox channel and network port/channel
    CClisten(port,chan,SMgetslot(vox_chan));
    SMlisten(vox_chan, CCgetslot(port,chan));

    // Enable inbound calls on this port/channel
    CCenablein(port,chan);

    // loop waiting for incoming call
    while(1)
        x=CCwait(port,chan,CC_WAIT_FOREVER);
        if(x == CS_INCOMING_CALL_DETECTED)
            break;
        endif
    endwhile

    // Answer the call
    CCaccept(port,chan);

    // Play a vox file to caller
    SMplay(vox_chan,filename);

    // Hangup the call
    CCdisconnect(port,chan,CAUSE_NORMAL);

    // Wait for state to return to IDLE, then release call
    while(1)
        x=CCwait(port,chan,CC_WAIT_FOREVER);
        if(x == CS_IDLE)
            break;
        endif
    endwhile

    // release the call
    CCrelease(port,chan);

    // restart the application to wait for another call..
    restart;
endmain