NAME irInitGroup - initialize a channel and obtain channel id from an equipment group SYNOPSIS #include <irapi.h> int irInitGroup (int equip_grp, channel_id *cid_ptr, int return_mode, int tag); DESCRIPTION The irInitGroup function initializes a channel in equipment group equip_grp. Except upon failure, this function sets *cid_ptr to the channel_id that is to be used by most of the other functions when referencing the channel. return_mode indicates how the caller of the function expects channel allocation to be handled. Allocation of channels behaves much like the allocation of other resources. The behavior determined by return_mode is summarized as follows: IRD_BLOCKFOREVER Indicates irInitGroup should return IRR_PENDING if the channel cannot be immedi- ately allocated. When IRR_PENDING is returned, the calling application should be prepared to deal with a subsequent IRE_CHAN_GRANT event. Any positive integer N Indicates irInitGroup should return IRR_PENDING if the channel cannot be immedi- ately allocated. When IRR_PENDING is returned, the calling application should be prepared to deal with a subsequent IRE_CHAN_GRANT event or a subsequent IRE_CHAN_DENY event after N milliseconds. tag is returned to the application with the subsequent IRE_CHAN_GRANT or IRE_CHAN_DENY event. irInitGroup selects as negotiable channels in equip_grp only if they are currently owned by the default owner (usually the Application Dispatch process). The library determines the state of the channel and releases it to the requesting application if the channel is not busy. If no negotiable channels are found, the first channel in equip_grp freed by some process is allocated to the reques- ter. Channels are allocated to requesters on a first-come-first- served basis. Channel requests made via irInit(3IRAPI) have priority over those made via irInitGroup. The equipment group equip_group can be any of the adminis- terable equipment groups 0 to 31, or one of the two follow- ing abstract equipment groups. IRD_REAL_CHANS represents any of the real channels in the system and IRD_VIRTUAL_CHANS represents any of the virtual channels in the system. EVENT The IRE_CHAN_GRANT event occurs if the return value is IRR_PENDING. The IRE_CHAN_DENY event occurs if a channel from equip_grp cannot be granted within the time specified in the return_mode argument. The application should discontinue use of the channel_id after receiving the IRE_CHAN_DENY event. RETURN VALUE IRR_PENDING is returned if a channel from equip_grp has not yet been released by the prior application. The *cid_ptr is valid, but no other functions may be called until the IRE_CHAN_GRANT event is received. This event indicates a state change from IRS_INIT_PENDING to IRS_IDLE. IRR_FAIL is returned if an error occurs. ERROR irError is set as follows if an error occurs: IRER_INVALID if equip_grp specifies an invalid equipment group, return_mode is invalid, or cid_ptr is NULL IRER_NOREGISTER if the process has not previously called irRegister(3IRAPI) IRER_RESOURCEBUSY if return_mode is IRD_IMMEDIATE and there is no channel immediately available IRER_SYSERROR if a system or driver call failure occurs (check irSysError for additional information.) EXAMPLE The following examples shows how to initialize a group. Note the use of "&" before the cid argument to irInitGroup in the following example: int equip_grp; channel_id cid; int retval; int tag; ... retval = irInitGroup(equip_grp, &cid, IRD_BLOCKFOREVER, tag); switch (retval) { case IRR_FAIL: <report failure as appropriate> break; case IRR_PENDING: <wait for IRE_CHAN_GRANT or IRE_CHAN_DENY event> break; } ... SEE ALSO irDeinit(3IRAPI), irReturn(3IRAPI), irInit(3IRAPI), IrPARAMETERS(4IRAPI), IrEVENTS(4IRAPI). CAVEAT Note that it is possible to configure a system where incom- ing and outgoing calls occur over the same set of ports. In this situation, an application can get a pseudo-glare condi- tion: an outbound application has acquired a channel, but has not yet initiated an outbound call. In this interval, a new call can enter the system. The ``right'' behavior for an application is release the channel and allow the incoming call to proceed. The application should irExec(3IRAPI) the default owner on the channel, which is AD by default. The default owner is responsible for dispatching a new applica- tion. VERSION This is version 11/25/02 of this man page.