GigaSet 307x Device Driver
==========================

1.   Requirements
     ------------
1.1. Hardware
     --------
     This driver supports the connection of the Gigaset 307x/417x family of
     ISDN DECT bases via Gigaset M101 Data, Gigaset M105 Data or direct USB
     connection. The following devices are reported to be compatible:

     Bases:
        Siemens Gigaset 3070/3075 isdn
        Siemens Gigaset 4170/4175 isdn
        Siemens Gigaset SX205/255
        Siemens Gigaset SX353
        T-Com Sinus 45 [AB] isdn
        T-Com Sinus 721X[A] [SE]
        Vox Chicago 390 ISDN (KPN Telecom)

     RS232 data boxes:
        Siemens Gigaset M101 Data
        T-Com Sinus 45 Data 1

     USB data boxes:
        Siemens Gigaset M105 Data
        Siemens Gigaset USB Adapter DECT
        T-Com Sinus 45 Data 2
        T-Com Sinus 721 data
        Chicago 390 USB (KPN)

     See also http://www.erbze.info/sinus_gigaset.htm
       (archived at https://web.archive.org/web/20100717020421/http://www.erbze.info:80/sinus_gigaset.htm ) and
	http://gigaset307x.sourceforge.net/

     We had also reports from users of Gigaset M105 who could use the drivers
     with SX 100 and CX 100 ISDN bases (only in unimodem mode, see section 2.5.)
     If you have another device that works with our driver, please let us know.

     Chances of getting an USB device to work are good if the output of
        lsusb
     at the command line contains one of the following:
        ID 0681:0001
        ID 0681:0002
        ID 0681:0009
        ID 0681:0021
        ID 0681:0022

1.2. Software
     --------
     The driver works with the Kernel CAPI subsystem and can be used with any
     software which is able to use CAPI 2.0 for ISDN connections (voice or data).

     There are some user space tools available at
     https://sourceforge.net/projects/gigaset307x/
     which provide access to additional device specific functions like SMS,
     phonebook or call journal.


2.   How to use the driver
     ---------------------
2.1. Modules
     -------
     For the devices to work, the proper kernel modules have to be loaded.
     This normally happens automatically when the system detects the USB
     device (base, M105) or when the line discipline is attached (M101). It
     can also be triggered manually using the modprobe(8) command, for example
     for troubleshooting or to pass module parameters.

     The module ser_gigaset provides a serial line discipline N_GIGASET_M101
     which uses the regular serial port driver to access the device, and must
     therefore be attached to the serial device to which the M101 is connected.
     The ldattach(8) command (included in util-linux-ng release 2.14 or later)
     can be used for that purpose, for example:
	ldattach GIGASET_M101 /dev/ttyS1
     This will open the device file, attach the line discipline to it, and
     then sleep in the background, keeping the device open so that the line
     discipline remains active. To deactivate it, kill the daemon, for example
     with
	killall ldattach
     before disconnecting the device. To have this happen automatically at
     system startup/shutdown on an LSB compatible system, create and activate
     an appropriate LSB startup script /etc/init.d/gigaset. (The init name
     'gigaset' is officially assigned to this project by LANANA.)
     Alternatively, just add the 'ldattach' command line to /etc/rc.local.

     The modules accept the following parameters:

	Module	 	Parameter  Meaning

	gigaset	 	debug	   debug level (see section 3.2.)

			startmode  initial operation mode (see section 2.5.):
	bas_gigaset )		   1=CAPI (default), 0=Unimodem
	ser_gigaset )
	usb_gigaset )	cidmode    initial Call-ID mode setting (see section
				   2.5.): 1=on (default), 0=off

     Depending on your distribution you may want to create a separate module
     configuration file like /etc/modprobe.d/gigaset.conf for these.

2.2. Device nodes for user space programs
     ------------------------------------
     The device can be accessed from user space (eg. by the user space tools
     mentioned in 1.2.) through the device nodes:

     - /dev/ttyGS0 for M101 (RS232 data boxes)
     - /dev/ttyGU0 for M105 (USB data boxes)
     - /dev/ttyGB0 for the base driver (direct USB connection)

     If you connect more than one device of a type, they will get consecutive
     device nodes, eg. /dev/ttyGU1 for a second M105.

     You can also set a "default device" for the user space tools to use when
     no device node is given as parameter, by creating a symlink /dev/ttyG to
     one of them, eg.:

	ln -s /dev/ttyGB0 /dev/ttyG

     The devices accept the following device specific ioctl calls
     (defined in gigaset_dev.h):

     ioctl(int fd, GIGASET_REDIR, int *cmd);
     If cmd==1, the device is set to be controlled exclusively through the
     character device node; access from the ISDN subsystem is blocked.
     If cmd==0, the device is set to be used from the ISDN subsystem and does
     not communicate through the character device node.

     ioctl(int fd, GIGASET_CONFIG, int *cmd);
     (ser_gigaset and usb_gigaset only)
     If cmd==1, the device is set to adapter configuration mode where commands
     are interpreted by the M10x DECT adapter itself instead of being
     forwarded to the base station. In this mode, the device accepts the
     commands described in Siemens document "AT-Kommando Alignment M10x Data"
     for setting the operation mode, associating with a base station and
     querying parameters like field strengh and signal quality.
     Note that there is no ioctl command for leaving adapter configuration
     mode and returning to regular operation. In order to leave adapter
     configuration mode, write the command ATO to the device.

     ioctl(int fd, GIGASET_BRKCHARS, unsigned char brkchars[6]);
     (usb_gigaset only)
     Set the break characters on an M105's internal serial adapter to the six
     bytes stored in brkchars[]. Unused bytes should be set to zero.

     ioctl(int fd, GIGASET_VERSION, unsigned version[4]);
     Retrieve version information from the driver. version[0] must be set to
     one of:
     - GIGVER_DRIVER: retrieve driver version
     - GIGVER_COMPAT: retrieve interface compatibility version
     - GIGVER_FWBASE: retrieve the firmware version of the base
     Upon return, version[] is filled with the requested version information.

2.3. CAPI
     ----
     The devices will show up as CAPI controllers as soon as the
     corresponding driver module is loaded, and can then be used with
     CAPI 2.0 kernel and user space applications. For user space access,
     the module capi.ko must be loaded.

     Most distributions handle loading and unloading of the various CAPI
     modules automatically via the command capiinit(1) from the capi4k-utils
     package or a similar mechanism. Note that capiinit(1) cannot unload the
     Gigaset drivers because it doesn't support more than one module per
     driver.

2.5. Unimodem mode
     -------------
     In this mode the device works like a modem connected to a serial port
     (the /dev/ttyGU0, ... mentioned above) which understands the commands

         ATZ                 init, reset
             => OK or ERROR
         ATD
         ATDT                dial
             => OK, CONNECT,
                BUSY,
                NO DIAL TONE,
                NO CARRIER,
                NO ANSWER
         <pause>+++<pause>   change to command mode when connected
         ATH                 hangup

     You can use some configuration tool of your distribution to configure this
     "modem" or configure pppd/wvdial manually. There are some example ppp
     configuration files and chat scripts in the gigaset-VERSION/ppp directory
     in the driver packages from https://sourceforge.net/projects/gigaset307x/.
     Please note that the USB drivers are not able to change the state of the
     control lines. This means you must use "Stupid Mode" if you are using
     wvdial or you should use the nocrtscts option of pppd.
     You must also assure that the ppp_async module is loaded with the parameter
     flag_time=0. You can do this e.g. by adding a line like

        options ppp_async flag_time=0

     to an appropriate module configuration file, like
     /etc/modprobe.d/gigaset.conf.

     Unimodem mode is needed for making some devices [e.g. SX100] work which
     do not support the regular Gigaset command set. If debug output (see
     section 3.2.) shows something like this when dialing:
         CMD Received: ERROR
         Available Params: 0
         Connection State: 0, Response: -1
         gigaset_process_response: resp_code -1 in ConState 0 !
         Timeout occurred
     then switching to unimodem mode may help.

     If you have installed the command line tool gigacontr, you can enter
     unimodem mode using
         gigacontr --mode unimodem
     You can switch back using
         gigacontr --mode isdn

     You can also put the driver directly into Unimodem mode when it's loaded,
     by passing the module parameter startmode=0 to the hardware specific
     module, e.g.
	modprobe usb_gigaset startmode=0
     or by adding a line like
	options usb_gigaset startmode=0
     to an appropriate module configuration file, like
     /etc/modprobe.d/gigaset.conf

2.6. Call-ID (CID) mode
     ------------------
     Call-IDs are numbers used to tag commands to, and responses from, the
     Gigaset base in order to support the simultaneous handling of multiple
     ISDN calls. Their use can be enabled ("CID mode") or disabled ("Unimodem
     mode"). Without Call-IDs (in Unimodem mode), only a very limited set of
     functions is available. It allows outgoing data connections only, but
     does not signal incoming calls or other base events.

     DECT cordless data devices (M10x) permanently occupy the cordless
     connection to the base while Call-IDs are activated. As the Gigaset
     bases only support one DECT data connection at a time, this prevents
     other DECT cordless data devices from accessing the base.

     During active operation, the driver switches to the necessary mode
     automatically. However, for the reasons above, the mode chosen when
     the device is not in use (idle) can be selected by the user.
     - If you want to receive incoming calls, you can use the default
       settings (CID mode).
     - If you have several DECT data devices (M10x) which you want to use
       in turn, select Unimodem mode by passing the parameter "cidmode=0" to
       the appropriate driver module (ser_gigaset or usb_gigaset).

     If you want both of these at once, you are out of luck.

     You can also use the tty class parameter "cidmode" of the device to
     change its CID mode while the driver is loaded, eg.
        echo 0 > /sys/class/tty/ttyGU0/cidmode

2.7. Dialing Numbers
     ---------------
     The called party number provided by an application for dialing out must
     be a public network number according to the local dialing plan, without
     any dial prefix for getting an outside line.

     Internal calls can be made by providing an internal extension number
     prefixed with "**" (two asterisks) as the called party number. So to dial
     eg. the first registered DECT handset, give "**11" as the called party
     number. Dialing "***" (three asterisks) calls all extensions
     simultaneously (global call).

     Unimodem mode does not support internal calls.

2.8. Unregistered Wireless Devices (M101/M105)
     -----------------------------------------
     The main purpose of the ser_gigaset and usb_gigaset drivers is to allow
     the M101 and M105 wireless devices to be used as ISDN devices for ISDN
     connections through a Gigaset base. Therefore they assume that the device
     is registered to a DECT base.

     If the M101/M105 device is not registered to a base, initialization of
     the device fails, and a corresponding error message is logged by the
     driver. In that situation, a restricted set of functions is available
     which includes, in particular, those necessary for registering the device
     to a base or for switching it between Fixed Part and Portable Part
     modes. See the gigacontr(8) manpage for details.

3.   Troubleshooting
     ---------------
3.1. Solutions to frequently reported problems
     -----------------------------------------
     Problem:
        You have a slow provider and isdn4linux gives up dialing too early.
     Solution:
        Load the isdn module using the dialtimeout option. You can do this e.g.
        by adding a line like

           options isdn dialtimeout=15

        to /etc/modprobe.d/gigaset.conf or a similar file.

     Problem:
        The isdnlog program emits error messages or just doesn't work.
     Solution:
        Isdnlog supports only the HiSax driver. Do not attempt to use it with
	other drivers such as Gigaset.

     Problem:
        You have two or more DECT data adapters (M101/M105) and only the
        first one you turn on works.
     Solution:
        Select Unimodem mode for all DECT data adapters. (see section 2.5.)

     Problem:
	Messages like this:
	    usb_gigaset 3-2:1.0: Could not initialize the device.
	appear in your syslog.
     Solution:
	Check whether your M10x wireless device is correctly registered to the
	Gigaset base. (see section 2.7.)

3.2. Telling the driver to provide more information
     ----------------------------------------------
     Building the driver with the "Gigaset debugging" kernel configuration
     option (CONFIG_GIGASET_DEBUG) gives it the ability to produce additional
     information useful for debugging.

     You can control the amount of debugging information the driver produces by
     writing an appropriate value to /sys/module/gigaset/parameters/debug, e.g.
        echo 0 > /sys/module/gigaset/parameters/debug
     switches off debugging output completely,
        echo 0x302020 > /sys/module/gigaset/parameters/debug
     enables a reasonable set of debugging output messages. These values are
     bit patterns where every bit controls a certain type of debugging output.
     See the constants DEBUG_* in the source file gigaset.h for details.

     The initial value can be set using the debug parameter when loading the
     module "gigaset", e.g. by adding a line
        options gigaset debug=0
     to your module configuration file, eg. /etc/modprobe.d/gigaset.conf

     Generated debugging information can be found
     - as output of the command
         dmesg
     - in system log files written by your syslog daemon, usually
       in /var/log/, e.g. /var/log/messages.

3.3. Reporting problems and bugs
     ---------------------------
     If you can't solve problems with the driver on your own, feel free to
     use one of the forums, bug trackers, or mailing lists on
         https://sourceforge.net/projects/gigaset307x
     or write an electronic mail to the maintainers.

     Try to provide as much information as possible, such as
     - distribution
     - kernel version (uname -r)
     - gcc version (gcc --version)
     - hardware architecture (uname -m, ...)
     - type and firmware version of your device (base and wireless module,
       if any)
     - output of "lsusb -v" (if using an USB device)
     - error messages
     - relevant system log messages (it would help if you activate debug
       output as described in 3.2.)

     For help with general configuration problems not specific to our driver,
     such as isdn4linux and network configuration issues, please refer to the
     appropriate forums and newsgroups.

3.4. Reporting problem solutions
     ---------------------------
     If you solved a problem with our drivers, wrote startup scripts for your
     distribution, ... feel free to contact us (using one of the places
     mentioned in 3.3.). We'd like to add scripts, hints, documentation
     to the driver and/or the project web page.


4.   Links, other software
     ---------------------
     - Sourceforge project developing this driver and associated tools
         https://sourceforge.net/projects/gigaset307x
     - Yahoo! Group on the Siemens Gigaset family of devices
         https://de.groups.yahoo.com/group/Siemens-Gigaset
     - Siemens Gigaset/T-Sinus compatibility table
         http://www.erbze.info/sinus_gigaset.htm
	    (archived at https://web.archive.org/web/20100717020421/http://www.erbze.info:80/sinus_gigaset.htm )


5.   Credits
     -------
     Thanks to

     Karsten Keil
        for his help with isdn4linux
     Deti Fliegl
        for his base driver code
     Dennis Dietrich
        for his kernel 2.6 patches
     Andreas Rummel
        for his work and logs to get unimodem mode working
     Andreas Degert
        for his logs and patches to get cx 100 working
     Dietrich Feist
        for his generous donation of one M105 and two M101 cordless adapters
     Christoph Schweers
        for his generous donation of a M34 device

     and all the other people who sent logs and other information.

