mISDN Channel Driver for Asterisk PBX
======================================

This package contains the mISDN Channel Driver for the Asterisk PBX. It 
supports every mISDN Hardware and provides an interface for asterisk. 

Features: 


* NT and TE mode
* PP and PMP mode
* DTMF Detection (for now with asterisk)
* Display Messages to Phones (which support display msg)
* some other


Overview
--------

- Pre-Requisites
- Compilation 
- Installation
- Configuration
- misdn cli commands
- Debugging and sending Bugreports
- Examples
- Known working Configurations
- Known Problems
- Changes


Pre-Requisites
--------------

To compile and install this driver, you'll need at least one mISDN Driver, the
mISDNuser package and the asterisk includes (which will be inside of the
sources). For now I'll recommend you to use the v1-0_stable Release of the
asterisk sources, get it via cvs or by downloading it from
here:ftp://ftp.asterisk.org/pub/telephony.

To get the mISDN stuff please follow the instructions at
http://www.isdn4linux.de.  Please Note that mISDN works good for the
linux-2.6.x kernels. Some of the mISDN drivers do not compile against the
2.4.x or older kernels, you can patch them, but than you'll get myterius
errors.

I used Kernel 2.6.5 for a while, but there were lots of B-Channel Problems. Andreas (jolly) told me to use 2.6.3 and it really works better.

After getting up with mISDN, you can test your mISDN stuff by use of the jolly-PBX, get it at isdn.jolly.de. (Maybe you'll prefer this pbx against the asterisk :-) ). 

Ok so far so good, now follow the compilation instructions.

!! Dont forget to create the /dev/mISDN device node.

Compilation 
-----------

After you've successfully installed mISDN, mISDNuser and asterisk, you should
modify the Makefile in the chan_misdn source path. There you can tell the
Makefile where to install the driver, sample-conf, and most important where it
can find the linux kernel includes, the mISDNuser package and the asterisk
includes.  If you use the Head-Revision of Asterisk (or at least a newer
version than stable) uncomment the CCFLAGS+=-DASTERISK_STABLE, the stable
version of asterisk is at the moment v1-0 as cvs tag.

Now you can type in: 

make

This should compile chan_misdn.so, if theres an error check the paths in the
Makefile again.


Installation
------------

After successful compilation of chan_misdn, you should simply type in:

make install 

as privileged user to put chan_misdn.so in the asterisk modules
directory.

You should see a Msg like: "Successfully installed chan_misdn". 
Congratulations. 

Theres a sample init.d script for loading the mISDN modules, simply copy 
it to /etc/init.d/ and modify it, there you can enter your cards, and the
capi modules, if you want to have capi also. 



Configuration
-------------

First of all you must configure the mISDN drivers. Each driver module has got
an options and layermask option, which tells the driver wether to start in
TE,NT, PP or PMP mode (there are lots more please read docs in misdn for
that).

After thinking about the above you'll probably want to configure the
misdn.conf file which resides in the asterisk-config directory.

The misdn.conf file contains a "general" Section, and user sections which
contain misdn port settings and different asterisk contexts.

The general section contains especially a variable named context with which
the default context is set. There is also the very important debug variable
which you can set from the asterisk cli (command line interface) or in this
configfile, bigger numbers will lead to more debug output. Theres also a
tracefile options, which takes a path+filename where debug output is written
to.

The user Sections have names which are unequal to "general". Those sections
contain the ports variable which mean the mISDN Ports. Here you can add
comma-sepperated multiple ports. 

Espacially for TE-Mode Ports there is a msns variable. This variable tells the
chan_misdn driver to listen for incomming calls with the given msns, you can
insert a '*' as single msn, which leads in getting every incomming call (if
you want to share on PMP TE S0 with a asterisk and a phone or isdn card you
should insert here the msns which you'll like to give the asterisk).  Finally
a context variable resides in the user sections, which tells chan_misdn where
to send incomming calls to (extension.conf).

When everything worked you should get the asterisk running.


misdn cli commands
------------------

At the asterisk cli you can try to type in: 

misdn <tab> <tab>

Now you should see the misdn cli commands: 

- clean
	-> pid 		(cleans a broken call, use with care, leads often
			 to a segmentation fault)
- send
	-> display	(sends a Text Message to a asterisk channel, 
			 this channel must be an misdn channel)
- set
	-> debug	(sets debug level)
- show
	-> config	(shows the configuration options)
	-> channels	(shows the current active misdn channels)
	-> stacks	(shows the current active and inactive misdn channels)

- reload 		(reloads misdn.conf)



Debugging and sending Bug-Reports
---------------------------------

If you encounter problems, you should set up the debugging flag, usually debug=1 should be enough. the Messages are divided in asterisk and misdn parts. Misdn Debug messages begin with an 'I', asterisk messages begin with an '*', the rest is clear I think. 

Please take a trace of the problem and send this trace via mail to bugs@beronet.com


Examples
--------

here some examples of how to use chan_misdn in the dialplan (extensions.conf): 


[globals]
OUT_PORT=1 ; The physical Port of the Card

[misdnIn]
exten => _X.,1,Dial(mISDN/${OUT_PORT}/${EXTEN})



You can only use "misdn send display" when a asterisk channel is created and
isdn is in the corect state, correct state means that you have established a
call to another phone (mustnt be isdn though).

Then you use it like this:

misdn send display mISDN/1/101 "Hello World!"

where 1 is the Port of the Card where the phone is plugged in, and 101 is the
msn (callerid) of the Phone to send the text to.


Known working Configurations
----------------------------

In this Section I'll put working  configurations for chan_misdn. Beware It seems that between Kernel 2.6.3 and Kernel 2.6.8 there were lots of mISDN Bugs. Form me the Kernel 2.6.3 works very well, I'd like to update, but have no time to test out a Kernel 2.6.8 + . 


- chan_misdn-0.0.3-rc1: 	
	* linux-kernel <= 2.6.3 (but at least 2.6) 
	* asterisk >= v1-0 
	* mISDN/mISDNuser since September/04


Known Problems
--------------

* When I use mISDN->IAX I cannot hear the other end, and or the other end
cannot hear me.  

-> You need to use ztdummy as dummy zaptel interface for the iax timing in
trunkking mode, simply grap libpri, zaptel and compile them (i think you need
to modify the makefile in zaptel to add ztdummy to the defaultly compiled
modules) then modprobe ztdummy, this resolves the problem.

Change
------

in the Changes File

