Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 13 May 2005 16:06:27 +0200
From:      Hans Petter Selasky <hselasky@c2i.net>
To:        freebsd-isdn@freebsd.org
Subject:   Re: answering calls
Message-ID:  <200505131606.28752.hselasky@c2i.net>
In-Reply-To: <20050513113445.EF9AF1EAE27C@alice.turbocat.de>
References:  <20050513113445.EF9AF1EAE27C@alice.turbocat.de>

next in thread | previous in thread | raw e-mail | index | archive | help
On Friday 13 May 2005 13:34, David Wetzel wrote:
> hi folks,
>
> I try to create a lib to wrap the i4b telephony stuff in a way that makes
> it easy to use from external programs. I do this as a first step to add i4b
> support to Asterisk. I do not intent to run the isdnd.
>
> Imagine there are N different ISDN cards in the system. Some may be Fritz
> with 2 channels some may have a PRI with 30 channels.
>
> If I understand the documentation right, all signaling and accept/reject
> control is made via /dev/isdn and the real voice data will flow via
> /dev/isdntel*
>
> On an incoming call, I get the stuct msg_connect_ind_t which contains
> controller and channel number.
>
> The driver's int number I seem to get via lookup_l4_driver() from
> rc_config.c.
>
> But how to get the driver_unit?
> How do I know which /dev/isdntel* to use?
>

The "/dev/isdntel*" are shared among all [ISDN-] controllers. 
It is isdnd's job to manage which controller gets connected to 
which "driver" and "driver_unit". When an incoming call is 
present this is done by replying with one of two messages:

Here is a cp from my driver:

/*---------------------------------------------------------------------------*
 *      connect response
 *              this is the answer to an incoming connect indication
 *---------------------------------------------------------------------------*/
typedef struct {
        cdid_t  cdid;           /* call descriptor id                   */
        int     response;       /* what to do with incoming call        */
#define  SETUP_RESP_DNTCRE 0    /* don't care, call is not for me       */
#define  SETUP_RESP_REJECT 1    /* reject call                          */
#define  SETUP_RESP_ACCEPT 2    /* accept call                          */
        cause_t cause;          /* cause for case SETUP_RESP_REJECT     */
                /* the following are only used for SETUP_RESP_ACCEPT !! */
        int     txdelay;        /* tx delay after connect               */
        int     bprot;          /* B chan protocol                      */
        int     driver;         /* driver to route b channel data to    */
        int     driver_unit;    /*      unit number for above driver    */
        int     max_idle_time;  /* max time without activity on b ch    */      
} msg_connect_resp_t;

I've also got the option to just alert:

/*---------------------------------------------------------------------------*
 *      send alert request
 *---------------------------------------------------------------------------*/
typedef struct {
        cdid_t          cdid;           /* call descriptor id  */
} msg_alert_req_t;


But recently there were some discussions about making the drivers like 
"/dev/i4btel*" dynamic, so maybe that will mean that there will be a static 
association between "/dev/i4btel*" and a certain controller and B-channel.

--HPS


Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200505131606.28752.hselasky>