summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTzafrir Cohen <tzafrir.cohen@xorcom.com>2009-08-16 17:27:28 +0000
committerTzafrir Cohen <tzafrir.cohen@xorcom.com>2009-08-16 17:27:28 +0000
commit724692a71c5d7710ce24c60e9cc3c8d9620ba159 (patch)
tree67fa1cf2b15fbfef78a7121e7b8773b914589613
parente61c11676580aaa0ae0863ed472ba173ac47ff07 (diff)
dahdi-perl: Add basic T1-CAS support for dahdi_genconf
- Support added in generators of system.conf and of chan_dahdi.conf . - Some strange asumptions about being FXS/FXO depending on being timing provider/supplier. - New gen_cas() method for Chandahdi and System. - Now gen_digital() is a bit cleaner. - Call gen_cas(), gen_openr2(), gen_digital() according to the 'pri_connection_type' config (CAS, R2, PRI/BRI). xpp rev: 7307 git-svn-id: http://svn.asterisk.org/svn/dahdi/tools/trunk@7019 a0bf4364-ded3-4de4-8d8a-66a801d63aff
-rw-r--r--xpp/perl_modules/Dahdi/Config/Gen/Chandahdi.pm28
-rw-r--r--xpp/perl_modules/Dahdi/Config/Gen/System.pm68
2 files changed, 93 insertions, 3 deletions
diff --git a/xpp/perl_modules/Dahdi/Config/Gen/Chandahdi.pm b/xpp/perl_modules/Dahdi/Config/Gen/Chandahdi.pm
index f636340..caa7607 100644
--- a/xpp/perl_modules/Dahdi/Config/Gen/Chandahdi.pm
+++ b/xpp/perl_modules/Dahdi/Config/Gen/Chandahdi.pm
@@ -80,6 +80,31 @@ EOF
reset_chandahdi_values(@to_reset);
}
+sub gen_cas($$$) {
+ my $self = shift || die;
+ my $gconfig = shift || die;
+ my $span = shift || die;
+ my $num = $span->num() || die;
+ my $termtype = $span->termtype() || die "$0: Span #$num -- unkown termtype [NT/TE]\n";
+ my $type = $span->type;
+ my $group = $gconfig->{'group'}{"$type"};
+ die "$0: missing default group (termtype=$termtype)\n" unless defined($group);
+ my $context = $gconfig->{'context'}{"$type"};
+ die "$0: missing default context\n" unless $context;
+ # Fake type for signalling
+ my $faketype = ($termtype eq 'TE') ? 'FXO' : 'FXS';
+ my $sig = $gconfig->{'chan_dahdi_signalling'}{$faketype};
+ my @to_reset = qw/context group/;
+ my $chans = Dahdi::Config::Gen::chan_range($span->chans());
+ $group .= "," . (10 + $num); # Invent unique group per span
+ printf "group=$group\n";
+ printf "context=$context\n";
+ printf "switchtype = %s\n", $span->switchtype;
+ printf "signalling = %s\n", $sig;
+ printf "channel => %s\n", $chans;
+ reset_chandahdi_values(@to_reset);
+}
+
sub gen_digital($$$) {
my $self = shift || die;
my $gconfig = shift || die;
@@ -134,6 +159,7 @@ sub gen_channel($$) {
return if $type eq 'EMPTY';
die "missing default_chan_dahdi_signalling for chan #$num type $type" unless $sig;
+ die "missing context for chan #$num type $type" unless $context;
$callerid = ($type eq 'FXO')
? 'asreceived'
: sprintf "\"Channel %d\" <%04d>", $num, $exten;
@@ -199,6 +225,8 @@ HEAD
if($span->is_pri) {
if($gconfig->{'pri_connection_type'} eq 'R2') {
$self->gen_openr2($gconfig, $span);
+ } elsif($gconfig->{'pri_connection_type'} eq 'CAS') {
+ $self->gen_cas($gconfig, $span);
} else {
$self->gen_digital($gconfig, $span);
}
diff --git a/xpp/perl_modules/Dahdi/Config/Gen/System.pm b/xpp/perl_modules/Dahdi/Config/Gen/System.pm
index 3f9217b..c408298 100644
--- a/xpp/perl_modules/Dahdi/Config/Gen/System.pm
+++ b/xpp/perl_modules/Dahdi/Config/Gen/System.pm
@@ -28,7 +28,61 @@ sub print_echo_can($$) {
print "echocanceller=$echo_can,$chans\n";
}
-sub gen_digital($$) {
+sub gen_cas($$) {
+ my $self = shift || die;
+ my $gconfig = shift || die;
+ my $span = shift || die;
+ my $num = $span->num() || die;
+ my $pri_connection_type = $gconfig->{pri_connection_type} || die;
+ die "Span #$num is analog" unless $span->is_digital();
+ die "Span #$num is not CAS" unless $span->is_pri && $gconfig->{pri_connection_type} eq 'CAS';
+ my $termtype = $span->termtype() || die "$0: Span #$num -- unkown termtype [NT/TE]\n";
+ my $timing;
+ my $lbo = 0;
+ my $framing = $span->framing() || die "$0: No framing information for span #$num\n";
+ my $coding = $span->coding() || die "$0: No coding information for span #$num\n";
+ my $span_crc4 = $span->crc4();
+ $span_crc4 = (defined $span_crc4) ? ",$span_crc4" : '';
+ my $span_yellow = $span->yellow();
+ $span_yellow = (defined $span_yellow) ? ",$span_yellow" : '';
+ $timing = ($termtype eq 'NT') ? 0 : $bri_te_last_timing++;
+ printf "span=%d,%d,%d,%s,%s%s%s\n",
+ $num,
+ $timing,
+ $lbo,
+ $framing,
+ $coding,
+ $span_crc4,
+ $span_yellow;
+ printf "# termtype: %s\n", lc($termtype);
+ my $dchan_type;
+ my $chan_range;
+ if($span->is_pri()) {
+ if ($gconfig->{'pri_connection_type'} eq 'PRI') {
+ $chan_range = Dahdi::Config::Gen::bchan_range($span);
+ printf "bchan=%s\n", $chan_range;
+ my $dchan = $span->dchan();
+ printf "dchan=%d\n", $dchan->num();
+ } elsif ($gconfig->{'pri_connection_type'} eq 'R2' ) {
+ my $idle_bits = $gconfig->{'r2_idle_bits'};
+ $chan_range = Dahdi::Config::Gen::bchan_range($span);
+ printf "cas=%s:$idle_bits\n", $chan_range;
+ printf "dchan=%d\n", $span->dchan()->num();
+ } elsif ($gconfig->{'pri_connection_type'} eq 'CAS' ) {
+ my $type = ($termtype eq 'TE') ? 'FXO' : 'FXS';
+ my $sig = $gconfig->{'dahdi_signalling'}{$type};
+ die "unknown default dahdi signalling for chan $num type $type" unless defined $sig;
+ $chan_range = Dahdi::Config::Gen::chan_range($span->chans());
+ printf "%s=%s\n", $sig, $chan_range;
+ }
+ } else {
+ die "Digital span $num is not PRI";
+ }
+ print_echo_can($gconfig, $chan_range);
+}
+
+sub gen_digital($$$) {
+ my $self = shift || die;
my $gconfig = shift || die;
my $span = shift || die;
my $num = $span->num() || die;
@@ -145,8 +199,16 @@ sub generate($$$) {
HEAD
foreach my $span (@spans) {
printf "# Span %d: %s %s\n", $span->num, $span->name, $span->description;
- if($span->is_digital()) {
- gen_digital($gconfig, $span);
+ if($span->is_digital) {
+ if($span->is_pri) {
+ if($gconfig->{'pri_connection_type'} eq 'CAS') {
+ $self->gen_cas($gconfig, $span);
+ } else {
+ $self->gen_digital($gconfig, $span);
+ }
+ } elsif($span->is_bri) {
+ $self->gen_digital($gconfig, $span);
+ }
} else {
foreach my $chan ($span->chans()) {
if(1 || !defined $chan->type) {