swiMakeFramedConnection

Connects inputs to outputs with identical throughput delay for all connections.

Prototype

DWORD swiMakeFramedConnection ( SWIHD swihd, SWI_TERMINUS input[], SWI_TERMINUS output[], unsigned count)

Argument

Description

swihd

Switch handle.

input

Array of terminus structures for the input side of the connection:

typedef struct
{
  DWORD bus;
  DWORD stream;
  DWORD timeslot;
} SWI_TERMINUS;

Refer to swiMakeConnection for a description of these fields.

output

Array of terminus structures for the output side of the connection.

count

Number of elements in the input array and in the output array.


Return values

Return value

Description

SUCCESS

 

CTAERR_DRIVER_ERROR

Underlying driver retrieved an unrecognized error. Call swiGetLastError to retrieve the MVIP device error code.

CTAERR_FUNCTION_NOT_AVAIL

Underlying driver does not support the configuration of specific characteristics of a local device.

CTAERR_INVALID_HANDLE

swihd is not a valid switch handle.

CTAERR_SVR_COMM

Communication error in the server environment.

SWIERR_INVALID_STREAM

One or more of the specified streams is invalid.

SWIERR_INVALID_TIMESLOT

One or more of the specified timeslots is invalid.


Details

swiMakeFramedConnection is specific to MVIP-95. swiMakeFramedConnection makes connections between the corresponding elements of the output terminus array and the input terminus array.

The type of connection is identical to swiMakeConnection except that all connections made on the same switch device with this function have the same constant throughput delay.

Use swiMakeFramedConnection to make a single high bandwidth connection using multiple timeslots where the data must be synchronized across the timeslots. This function ensures there is identical throughput delay across all timeslots.

Note: Under Solaris, the upper limit for the number of terminuses that can be batched in one call is 32.

This function returns CTAERR_FUNCTION_NOT_AVAIL if framed connections are not supported.

Disable an output when the connection or pattern is no longer required. Leftover connections or patterns can cause unpredictable behavior in the application.

Refer to Making connections for more information.

If CTAERR_DRIVER_ERROR is returned, call swiGetLastError to retrieve the MVIP device error code.

See also

swiDisableOutput, swiGetOutputState, swiGetSwitchCaps, swiResetSwitch, swiSampleInput, swiSendPattern

Example

#define SIMPLEX 0
#define DUPLEX  1
void myMakeFramedConnection(SWIHD hd, SWI_TERMINUS input, 
                            SWI_TERMINUS output, 
                            unsigned count, DWORD mode)
{
    unsigned i;
    DWORD duplex = 0;
    SWI_TERMINUS *outputs, *inputs;

    if (mode == DUPLEX)
        duplex = 1;

    inputs = (SWI_TERMINUS *)malloc(sizeof(SWI_TERMINUS)*count);
    outputs = (SWI_TERMINUS *)malloc(sizeof(SWI_TERMINUS)*count);

    for (i = 0; i < count; i++)
    {
        inputs[i].bus = input.bus;
        inputs[i].stream = input.stream;
        inputs[i].timeslot = input.timeslot + i;

        outputs[i].bus = output.bus;
        outputs[i].stream = output.stream;
        outputs[i].timeslot = output.timeslot + i;
    }
    swiMakeFramedConnection(hd, inputs, outputs, count);

    if( duplex )
    {
        for (i = 0; i < count; i++)
        {
            inputs[i].stream = inputs[i].stream + 1;
            outputs[i].stream = outputs[i].stream - 1;
        }
        swiMakeFramedConnection(hd, outputs, inputs, count);
    }
}