[svn-commits] rmudgett: branch 1.8 r400907 - /branches/1.8/channels/chan_dahdi.c

SVN commits to the Digium repositories svn-commits at lists.digium.com
Mon Oct 14 16:40:30 CDT 2013


Author: rmudgett
Date: Mon Oct 14 16:40:28 2013
New Revision: 400907

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=400907
Log:
chan_dahdi: Reflect the set software gain in the CLI "dahdi show channel" output.

* Remember the swgain setting from CLI "dahdi set swgain" command so the
CLI "dahdi show channel" output will reflect the current setting.

* Updated CLI "dahdi set hwgain" and "dahdi set swgain" documentation.

(issue ASTERISK-22429)
Reported by: Jaco Kroon
Patches:
      jira_asterisk_22429_v1.8_v2.patch (license #5621) patch uploaded by rmudgett

Modified:
    branches/1.8/channels/chan_dahdi.c

Modified: branches/1.8/channels/chan_dahdi.c
URL: http://svnview.digium.com/svn/asterisk/branches/1.8/channels/chan_dahdi.c?view=diff&rev=400907&r1=400906&r2=400907
==============================================================================
--- branches/1.8/channels/chan_dahdi.c (original)
+++ branches/1.8/channels/chan_dahdi.c Mon Oct 14 16:40:28 2013
@@ -718,9 +718,9 @@
 	struct dahdi_pvt *oprpeer;				/*!< "Operator Services" peer tech_pvt ptr */
 	/*! \brief Amount of gain to increase during caller id */
 	float cid_rxgain;
-	/*! \brief Rx gain set by chan_dahdi.conf */
+	/*! \brief Software Rx gain set by chan_dahdi.conf */
 	float rxgain;
-	/*! \brief Tx gain set by chan_dahdi.conf */
+	/*! \brief Software Tx gain set by chan_dahdi.conf */
 	float txgain;
 
 	float txdrc; /*!< Dynamic Range Compression factor. a number between 1 and 6ish */
@@ -15690,12 +15690,87 @@
 
 	switch (cmd) {
 	case CLI_INIT:
-		e->command = "dahdi set hwgain";
+		e->command = "dahdi set hwgain {rx|tx}";
 		e->usage =
 			"Usage: dahdi set hwgain <rx|tx> <chan#> <gain>\n"
-			"	Sets the hardware gain on a a given channel, overriding the\n"
-			"   value provided at module loadtime, whether the channel is in\n"
-			"   use or not.  Changes take effect immediately.\n"
+			"   Sets the hardware gain on a given channel.  Changes take effect\n"
+			"   immediately whether the channel is in use or not.\n"
+			"\n"
+			"   <rx|tx> which direction do you want to change (relative to our module)\n"
+			"   <chan num> is the channel number relative to the device\n"
+			"   <gain> is the gain in dB (e.g. -3.5 for -3.5dB)\n"
+			"\n"
+			"   Please note:\n"
+			"   * This is currently the only way to set hwgain by the channel driver.\n"
+			"   * hwgain is only supportable by hardware with analog ports because\n"
+			"     hwgain works on the analog side of an analog-digital conversion.\n";
+		return NULL;
+	case CLI_GENERATE:
+		return NULL;
+	}
+
+	if (a->argc != 6)
+		return CLI_SHOWUSAGE;
+
+	if (!strcasecmp("rx", a->argv[3]))
+		tx = 0; /* rx */
+	else if (!strcasecmp("tx", a->argv[3]))
+		tx = 1; /* tx */
+	else
+		return CLI_SHOWUSAGE;
+
+	channel = atoi(a->argv[4]);
+	gain = atof(a->argv[5])*10.0;
+
+	ast_mutex_lock(&iflock);
+
+	for (tmp = iflist; tmp; tmp = tmp->next) {
+
+		if (tmp->channel != channel)
+			continue;
+
+		if (tmp->subs[SUB_REAL].dfd == -1)
+			break;
+
+		hwgain.newgain = gain;
+		hwgain.tx = tx;
+		if (ioctl(tmp->subs[SUB_REAL].dfd, DAHDI_SET_HWGAIN, &hwgain) < 0) {
+			ast_cli(a->fd, "Unable to set the hardware gain for channel %d: %s\n", channel, strerror(errno));
+			ast_mutex_unlock(&iflock);
+			return CLI_FAILURE;
+		}
+		ast_cli(a->fd, "hardware %s gain set to %d (%.1f dB) on channel %d\n",
+			tx ? "tx" : "rx", gain, (float)gain/10.0, channel);
+		break;
+	}
+
+	ast_mutex_unlock(&iflock);
+
+	if (tmp)
+		return CLI_SUCCESS;
+
+	ast_cli(a->fd, "Unable to find given channel %d\n", channel);
+	return CLI_FAILURE;
+
+}
+
+static char *dahdi_set_swgain(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
+{
+	int channel;
+	float gain;
+	int tx;
+	int res;
+	struct dahdi_pvt *tmp = NULL;
+
+	switch (cmd) {
+	case CLI_INIT:
+		e->command = "dahdi set swgain {rx|tx}";
+		e->usage =
+			"Usage: dahdi set swgain <rx|tx> <chan#> <gain>\n"
+			"   Sets the software gain on a given channel and overrides the\n"
+			"   value provided at module loadtime.  Changes take effect\n"
+			"   immediately whether the channel is in use or not.\n"
+			"\n"
 			"   <rx|tx> which direction do you want to change (relative to our module)\n"
 			"   <chan num> is the channel number relative to the device\n"
 			"   <gain> is the gain in dB (e.g. -3.5 for -3.5dB)\n";
@@ -15715,75 +15790,6 @@
 		return CLI_SHOWUSAGE;
 
 	channel = atoi(a->argv[4]);
-	gain = atof(a->argv[5])*10.0;
-
-	ast_mutex_lock(&iflock);
-
-	for (tmp = iflist; tmp; tmp = tmp->next) {
-
-		if (tmp->channel != channel)
-			continue;
-
-		if (tmp->subs[SUB_REAL].dfd == -1)
-			break;
-
-		hwgain.newgain = gain;
-		hwgain.tx = tx;
-		if (ioctl(tmp->subs[SUB_REAL].dfd, DAHDI_SET_HWGAIN, &hwgain) < 0) {
-			ast_cli(a->fd, "Unable to set the hardware gain for channel %d: %s\n", channel, strerror(errno));
-			ast_mutex_unlock(&iflock);
-			return CLI_FAILURE;
-		}
-		ast_cli(a->fd, "hardware %s gain set to %d (%.1f dB) on channel %d\n",
-			tx ? "tx" : "rx", gain, (float)gain/10.0, channel);
-		break;
-	}
-
-	ast_mutex_unlock(&iflock);
-
-	if (tmp)
-		return CLI_SUCCESS;
-
-	ast_cli(a->fd, "Unable to find given channel %d\n", channel);
-	return CLI_FAILURE;
-
-}
-
-static char *dahdi_set_swgain(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
-{
-	int channel;
-	float gain;
-	int tx;
-	int res;
-	struct dahdi_pvt *tmp = NULL;
-
-	switch (cmd) {
-	case CLI_INIT:
-		e->command = "dahdi set swgain";
-		e->usage =
-			"Usage: dahdi set swgain <rx|tx> <chan#> <gain>\n"
-			"	Sets the software gain on a a given channel, overriding the\n"
-			"   value provided at module loadtime, whether the channel is in\n"
-			"   use or not.  Changes take effect immediately.\n"
-			"   <rx|tx> which direction do you want to change (relative to our module)\n"
-			"   <chan num> is the channel number relative to the device\n"
-			"   <gain> is the gain in dB (e.g. -3.5 for -3.5dB)\n";
-		return NULL;
-	case CLI_GENERATE:
-		return NULL;
-	}
-
-	if (a->argc != 6)
-		return CLI_SHOWUSAGE;
-
-	if (!strcasecmp("rx", a->argv[3]))
-		tx = 0; /* rx */
-	else if (!strcasecmp("tx", a->argv[3]))
-		tx = 1; /* tx */
-	else
-		return CLI_SHOWUSAGE;
-
-	channel = atoi(a->argv[4]);
 	gain = atof(a->argv[5]);
 
 	ast_mutex_lock(&iflock);
@@ -15808,6 +15814,12 @@
 
 		ast_cli(a->fd, "software %s gain set to %.1f on channel %d\n",
 			tx ? "tx" : "rx", gain, channel);
+
+		if (tx) {
+			tmp->txgain = gain;
+		} else {
+			tmp->rxgain = gain;
+		}
 		break;
 	}
 	ast_mutex_unlock(&iflock);




More information about the svn-commits mailing list