(Page 10 of 69 in this chapter) Version
adiGetBoardSlots
Description
- Returns the MVIP timeslots configured for the given board.
Prototype
- DWORD adiGetBoardSlots ( CTAHD ctahd,
unsigned board,
unsigned mode,
unsigned maxslot,
ADI_TIMESLOT *slotlist,
unsigned *numslots )
- ctahd CTA context handle returned by ctaCreateContext.
- board Board number as specified in the configuration file.
- mode Specifies stream capability, which can be either ADI_FULL_DUPLEX (both voice and signaling streams) or ADI_VOICE_DUPLEX (voice only).
- maxslot Maximum number of entries in slotlist array.
- slotlist Pointer to the ADI_TIMESLOT array, defined as:
typedef struct
{
BYTE stream ;
BYTE slot ;
} ADI_TIMESLOT ;
- numslots Returned number of entries.
Return Values
Events
- None.
Details
- This function queries the available MVIP stream:slot pairs configured for a given board.
- The ctahd argument is used to access the CTA context on which the ADI service was opened. The ADI service can be opened in driver-only mode if desired. In this case, no actual board resources will be reserved. Set the board field in the MVIP_ADDR structure passed to ctaOpenServices to ADI_AG_DRIVER_ONLY. This function will also work with a CTA context that has the ADI service opened on actual MVIP streams and timeslots.
- If mode is zero (0), the slots returned are the DSP addresses that correspond to actual trunks, whether or not they are actually connected.
- For example, if an AG-8 board is partially populated, only the slots that contain line interfaces will be returned. If an AG Dual T board is configured as two primary rate trunks, timeslots 0 - 22 and timeslots 24 - 46 will be returned.
Note: The DSPs are automatically connected to the trunk if the telephony bus is not enabled.
- If mode is not zero (0), the function returns only those streams capable of supporting the given mode. The base stream for the given mode is returned in the ADI_TIMESLOT stream field.
- Examples:
- For an AG 2000 board, stream 18 is voice and stream 19 is
signaling. If adiGetBoardSlots is invoked with mode set to
ADI_VOICE_DUPLEX, the function returns an array of 16
ADI_TIMESLOT structures each with the stream field set to 18 or
19 (18:0..7, 19:0..7).
- An AG-30 board can be configured so that only streams 2 and 6 are
nailed up to the MVIP bus. If adiGetBoardSlots is invoked with
mode set to ADI_FULL_DUPLEX, the function returns an array of
zero ADI_TIMESLOT structures. This is because full duplex mode
requires that two adjacent streams be active for
ADI_FULL_DUPLEX mapping.
- For details concerning MVIP addressing, refer to the Switching Service Developer's Reference Manual and to Getting Started with MVIP Switching.
- The maxslot argument is the number of ADI_TIMESLOTs in the application supplied slotlist array. The ADI service returns the number of ADI_TIMESLOTs written to the slotlist in the numslots variable. This value will be in the range zero to maxslot inclusive.
Note: If maxslot is zero and slotlist is NULL, numslots returns the actual number of slots without copying any data.
- adiGetBoardSlots
can be used in conjunction with adiGetBoardInfo to dynamically configure an application's contexts. ctaOpenServices is called with a board number and MVIP stream:slot to open the ADI service. The application can retrieve a complete list of configured stream:slot pairs for any AG board with adiGetBoardSlots.
Example
#define MAX_SLOTS 256
void myShowBoardSlots( CTAHD ctahd, unsigned board )
{
ADI_TIMESLOT slotlist [MAX_SLOTS]; /* Returned array of timeslots */
int ret;
unsigned stream, slot1, slot2, prevslot, numslots;
/* Read the MVIP configuration for the board. */
ret = adiGetBoardSlots( ctahd, board, ADI_VOICE_DUPLEX,
MAX_SLOTS, slotlist, &numslots );
if( ret == SUCCESS )
{
/* The ADI_TIMESLOT information contains 'stream:slot' pairs.
* Print the information as 'stream:slot0..slotN' ranges.
*/
unsigned i = 0;
while( i < numslots )
{
/* store stream and starting slot */
stream = slotlist[i].stream;
slot1 = slotlist[i].slot;
prevslot = slot1;
while( ++i < numslots && /* find ending slot */
slotlist[i].stream == stream &&
slotlist[i].slot == prevslot+1 )
prevslot++;
slot2 = slotlist[i-1].slot; /* store ending slot */
printf( "%2d:%d", stream, slot1 );
if( slot2 != slot1 ) printf("..%d", slot2 );
puts( "" );
}
}
else if( ret == CTAERR_INVALID_BOARD )
printf( "There is no board # %d.\n", board );
else
/* unexpected error */
printf( "Error %x getting board # %d information.\n", ret, board );
}
(Page 10 of 69 in this chapter) Version
Want to send us feedback on our documentation? Email: Tech_Pubs@nmss.com
Copyright © 2000, Natural MicroSystems, Inc. All rights
reserved.