problems with zyxel omni 288s in voice mode
"Robert J. Brown" (rj@eli.elilabs.com)
Mon, 13 Oct 1997 05:51:04 +0200
I am having trouble getting vgetty to work properly for me. Here is
my setup. I am running Linux kernel 2.0.29, P-200, 128 MB RAM, 9 GB
SCSI disk (total across 4 drives). I have a 10baseT LAN on an ISA
card. I am running mgetty 1.1.9 with the vgetty that comes in that
release.
I have a USR Courrier running ppp via dip to my ISP constantly. I
have Telebit WorldBlazer running ppp at 14.4 to my client's site
sometimes. Neither of these lines use vgetty or mgetty. I mention
them because they are frequently active when vgetty fails. Of course,
vgetty fails when they aren't active also.
I have a Zyxel Omni288S with the 1.18 version firmware running under
vgetty with distinctive ring enabled, and caller ID enabled. There
are 3 distinctive rings, which the modem reports as RING, RING 2, and
RING 4. My intent was to use RING for voicemail, RING 2 for fax/data,
and keep RING 4 for human pick-up only (vgetty should ignore this
ring).
There is a Logitech mouse on /dev/ttyS0, the Omni288S on ttyS1, the
Courrier on ttyS2, and the WorldBlazer on ttyS3. These are the
standard PC ports COM1: thru COM4:. They are physically implemented
by a Boca IO-2-by-4 card, which has 2 parallel ports (disabled by
jumper option) adns 4 serial ports. The serial ports on the
motherboard are disabled by BIOS setup option, as they do not work
properly under Linux (clone motherboard).
Here is the port configuration:
bash# setserial -bg /dev/ttyS?
/dev/ttyS0 at 0x03f8 (irq = 4) is a 16550A
/dev/ttyS1 at 0x02f8 (irq = 3) is a 16550A
/dev/ttyS2 at 0x03e8 (irq = 2) is a 16550A (spd_vhi)
/dev/ttyS3 at 0x02e8 (irq = 5) is a 16550A (spd_vhi)
Under mgetty, data and fax work prefectly, both inbound and outbound.
Under vgetty, things get messed up sometimes so that fax/data will not
answer, and I have to reset the modem with a power cycle. Also,
sometimes caller-ID stops working.
I have noticed an anomoly. When a voice call (RING) is being
answered, I get the following in the log (voice_log_level 6):
10/12 22:33:31 yS1 mdm_send: 'AT+FCLASS=2'
10/12 22:33:31 yS1 got:[0a]AT+FCLASS=2[0d]
10/12 22:33:31 yS1 mdm_command: string 'AT+FCLASS=2'
10/12 22:33:31 yS1 got:[0d][0a]O[fc][d9][f9]
10/12 22:33:41 yS1 Warning: got alarm signal!
10/12 22:33:41 yS1 mdm_read_byte: read returned -1: Interrupted system call
10/12 22:33:41 yS1 mdm_get_line: cannot read byte, return: Interrupted system call -> ERROR
10/12 22:33:41 yS1 no class 2/2.0 faxmodem, no faxing available
What on earth is this goofy "[0d][0a]O[fc][d9][f9]" response? I
played around with the modem and it seems that after a voice
operation, even when I do an 'ATZ' first, that an 'AT+FCLASS=2' gives
this goofy response instead of 'OK'. It did this with firmware level
1.15 also. I just flashed 1.18, and it still does the same thing.
I also see a few of these:
10/12 22:11:55 yS1 vgetty: Buffer underrun
Here is my mgetty.config, voice.conf, and log file for a voice call:
----------------------------------------------------------------
---------------- mgetty.config
----------------------------------------------------------------
#
# mgetty configuration file
#
# this is a sample configuration file, see mgetty.info for details
#
# comment lines start with a "#", empty lines are ignored
# ----- global section -----
#
# In this section, you put the global defaults, per-port stuff is below
# set the global debug level to "4" (default from policy.h)
debug 4
# set the local fax station id
fax-id 1 847 705 4925
# access the modem(s) with 38400 bps
speed 115200
# use these options to make the /dev/tty-device owned by "uucp.uucp"
# and mode "rw-rw-r--" (0664). *LEADING ZERO NEEDED!*
#port-owner uucp
#port-group uucp
#port-mode 0664
# use these options to make incoming faxes owned by "root.uucp"
# and mode "rw-r-----" (0640). *LEADING ZERO NEEDED!*
fax-owner rj
fax-group wheel
fax-mode 0640
# ----- port specific section -----
#
# Here you can put things that are valid only for one line, not the others
#
# Zoom V.FX 28.8, connected to ttyS0: don't do fax, less logging
#
#port ttyS0
# debug 3
# data-only y
# some other Rockwell modem, needs "switchbd 19200" to receive faxes
# properly (otherwise it will fail with "timeout").
#
#port ttyS1
# speed 38400
# switchbd 19200
# ZyXEL 2864, connected to ttyS1: maximum debugging, grab statistics
#
port ttyS1
# debug 8
init-chat "" \d\d\d+++\d\d\dATZ OK AT&FS2=255S40=124S7=90 OK ATN3S0=0S13.2=1 OK
statistics-chat "" AT OK ATI2 OK
statistics-file /var/spool/log/mgetty.stats.ttyS1
modem-type cls2
# direct connection of a VT100 terminal which doesn't like DTR drops
#
#port ttyS3
# direct y
# speed 19200
# toggle-dtr n
----------------------------------------------------------------
---------------- voice.conf
----------------------------------------------------------------
#
# Sample voice configuration file
# -------------------------------
#
# $Id: voice.conf-dist,v 1.10 1997/01/14 06:49:49 marc Exp $
#
# This file is read twice: First the program configuration is read and
# second the port configuration. This means that generic values at the
# beginning of the file will override program values on the second read.
# So if you want to make a generic value program dependant, remove it
# from the generic part of the config file.
#
# Watch out! Some options in this file are not yet implemented or only
# available with some modems.
#
#
# Generic default values
# ----------------------
#
part generic
#
# Possible log levels are:
#
# L_FATAL 0
# L_ERROR 1
# L_AUDIT 2
# L_WARN 3
# L_MESG 4
# L_NOISE 5
# L_JUNK 6
#
voice_log_level 5
#
# Primary voice directory for vgetty.
#
voice_dir /var/spool/voice
#
# Location of the flag file for new incoming messages relative to the
# primary voice directory.
#
message_flag_file .flag
#
# Location where vgetty stores the incoming voice messages relative to
# the primary voice directory.
#
receive_dir incoming
#
# Directory containing the messages for vgetty (greeting, handling the
# answering machine) relative to the primary voice directory.
#
message_dir messages
#
# Name of the file in MESSAGE_DIR that contains the names of
# the greeting message files (one per line, no white space).
#
message_list Index
#
# Filename of a backup greeting message in MESSAGE_DIR (used if
# the random selection fails to find a message).
#
backup_message standard.rmd
#
# Default port speed. The bps rate must be high enough for the compression
# mode used. Note that this is an integer, not one of the Bxxxx defines.
# This must be set to 38400 for Rockell modems. The default value is 38400.
#
port_speed 115200
#
# Default shell to invoke for shell scripts. Make sure this shell
# understands things like funtions, because the scripts rely on this.
# The default is "/bin/sh"
#
voice_shell /bin/sh
#
# Default port timeout in seconds for a read or write operation. The
# default value is 5 seconds.
#
port_timeout 10
#
# Default timeout for a dialout in seconds. The default value is 90 seconds.
#
dial_timeout 90
#
# Delay before sending a new voice command to the modem in milliseconds.
# The default is 50 milliseconds.
#
command_delay 150
#
# Minimum length of detected DTMF tones, in milliseconds. This is
# currently only supported by ZyXel modems with a ROM release of 6.12
# or above. The default is 30 milliseconds.
#
dtmf_len 30
#
# DTMF tone detection threshold in percent (0% to 100%). Increase this
# if the modem erroneously detects DTMF tones, decrease it if it fails to
# detect real ones. This is currently only supported by ZyXel modems
# with a ROM release of 6.12 or above. The default is 40%.
#
dtmf_threshold 40
#
# Time to wait for a DTMF tone to arrive when recording or waiting
# for DTMF input in seconds. The default is to wait for 7 seconds.
#
dtmf_wait 7
#
# In Australia the frequency of the busy signal is the same as the
# frequency of the fax calling tone. This causes problems on at least
# some modems. They report a fax calling tone, when there is a busy
# signal in reality. To help those user, vgetty will ignore any fax
# calling tone detected by the modem, when this option is set.
#
# The following companys suffer from this problem:
# - Telstra (formerly Telecom Australia)
# - Optus
# - Austel (regulatory authority)
#
# The default is of course off.
#
ignore_fax_dle false
#
# Output recorded voice samples without header and expect raw voice
# data on input for playback. This feature is turned off by default.
# Don't enable it unless you really know, what you are doing!
#
raw_data false
#
# This is the default compression mode for vgetty for incoming voice
# messages and for the recording option of vm. The mode 0 is a special
# mode, that will automatically choose a sane default value for every
# modem. The default is 0.
#
rec_compression 4
#
# This is the default recording speed for vgetty for incoming voice
# messages and for the recording option of vm. It is the number of samples
# per second. The speed 0 is a special speed, that will automatically
# choose a sane default value for every modem. The default is 0.
#
rec_speed 9600
#
# Silence detection length in 0.1 seconds. If the modem detects silence
# for this time, it sends a silence detect to the host. Default is
# 7 seconds (70 * 0.1 seconds).
#
rec_silence_len 70
#
# Silence detection threshold in percent (0% to 100%). Increase this value
# if you have a noisy phone line and the silence detection doesn't work
# reliably. The default is 40%.
#
rec_silence_threshold 40
#
# If REC_REMOVE_SILENCE is enabled, the trailing silence of an incoming
# voice message as detected by the modem will be deleted. This might
# cause you to miss parts of a message if the silence threshold is
# high and the caller is talking very quietly. To be on the safe side,
# don't define this. This feature is turned off by default.
#
rec_remove_silence true
#
# Maximum recording length in seconds. Hang up if somebody talks
# longer than this. Default is 5 minutes (300 seconds).
#
rec_max_len 300
#
# Minimum recording length in seconds. Some modems can not detect
# data or fax modems, so we use the recording time, to decide,
# what it is. This feature is by default disabled.
#
rec_min_len 0
#
# Enable hardware flow in record and playback mode if the modem
# supports it. This option is by default on.
#
do_hard_flow true
#
# Frequency for the beep command in Hz. The default is 933Hz.
#
beep_frequency 933
#
# Length for the beep command in 0.01sec. The default is 1.5 seconds
# (150 * 0.01 seconds).
#
beep_length 150
#
# Number of tries to open a voice modem device. The default is 3.
#
max_tries 3
#
# Delay between two tries to open a voice device in seconds. The default
# is 5 seconds.
#
retry_delay 5
#
# Default timeout for the voice watchdog. If this timer expires, the
# running program will be terminated. The default is 30 seconds.
#
watchdog_timeout 90
#
# Some modems support setting the receive gain. This value can be set in
# percent (0% to 100%). 0% is off, 100% is maximum. To use the modem
# default value set this to -1. The default is -1.
#
receive_gain -1
#
# Some modems support setting the transmit gain. This value can be set in
# percent (0% to 100%). 0% is off, 100% is maximum. To use the modem
# default value set this to -1. The default is -1.
#
transmit_gain -1
#
# Usually vgetty will enable the command echo from the modem. Since some
# modems sometimes forget this echo, vgetty complains about it. With this
# option you can turn the command echo off, which might make things more
# reliable, but bugs are much harder to trace. So don't ever think about
# mailing me a bug report with command echo turned off. I will simply ignore
# it. The default is to enable command echo.
#
enable_command_echo true
#
# Program specific initializations
# --------------------------------
#
#
# Default values for vgetty
# -------------------------
#
program vgetty
#
# Volume of the internal speaker in percent when answering the phone
# (0% to 100%). 0% is off, 100% is maximum. The default is 100%.
#
# speaker_answer_volume 30
#
# Default number of rings to wait before picking up the phone.
#
# Instead of a number, you can also give a file name, that contains
# a single number with the desired number of rings. Vgetty will
# automatically append the name of the modem device to the file name.
# The file name must be an absolut path starting with a leading "/".
# E.g. "rings /etc/rings" and the modem device is ttyS0, will
# lead to the file name "/etc/rings.ttyS0". If this file doesn't
# exist, vgetty will check for a file without the modem device name
# appended. In this example, vgetty would check for /etc/rings.
#
# The default is 3
#
rings 2
#
# Default answer mode when vgetty picks up the phone after incoming
# rings.
#
# Instead of an answer mode, you can also give a file name, that
# contains a single line with the desired answer mode. Vgetty will
# automatically append the name of the modem device to the file name.
# The file name must be an absolut path starting with a leading "/".
# E.g. "answer_mode /etc/answer" and the modem device is ttyS0, will
# lead to the file name "/etc/answer.ttyS0". If this file doesn't
# exist, vgetty will check for a file without the modem device name
# appended. In this example, vgetty would check for /etc/answer.
#
# The default is "voice:fax:data".
#
#answer_mode voice:fax:data
#
# When switching to data or fax mode, always switch to fax mode and
# enable autodetection of data/fax. Some modems report wrong DLE codes
# and so the predetection with DLE codes does not work.
#
force_autodetect false
#
# If vgetty knows that there are new messages (the flag file exists),
# it will turn on the AA lamp on an external modem and enable the toll
# saver - it will answer the phone TOLL_SAVER_RINGS earlier than the
# default. This feature is turned off by default.
#
#toll_saver_rings 2
#
# Should the recorded voice message file be kept even if data, fax or
# DTMF codes were detected? If this is set, vgetty never deletes
# a recording, if it is not set it will delete the recording, if an
# incoming data or fax call is detected or if DTMF codes were send. Also
# this should work in nearly every situation, it makes you loose the
# recording, if the caller "plays" with DTMF codes to make the message
# even more beautiful. This feature is enabled by default.
#
rec_always_keep false
#
# The programs defined below get called by vgetty.
#
# Define an empty program name, if you want to disabled one of those
# programs.
#
#
# There are two separate uses for the Data/Voice button on a ZyXEL:
#
# - If a RING was detected recently, answer the phone with the
# answer mode set for this case.
# - Otherwise, call an external program to play back messages
#
# If you don't define button_prgogram, vgetty will always pick up
# the phone if Data/Voice is pressed.
#
# The default value is "".
#
button_program
#
# Program called when the phone is answered, this is instead
# of the normal behaviour. Don't define this unless you want
# to e.g. set up a voice mailbox where the normal answering
# machine behaviour would be inappropiate. The C code is probably
# more stable and uses less resources.
#
# The default value is "".
#
call_program
#
# Program called when a DTMF command in the form '*digits#' is received.
# The argument is the string of digits received (without '*' and '#').
# The default value is "dtmf.sh".
#
dtmf_program dtmf.sh
#
# Program called when a voice message has been received.
# The argument is the filename of the recorded message.
# The default value is "".
#
message_program /home/rj/scripts/voicemail_rcvd
#
# Should vgetty use the AA LED on some modems to indicate that new
# messages have arrived? This is done by setting the modem register
# S0 to a value of 255. Some modems have a maximum number of rings
# allowed and autoanswer after this, so they can not use this feature.
# This option is by default off.
#
do_message_light false
#
# Default values for vm
# ---------------------
#
program vm
#
# Voice devices that vm can use e.g. "voice_devices ttyS0:ttyS1". Since
# I don't know to which ports your modems are connected, the default is ""
#
voice_devices ttyS1
#
# Timeout for a dialout operation in seconds. The default is 90 seconds.
#
dialout_timeout 90
#
# Volume of the internal speaker in percent when it is used to play a
# message with vm (0% to 100%). The default is 100%.
#
speaker_play_volume 50
#
# Default values for the pvf tools
# --------------------------------
#
program pvf
#
# There are currently no defaults.
#
#
# Port specific configuration
# ---------------------------
#
#
# Here you can optionally set some of the previously set values to different
# ones for specific ports.
#
# E.g. we have a modem on port ttyS1
#
#port ttyS1
#
# Ring type specific configuration
# --------------------------------
#
#
# Here you can optionally set some of the previously set values to different
# ones for specific ring types. The following ring types are possible:
#
# ring - for a normal ring
# ring1 - for distinctive ring number 1
# ring2 - for distinctive ring number 2
# ring3 - for distinctive ring number 3
# ring4 - for distinctive ring number 4
# ring5 - for distinctive ring number 5
# virtual - for a virtual ring (kill -USR1 <mgetty pid>)
# button - if someone pressed the data/voice button on the modem
#
# Note: The current mgetty implementation maps the data/voice button
# event to a virtual ring event.
#
# Note: ISDN MSNs will be mapped to distinctive rings in the future.
#
# E.g. we want to answer the modem on a virtual ring with answer
# mode "fax:data".
#
#ring_type virtual
#answer_mode fax:data
#
# Or e.g. we have one modem and want to answer with voice on a normal
# ring and with fax:data on distinctive ring1.
#
# RING = 705-0424 eli voice
ring_type ring
#rings /usr/local/etc/mgetty+sendfax/rings/ring
rings 3
#answer_mode /usr/local/etc/mgetty+sendfax/answer/ring
answer_mode voice/fax
# RING 2 = 705-3976 eli fax
ring_type ring2
#rings /usr/local/etc/mgetty+sendfax/rings/ring2
rings 2
#answer_mode /usr/local/etc/mgetty+sendfax/answer/ring2
answer_mode data
# RING 4 = 705-4925 eli data
ring_type ring4
#rings /usr/local/etc/mgetty+sendfax/rings/ring4
rings 2
answer_mode /usr/local/etc/mgetty+sendfax/answer/ring4
answer_mode fax
#
#ring_type ring1
################################## NOTE: RING 4 = 705-4925 eli data
#
# Due to some weirdness in vgetty, RING 4 on line 705-4925 is not
# used by vgetty, but will be a private line for humans to answer.
# The distinctive ring pattern is SHORT-LONG-SHORT. This number
# should be used by "priveledged" people who do not want the voicemail
# but only want to talk to a human.
#
############################################################
# rings 1
# answer_mode fax:data
#
# The commands are commented out, because I don't want to set some ring
# specific defaults in this sample configuration file. I just want to
# show you how to do it.
#
# Note: Setting the number of rings will have no effect until the mgetty
# to vgetty interface is changed.
#
# Note: If you have one modem and distinctive ring, you can simply define
# the answer mode directly in this file for the different rings. If you
# have more than one modem and you want them to react different on the same
# type of ring, you have to define rings and answer_mode as pointers to
# files. E.g.
#
# ring_type ring
#
# rings /etc/rings/ring
# answer_mode /etc/answer/ring
#
# ring_type ring1
#
# rings /etc/rings/ring1
# answer_mode /etc/answer/ring1
#
# and so on. Now you can set up a different number of rings and answer modes
# by creating the files:
#
# /etc/rings/ring - for the default value
# /etc/rings/ring.ttyS0 - for the value for device ttyS0
# /etc/rings/ring.ttyS1 - for the value for device ttyS1
#
# And the same way you can set the answer modes.
#
----------------------------------------------------------------
---------------- vgetty.ttyS1
----------------------------------------------------------------
log reset on Sun Oct 12 22:32:13 CDT 1997
10/12 22:32:32 yS1 checking lockfiles, locking the line
10/12 22:32:32 yS1 makelock(ttyS1) called
10/12 22:32:32 yS1 do_makelock: lock='/var/lock/LCK..ttyS1'
10/12 22:32:32 yS1 lock made
10/12 22:32:32 yS1 waiting for ``RING_''
10/12 22:32:32 yS1 got: TIME: 10-12 22:40 [0d][0a]CALLER NUMBER: 8477050370[0d][0a]CALLER NAME: BROWN,ROBT [0d][0a][0d][0a]RING[0d] ** found **
10/12 22:32:37 yS1 waiting for ``RING_''
10/12 22:32:37 yS1 got: [0a][0d][0a]RING[0d] ** found **
10/12 22:32:43 yS1 reading ring_type ring configuration from config file /usr/local/etc/mgetty+sendfax/voice.conf
10/12 22:32:43 yS1 reading /usr/local/etc/mgetty+sendfax/voice.conf...
10/12 22:32:43 yS1 conf lib: read: 'part generic'
10/12 22:32:43 yS1 found CT_KEYWORD part generic
10/12 22:32:43 yS1 conf lib: read: 'voice_log_level 6'
10/12 22:32:43 yS1 conf lib: read: 'voice_dir /var/spool/voice'
10/12 22:32:43 yS1 conf lib: read: 'message_flag_file .flag'
10/12 22:32:43 yS1 conf lib: read: 'receive_dir incoming'
10/12 22:32:43 yS1 conf lib: read: 'message_dir messages'
10/12 22:32:43 yS1 conf lib: read: 'message_list Index'
10/12 22:32:43 yS1 conf lib: read: 'backup_message standard.rmd'
10/12 22:32:43 yS1 conf lib: read: 'port_speed 115200'
10/12 22:32:43 yS1 conf lib: read: 'voice_shell /bin/sh'
10/12 22:32:43 yS1 conf lib: read: 'port_timeout 10'
10/12 22:32:43 yS1 conf lib: read: 'dial_timeout 90'
10/12 22:32:43 yS1 conf lib: read: 'command_delay 150'
10/12 22:32:43 yS1 conf lib: read: 'dtmf_len 30'
10/12 22:32:43 yS1 conf lib: read: 'dtmf_threshold 40'
10/12 22:32:43 yS1 conf lib: read: 'dtmf_wait 7'
10/12 22:32:43 yS1 conf lib: read: 'ignore_fax_dle false'
10/12 22:32:43 yS1 conf lib: read: 'raw_data false'
10/12 22:32:43 yS1 conf lib: read: 'rec_compression 4'
10/12 22:32:43 yS1 conf lib: read: 'rec_speed 9600'
10/12 22:32:43 yS1 conf lib: read: 'rec_silence_len 70'
10/12 22:32:43 yS1 conf lib: read: 'rec_silence_threshold 40'
10/12 22:32:43 yS1 conf lib: read: 'rec_remove_silence true'
10/12 22:32:43 yS1 conf lib: read: 'rec_max_len 300'
10/12 22:32:43 yS1 conf lib: read: 'rec_min_len 0'
10/12 22:32:43 yS1 conf lib: read: 'do_hard_flow true'
10/12 22:32:43 yS1 conf lib: read: 'beep_frequency 933'
10/12 22:32:43 yS1 conf lib: read: 'beep_length 150'
10/12 22:32:43 yS1 conf lib: read: 'max_tries 3'
10/12 22:32:43 yS1 conf lib: read: 'retry_delay 5'
10/12 22:32:43 yS1 conf lib: read: 'watchdog_timeout 90'
10/12 22:32:43 yS1 conf lib: read: 'receive_gain -1'
10/12 22:32:43 yS1 conf lib: read: 'transmit_gain -1'
10/12 22:32:43 yS1 conf lib: read: 'enable_command_echo true'
10/12 22:32:43 yS1 conf lib: read: 'program vgetty'
10/12 22:32:43 yS1 conf lib: read: 'rings 2'
10/12 22:32:43 yS1 conf lib: read: 'force_autodetect false'
10/12 22:32:43 yS1 conf lib: read: 'rec_always_keep false'
10/12 22:32:43 yS1 conf lib: read: 'button_program '
10/12 22:32:43 yS1 conf lib: read: 'call_program '
10/12 22:32:43 yS1 conf lib: read: 'dtmf_program dtmf.sh'
10/12 22:32:43 yS1 conf lib: read: 'message_program /home/rj/scripts/voicemail_rcvd'
10/12 22:32:43 yS1 conf lib: read: 'do_message_light false'
10/12 22:32:43 yS1 conf lib: read: 'program vm'
10/12 22:32:43 yS1 conf lib: read: 'voice_devices ttyS1'
10/12 22:32:43 yS1 conf lib: read: 'dialout_timeout 90'
10/12 22:32:43 yS1 conf lib: read: 'speaker_play_volume 50'
10/12 22:32:43 yS1 conf lib: read: 'program pvf'
10/12 22:32:43 yS1 conf lib: read: 'ring_type ring'
10/12 22:32:43 yS1 section: ring_type ring, **found**
10/12 22:32:43 yS1 conf lib: read: 'rings 3'
10/12 22:32:43 yS1 conf lib: read: 'answer_mode voice/fax'
10/12 22:32:43 yS1 conf lib: read: 'ring_type ring2'
10/12 22:32:43 yS1 section: ring_type ring2, ignore
10/12 22:32:43 yS1 conf lib: read: 'rings 2'
10/12 22:32:43 yS1 conf lib: read: 'answer_mode data'
10/12 22:32:43 yS1 conf lib: read: 'ring_type ring4'
10/12 22:32:43 yS1 section: ring_type ring4, ignore
10/12 22:32:43 yS1 conf lib: read: 'rings 2'
10/12 22:32:43 yS1 conf lib: read: 'answer_mode /usr/local/etc/mgetty+sendfax/answer/ring4'
10/12 22:32:43 yS1 conf lib: read: 'answer_mode fax'
10/12 22:32:43 yS1 key: 'part', type=6, flags=4, data=(ignored)
10/12 22:32:43 yS1 key: 'program', type=6, flags=4, data=(ignored)
10/12 22:32:43 yS1 key: 'port', type=6, flags=4, data=(ignored)
10/12 22:32:43 yS1 key: 'ring_type', type=6, flags=4, data=(ignored)
10/12 22:32:43 yS1 key: 'voice_log_level', type=0, flags=3, data=5
10/12 22:32:43 yS1 key: 'voice_devices', type=1, flags=0, data=(empty)
10/12 22:32:43 yS1 key: 'port_speed', type=0, flags=3, data=115200
10/12 22:32:43 yS1 key: 'port_timeout', type=0, flags=3, data=10
10/12 22:32:43 yS1 key: 'dtmf_len', type=0, flags=3, data=30
10/12 22:32:43 yS1 key: 'dtmf_threshold', type=0, flags=3, data=40
10/12 22:32:43 yS1 key: 'dtmf_wait', type=0, flags=3, data=7
10/12 22:32:43 yS1 key: 'rec_compression', type=0, flags=3, data=4
10/12 22:32:43 yS1 key: 'rec_speed', type=0, flags=3, data=9600
10/12 22:32:43 yS1 key: 'rec_silence_len', type=0, flags=3, data=70
10/12 22:32:43 yS1 key: 'rec_silence_threshold', type=0, flags=3, data=40
10/12 22:32:43 yS1 key: 'rec_remove_silence', type=3, flags=3, data=TRUE
10/12 22:32:43 yS1 key: 'rec_max_len', type=0, flags=3, data=300
10/12 22:32:43 yS1 key: 'receive_gain', type=0, flags=3, data=50
10/12 22:32:43 yS1 key: 'transmit_gain', type=0, flags=3, data=50
10/12 22:32:43 yS1 key: 'rings', type=1, flags=3, data=3
10/12 22:32:43 yS1 key: 'answer_mode', type=1, flags=3, data=voice/fax
10/12 22:32:43 yS1 key: 'toll_saver_rings', type=0, flags=1, data=0
10/12 22:32:43 yS1 key: 'rec_always_keep', type=3, flags=3, data=FALSE
10/12 22:32:43 yS1 key: 'voice_dir', type=1, flags=3, data=/var/spool/voice
10/12 22:32:43 yS1 key: 'message_flag_file', type=1, flags=3, data=.flag
10/12 22:32:43 yS1 key: 'receive_dir', type=1, flags=3, data=incoming
10/12 22:32:43 yS1 key: 'message_dir', type=1, flags=3, data=messages
10/12 22:32:43 yS1 key: 'message_list', type=1, flags=3, data=Index
10/12 22:32:43 yS1 key: 'backup_message', type=1, flags=3, data=standard.rmd
10/12 22:32:43 yS1 key: 'dialout_timeout', type=0, flags=1, data=90
10/12 22:32:43 yS1 key: 'beep_frequency', type=0, flags=3, data=933
10/12 22:32:43 yS1 key: 'beep_length', type=0, flags=3, data=150
10/12 22:32:43 yS1 key: 'raw_data', type=3, flags=3, data=FALSE
10/12 22:32:43 yS1 key: 'max_tries', type=0, flags=3, data=3
10/12 22:32:43 yS1 key: 'retry_delay', type=0, flags=3, data=5
10/12 22:32:43 yS1 key: 'voice_shell', type=1, flags=3, data=/bin/sh
10/12 22:32:43 yS1 key: 'button_program', type=1, flags=3, data=
10/12 22:32:43 yS1 key: 'call_program', type=1, flags=3, data=
10/12 22:32:43 yS1 key: 'dtmf_program', type=1, flags=3, data=dtmf.sh
10/12 22:32:43 yS1 key: 'message_program', type=1, flags=3, data=/home/rj/scripts/voicemail_rcvd
10/12 22:32:43 yS1 key: 'do_message_light', type=3, flags=3, data=FALSE
10/12 22:32:43 yS1 key: 'do_hard_flow', type=3, flags=3, data=TRUE
10/12 22:32:43 yS1 key: 'force_autodetect', type=3, flags=3, data=FALSE
10/12 22:32:43 yS1 key: 'watchdog_timeout', type=0, flags=3, data=90
10/12 22:32:43 yS1 key: 'rec_min_len', type=0, flags=3, data=0
10/12 22:32:43 yS1 key: 'command_delay', type=0, flags=3, data=150
10/12 22:32:43 yS1 key: 'ignore_fax_dle', type=3, flags=3, data=FALSE
10/12 22:32:43 yS1 key: 'dial_timeout', type=0, flags=3, data=90
10/12 22:32:43 yS1 key: 'enable_command_echo', type=3, flags=3, data=TRUE
10/12 22:32:43 yS1 vgetty: entering voice mode
10/12 22:32:43 yS1 vgetty: Installing signal handlers
10/12 22:32:43 yS1 voice command: 'AT+FCLASS?' -> ''
10/12 22:32:43 yS1 voice command: '' -> 'OK'
10/12 22:32:43 yS1 voice command: 'AT+FCLASS=8' -> 'OK'
10/12 22:32:44 yS1 voice command: 'AT+VLS=2' -> 'OK|CONNECT'
10/12 22:32:44 yS1 playing voice file /var/spool/voice/messages/standard.rmd
10/12 22:32:44 yS1 vgetty: raw modem data header found
10/12 22:32:44 yS1 vgetty: modem type ZyXEL 2864 found
10/12 22:32:44 yS1 vgetty: compression method 0x0004, speed 9600, bits 4
10/12 22:32:44 yS1 voice command: 'AT+VSM=4,9600' -> 'OK'
10/12 22:32:44 yS1 voice command: 'AT+FLO=2' -> 'OK'
10/12 22:32:44 yS1 tio_set_flow_control( HARD XON_OUT )
10/12 22:32:44 yS1 voice command: 'AT+VTX' -> 'CONNECT'
10/12 22:32:45 yS1 vgetty: Buffer underrun
10/12 22:32:56 yS1 voice command: '' -> 'OK|VCON'
10/12 22:32:57 yS1 voice command: 'AT' -> 'OK'
10/12 22:32:57 yS1 voice command: 'AT+VTS=[933,0,150]' -> ''
10/12 22:32:59 yS1 voice command: '' -> 'OK'
10/12 22:32:59 yS1 recording voice file /var/spool/voice/incoming/va09875.rmd
10/12 22:32:59 yS1 voice command: 'AT+VSM=4,9600' -> 'OK'
10/12 22:32:59 yS1 voice command: 'AT+FLO=2' -> 'OK'
10/12 22:33:00 yS1 tio_set_flow_control( HARD XON_IN )
10/12 22:33:00 yS1 voice command: 'AT+VRX' -> 'CONNECT'
10/12 22:33:11 yS1 voice command: 'AT' -> 'OK'
10/12 22:33:11 yS1 voice command: 'AT+VTS=[933,0,150]' -> ''
10/12 22:33:13 yS1 voice command: '' -> 'OK'
10/12 22:33:13 yS1 voice command: 'AT+VLS=0' -> 'OK'
10/12 22:33:13 yS1 vgetty: leaving voice mode
10/12 22:33:13 yS1 voice command: 'AT+FCLASS=2' -> 'OK'
10/12 22:33:25 yS1 vgetty: timeout while reading character from voice modem: No such file or directory
10/12 22:33:25 yS1 vgetty: Restoring signal handlers
10/12 22:33:25 yS1 closing voice modem device
10/12 22:33:25 yS1 removing lock file
10/12 22:33:25 ##### message keep, length=00:00:12, name='BROWN,ROBT', caller=8477050370, dev=ttyS1, pid=9875
10/12 22:33:25 yS1 executing message program, dev=ttyS1, pid=9875
10/12 22:33:25 yS1 vgetty: Executing shell script /home/rj/scripts/voicemail_rcvd with shell /bin/sh
10/12 22:33:25 yS1 vgetty(0): HELLO SHELL
10/12 22:33:25 yS1 vgetty: shell exited normally with status 0x0000
--
10/12 22:33:26 yS1 vgetty: experimental test release 0.7.3 / 10Aug97
10/12 22:33:26 yS1 mgetty: experimental test release 1.1.9-Aug17
10/12 22:33:26 yS1 reading generic configuration from config file /usr/local/etc/mgetty+sendfax/voice.conf
10/12 22:33:26 yS1 reading program vgetty configuration from config file /usr/local/etc/mgetty+sendfax/voice.conf
10/12 22:33:26 yS1 reading port ttyS1 configuration from config file /usr/local/etc/mgetty+sendfax/voice.conf
10/12 22:33:26 yS1 reading /usr/local/etc/mgetty+sendfax/voice.conf...
10/12 22:33:26 yS1 conf lib: read: 'part generic'
10/12 22:33:26 yS1 found CT_KEYWORD part generic
10/12 22:33:26 yS1 conf lib: read: 'voice_log_level 6'
10/12 22:33:26 yS1 conf lib: read: 'voice_dir /var/spool/voice'
10/12 22:33:26 yS1 conf lib: read: 'message_flag_file .flag'
10/12 22:33:26 yS1 conf lib: read: 'receive_dir incoming'
10/12 22:33:26 yS1 conf lib: read: 'message_dir messages'
10/12 22:33:26 yS1 conf lib: read: 'message_list Index'
10/12 22:33:26 yS1 conf lib: read: 'backup_message standard.rmd'
10/12 22:33:26 yS1 conf lib: read: 'port_speed 115200'
10/12 22:33:26 yS1 conf lib: read: 'voice_shell /bin/sh'
10/12 22:33:26 yS1 conf lib: read: 'port_timeout 10'
10/12 22:33:26 yS1 conf lib: read: 'dial_timeout 90'
10/12 22:33:26 yS1 conf lib: read: 'command_delay 150'
10/12 22:33:26 yS1 conf lib: read: 'dtmf_len 30'
10/12 22:33:26 yS1 conf lib: read: 'dtmf_threshold 40'
10/12 22:33:26 yS1 conf lib: read: 'dtmf_wait 7'
10/12 22:33:26 yS1 conf lib: read: 'ignore_fax_dle false'
10/12 22:33:26 yS1 conf lib: read: 'raw_data false'
10/12 22:33:26 yS1 conf lib: read: 'rec_compression 4'
10/12 22:33:26 yS1 conf lib: read: 'rec_speed 9600'
10/12 22:33:26 yS1 conf lib: read: 'rec_silence_len 70'
10/12 22:33:26 yS1 conf lib: read: 'rec_silence_threshold 40'
10/12 22:33:26 yS1 conf lib: read: 'rec_remove_silence true'
10/12 22:33:26 yS1 conf lib: read: 'rec_max_len 300'
10/12 22:33:26 yS1 conf lib: read: 'rec_min_len 0'
10/12 22:33:26 yS1 conf lib: read: 'do_hard_flow true'
10/12 22:33:26 yS1 conf lib: read: 'beep_frequency 933'
10/12 22:33:26 yS1 conf lib: read: 'beep_length 150'
10/12 22:33:26 yS1 conf lib: read: 'max_tries 3'
10/12 22:33:26 yS1 conf lib: read: 'retry_delay 5'
10/12 22:33:26 yS1 conf lib: read: 'watchdog_timeout 90'
10/12 22:33:26 yS1 conf lib: read: 'receive_gain -1'
10/12 22:33:26 yS1 conf lib: read: 'transmit_gain -1'
10/12 22:33:26 yS1 conf lib: read: 'enable_command_echo true'
10/12 22:33:26 yS1 conf lib: read: 'program vgetty'
10/12 22:33:26 yS1 conf lib: read: 'rings 2'
10/12 22:33:26 yS1 conf lib: read: 'force_autodetect false'
10/12 22:33:26 yS1 conf lib: read: 'rec_always_keep false'
10/12 22:33:26 yS1 conf lib: read: 'button_program '
10/12 22:33:26 yS1 conf lib: read: 'call_program '
10/12 22:33:26 yS1 conf lib: read: 'dtmf_program dtmf.sh'
10/12 22:33:26 yS1 conf lib: read: 'message_program /home/rj/scripts/voicemail_rcvd'
10/12 22:33:26 yS1 conf lib: read: 'do_message_light false'
10/12 22:33:26 yS1 conf lib: read: 'program vm'
10/12 22:33:26 yS1 conf lib: read: 'voice_devices ttyS1'
10/12 22:33:26 yS1 conf lib: read: 'dialout_timeout 90'
10/12 22:33:26 yS1 conf lib: read: 'speaker_play_volume 50'
10/12 22:33:26 yS1 conf lib: read: 'program pvf'
10/12 22:33:26 yS1 conf lib: read: 'ring_type ring'
10/12 22:33:26 yS1 conf lib: read: 'rings 3'
10/12 22:33:26 yS1 conf lib: read: 'answer_mode voice/fax'
10/12 22:33:26 yS1 conf lib: read: 'ring_type ring2'
10/12 22:33:26 yS1 conf lib: read: 'rings 2'
10/12 22:33:26 yS1 conf lib: read: 'answer_mode data'
10/12 22:33:26 yS1 conf lib: read: 'ring_type ring4'
10/12 22:33:26 yS1 conf lib: read: 'rings 2'
10/12 22:33:26 yS1 conf lib: read: 'answer_mode /usr/local/etc/mgetty+sendfax/answer/ring4'
10/12 22:33:26 yS1 conf lib: read: 'answer_mode fax'
10/12 22:33:26 yS1 key: 'part', type=6, flags=4, data=(ignored)
10/12 22:33:26 yS1 key: 'program', type=6, flags=4, data=(ignored)
10/12 22:33:26 yS1 key: 'port', type=6, flags=4, data=(ignored)
10/12 22:33:26 yS1 key: 'ring_type', type=6, flags=4, data=(ignored)
10/12 22:33:26 yS1 key: 'voice_log_level', type=0, flags=3, data=6
10/12 22:33:26 yS1 key: 'voice_devices', type=1, flags=0, data=(empty)
10/12 22:33:26 yS1 key: 'port_speed', type=0, flags=3, data=115200
10/12 22:33:26 yS1 key: 'port_timeout', type=0, flags=3, data=10
10/12 22:33:26 yS1 key: 'dtmf_len', type=0, flags=3, data=30
10/12 22:33:26 yS1 key: 'dtmf_threshold', type=0, flags=3, data=40
10/12 22:33:26 yS1 key: 'dtmf_wait', type=0, flags=3, data=7
10/12 22:33:26 yS1 key: 'rec_compression', type=0, flags=3, data=4
10/12 22:33:26 yS1 key: 'rec_speed', type=0, flags=3, data=9600
10/12 22:33:26 yS1 key: 'rec_silence_len', type=0, flags=3, data=70
10/12 22:33:26 yS1 key: 'rec_silence_threshold', type=0, flags=3, data=40
10/12 22:33:26 yS1 key: 'rec_remove_silence', type=3, flags=3, data=TRUE
10/12 22:33:26 yS1 key: 'rec_max_len', type=0, flags=3, data=300
10/12 22:33:26 yS1 key: 'receive_gain', type=0, flags=3, data=-1
10/12 22:33:26 yS1 key: 'transmit_gain', type=0, flags=3, data=-1
10/12 22:33:26 yS1 key: 'rings', type=1, flags=3, data=2
10/12 22:33:26 yS1 key: 'answer_mode', type=1, flags=1, data=voice:fax:data
10/12 22:33:26 yS1 key: 'toll_saver_rings', type=0, flags=1, data=0
10/12 22:33:26 yS1 key: 'rec_always_keep', type=3, flags=3, data=FALSE
10/12 22:33:26 yS1 key: 'voice_dir', type=1, flags=3, data=/var/spool/voice
10/12 22:33:26 yS1 key: 'message_flag_file', type=1, flags=3, data=.flag
10/12 22:33:26 yS1 key: 'receive_dir', type=1, flags=3, data=incoming
10/12 22:33:26 yS1 key: 'message_dir', type=1, flags=3, data=messages
10/12 22:33:26 yS1 key: 'message_list', type=1, flags=3, data=Index
10/12 22:33:26 yS1 key: 'backup_message', type=1, flags=3, data=standard.rmd
10/12 22:33:26 yS1 key: 'dialout_timeout', type=0, flags=1, data=90
10/12 22:33:26 yS1 key: 'beep_frequency', type=0, flags=3, data=933
10/12 22:33:26 yS1 key: 'beep_length', type=0, flags=3, data=150
10/12 22:33:26 yS1 key: 'raw_data', type=3, flags=3, data=FALSE
10/12 22:33:26 yS1 key: 'max_tries', type=0, flags=3, data=3
10/12 22:33:26 yS1 key: 'retry_delay', type=0, flags=3, data=5
10/12 22:33:26 yS1 key: 'voice_shell', type=1, flags=3, data=/bin/sh
10/12 22:33:26 yS1 key: 'button_program', type=1, flags=3, data=
10/12 22:33:26 yS1 key: 'call_program', type=1, flags=3, data=
10/12 22:33:26 yS1 key: 'dtmf_program', type=1, flags=3, data=dtmf.sh
10/12 22:33:26 yS1 key: 'message_program', type=1, flags=3, data=/home/rj/scripts/voicemail_rcvd
10/12 22:33:26 yS1 key: 'do_message_light', type=3, flags=3, data=FALSE
10/12 22:33:26 yS1 key: 'do_hard_flow', type=3, flags=3, data=TRUE
10/12 22:33:26 yS1 key: 'force_autodetect', type=3, flags=3, data=FALSE
10/12 22:33:26 yS1 key: 'watchdog_timeout', type=0, flags=3, data=90
10/12 22:33:26 yS1 key: 'rec_min_len', type=0, flags=3, data=0
10/12 22:33:26 yS1 key: 'command_delay', type=0, flags=3, data=150
10/12 22:33:26 yS1 key: 'ignore_fax_dle', type=3, flags=3, data=FALSE
10/12 22:33:26 yS1 key: 'dial_timeout', type=0, flags=3, data=90
10/12 22:33:26 yS1 key: 'enable_command_echo', type=3, flags=3, data=TRUE
10/12 22:33:26 yS1 check for lockfiles
10/12 22:33:26 yS1 checklock: stat failed, no file
10/12 22:33:26 yS1 locking the line
10/12 22:33:26 yS1 makelock(ttyS1) called
10/12 22:33:26 yS1 do_makelock: lock='/var/lock/LCK..ttyS1'
10/12 22:33:26 yS1 lock made
10/12 22:33:26 yS1 tio_get_rs232_lines: status: RTS CTS DSR DTR
10/12 22:33:26 yS1 lowering DTR to reset Modem
10/12 22:33:27 yS1 tss: set speed to 38400 (017)
10/12 22:33:27 yS1 tio_set_flow_control( HARD )
10/12 22:33:27 yS1 waiting for line to clear (VTIME), read:
10/12 22:33:27 yS1 send: \d\d\d+++\d\d\dATZ[0d]
10/12 22:33:30 yS1 waiting for ``OK''
10/12 22:33:30 yS1 got: ATZ[0d]
10/12 22:33:30 yS1 CND: ATZ[0d][0a]OK ** found **
10/12 22:33:30 yS1 send: AT&FS2=255S40=124S7=90[0d]
10/12 22:33:30 yS1 waiting for ``OK''
10/12 22:33:30 yS1 got: [0d]
10/12 22:33:30 yS1 CND: OK[0a]AT&FS2=255S40=124S7=90[0d]
10/12 22:33:30 yS1 CND: AT&FS2=255S40=124S7=90[0d][0a]OK ** found **
10/12 22:33:30 yS1 send: ATN3S0=0S13.2=1[0d]
10/12 22:33:30 yS1 waiting for ``OK''
10/12 22:33:30 yS1 got: [0d]
10/12 22:33:30 yS1 CND: OK[0a]ATN3S0=0S13.2=1[0d]
10/12 22:33:30 yS1 CND: ATN3S0=0S13.2=1[0d][0a]OK ** found **
10/12 22:33:30 yS1 send: AT[0d]
10/12 22:33:30 yS1 do_stat: expect 'OK' ** found **
10/12 22:33:30 yS1 send: ATI2[0d]
10/12 22:33:30 yS1 do_stat: expect 'OK' ** found **
10/12 22:33:31 yS1 mdm_send: 'AT+FCLASS=2'
10/12 22:33:31 yS1 got:[0a]AT+FCLASS=2[0d]
10/12 22:33:31 yS1 mdm_command: string 'AT+FCLASS=2'
10/12 22:33:31 yS1 got:[0d][0a]O[fc][d9][f9]
10/12 22:33:41 yS1 Warning: got alarm signal!
10/12 22:33:41 yS1 mdm_read_byte: read returned -1: Interrupted system call
10/12 22:33:41 yS1 mdm_get_line: cannot read byte, return: Interrupted system call -> ERROR
10/12 22:33:41 yS1 no class 2/2.0 faxmodem, no faxing available
10/12 22:33:41 yS1 tss: set speed to 115200 (10002)
10/12 22:33:41 yS1 tio_set_flow_control( HARD )
10/12 22:33:41 yS1 detecting voice modem type
10/12 22:33:41 yS1 vgetty: ATE1
10/12 22:33:41 yS1 voice command: '' -> 'OK|ATE1'
10/12 22:33:41 yS1 serial port: ATE1
10/12 22:33:41 yS1 serial port: OK
10/12 22:33:41 yS1 voice command: 'ATI' -> ''
10/12 22:33:41 yS1 vgetty: ATI
10/12 22:33:41 yS1 serial port: ATI
10/12 22:33:41 yS1 serial port: 288
10/12 22:33:41 yS1 ZyXEL 2864: OK
10/12 22:33:41 yS1 ZyXEL 2864 detected
10/12 22:33:41 yS1 vgetty: queued event 0x4000 at position 0000
10/12 22:33:41 yS1 initializing ZyXEL 2864 voice modem
10/12 22:33:41 yS1 voice command: 'ATS48.5=1' -> 'OK'
10/12 22:33:41 yS1 vgetty: ATS48.5=1
10/12 22:33:41 yS1 ZyXEL 2864: ATS48.5=1
10/12 22:33:41 yS1 ZyXEL 2864: OK
10/12 22:33:41 yS1 voice command: 'ATS40.3=1 S40.4=1 S40.5=1 S40.6=1' -> 'OK'
10/12 22:33:42 yS1 vgetty: ATS40.3=1 S40.4=1 S40.5=1 S40.6=1
10/12 22:33:42 yS1 ZyXEL 2864: ATS40.3=1 S40.4=1 S40.5=1 S40.6=1
10/12 22:33:42 yS1 ZyXEL 2864: OK
10/12 22:33:42 yS1 voice command: 'AT+VIT=100' -> 'OK'
10/12 22:33:42 yS1 vgetty: AT+VIT=100
10/12 22:33:42 yS1 ZyXEL 2864: AT+VIT=100
10/12 22:33:42 yS1 ZyXEL 2864: OK
10/12 22:33:42 yS1 voice command: 'AT+VDD=6,6' -> 'OK'
10/12 22:33:42 yS1 vgetty: AT+VDD=6,6
10/12 22:33:42 yS1 ZyXEL 2864: AT+VDD=6,6
10/12 22:33:42 yS1 ZyXEL 2864: OK
10/12 22:33:42 yS1 voice command: 'AT+VSD=12,70' -> 'OK'
10/12 22:33:42 yS1 vgetty: AT+VSD=12,70
10/12 22:33:42 yS1 ZyXEL 2864: AT+VSD=12,70
10/12 22:33:42 yS1 ZyXEL 2864: OK
10/12 22:33:42 yS1 voice command: 'AT+VGT=128' -> 'OK'
10/12 22:33:42 yS1 vgetty: AT+VGT=128
10/12 22:33:42 yS1 ZyXEL 2864: AT+VGT=128
10/12 22:33:42 yS1 ZyXEL 2864: OK
10/12 22:33:42 yS1 voice command: 'AT+VGR=128' -> 'OK'
10/12 22:33:42 yS1 vgetty: AT+VGR=128
10/12 22:33:42 yS1 ZyXEL 2864: AT+VGR=128
10/12 22:33:42 yS1 ZyXEL 2864: OK
10/12 22:33:42 yS1 waiting for line to clear (VTIME), read:
10/12 22:33:43 yS1 removing lock file
10/12 22:33:43 yS1 waiting...
--
-------- "And there came a writing to him from Elijah" [2Ch 21:12] --------
Robert Jay Brown III rj@eli.elilabs.com http://www.elilabs.com 1 847 705-0424
Elijah Laboratories Inc.; 37 South Greenwood Avenue; Palatine, IL 60067-6328
----- M o d e l i n g t h e M e t h o d s o f t h e M i n d ------
.