[zaptel-commits] kpfleming: branch mogorman/zaptel-1.2-transcoder r2035 - /team/mogorman/zapte...

zaptel-commits at lists.digium.com zaptel-commits at lists.digium.com
Tue Jan 30 18:16:41 MST 2007


Author: kpfleming
Date: Tue Jan 30 19:16:40 2007
New Revision: 2035

URL: http://svn.digium.com/view/zaptel?view=rev&rev=2035
Log:
improve 'mode' parameter parsing

Modified:
    team/mogorman/zaptel-1.2-transcoder/wctc4xxp/base.c
    team/mogorman/zaptel-1.2-transcoder/wctc4xxp/codec_test.c

Modified: team/mogorman/zaptel-1.2-transcoder/wctc4xxp/base.c
URL: http://svn.digium.com/view/zaptel/team/mogorman/zaptel-1.2-transcoder/wctc4xxp/base.c?view=diff&rev=2035&r1=2034&r2=2035
==============================================================================
--- team/mogorman/zaptel-1.2-transcoder/wctc4xxp/base.c (original)
+++ team/mogorman/zaptel-1.2-transcoder/wctc4xxp/base.c Tue Jan 30 19:16:40 2007
@@ -2,8 +2,9 @@
  * Wildcard TC400B Interface Driver for Zapata Telephony interface
  *
  * Written by John Sloan <jsloan at digium.com>
+ *        and Kevin P. Fleming <kpfleming at digium.com>
  *
- * Copyright (C) 2006, Digium, Inc.
+ * Copyright (C) 2006-2007, Digium, Inc.
  *
  * All rights reserved.
  *
@@ -307,7 +308,8 @@
 };
 
 static int debug = 0;
-static char *mode;
+static char *mode[2] = { "g729", "g723" };
+static int mode_count = 2;
 u32 debug_packets = 0;
 u32 debug_cmd_packets = 0;
 
@@ -1338,7 +1340,7 @@
 	struct wcdte_desc *d = (struct wcdte_desc *) ent->driver_data;
 	int x;
 	u8 g729_numchannels, g723_numchannels, min_numchannels, firmware_ver;
-	unsigned int complexfmts;
+	unsigned int complexfmts = 0;
 	struct firmware embedded_firmware;
 	const struct firmware *firmware = &embedded_firmware;
 	struct dte_state *encoders;
@@ -1403,7 +1405,7 @@
 
 #ifdef HOTPLUG_FIRMWARE
 	if ((request_firmware(&firmware, tc400m_firmware, &wc->dev->dev) != 0) || !firmware) {
-		module_printk("firmware %s not available from userspace\n", tc400m_firmware);
+		module_printk("Firmware %s not available from userspace\n", tc400m_firmware);
 		return -1;
 	}
 #else
@@ -1423,27 +1425,29 @@
 	
 	min_numchannels = min(g723_numchannels, g729_numchannels);
 	
-	/* Setup Encoders and Decoders */
-	/* TODO: parse this value properly */
-	
-	if (!mode || strlen(mode) < 4) {
-		sprintf(wc->complexname, "G.729A / G.723.1 5.3Kbps");
-		complexfmts = ZT_FORMAT_G729A | ZT_FORMAT_G723_1;
-		wc->numchannels = min_numchannels;
-	} else if (mode[3] == '9') {	/* "g729" */
-		sprintf(wc->complexname, "G.729A");
-		complexfmts = ZT_FORMAT_G729A;
-		wc->numchannels = g729_numchannels;
-	} else if (mode[3] == '3') {	/* "g723" */
-		sprintf(wc->complexname, "G.723.1 5.3Kbps");
-		complexfmts = ZT_FORMAT_G723_1;
-		wc->numchannels = g723_numchannels;
-	} else {
-		sprintf(wc->complexname, "G.729A / G.723.1 5.3Kbps");
-		complexfmts = ZT_FORMAT_G729A | ZT_FORMAT_G723_1;
-		wc->numchannels = min_numchannels;
-	}
-	
+	for (x = 0; x < mode_count; x++) {
+		if (!strcmp(mode[x], "g729") ||
+		    !strcmp(mode[x], "G729")) {
+			strcat(wc->complexname, "G.729A /");
+			complexfmts |= ZT_FORMAT_G729A;
+			wc->numchannels = min(wc->numchannels, g729_numchannels);
+		} else if (!strcmp(mode[x], "g723.1") ||
+			   !strcmp(mode[x], "G723.1")) {
+			strcat(wc->complexname, "G.723.1 5.3Kbps /");
+			complexfmts |= ZT_FORMAT_G723_1;
+			wc->numchannels = min(wc->numchannels, g723_numchannels);
+		} else {
+			module_printk("Invalid transcoder format specified: %s\n", mode[x]);
+		}
+	}
+
+	if (!complexfmts) {
+		module_printk("No valid transcoder formats specified; module will not be enabled.\n");
+		return -1;
+	}
+
+	wc->complexname[strlen(wc->complexname) - 2] = '\0';
+
 	wc->uencode = zt_transcoder_alloc(wc->numchannels);
 	wc->udecode = zt_transcoder_alloc(wc->numchannels);
 	encoders = kmalloc(sizeof(*encoders) * wc->numchannels, GFP_KERNEL);
@@ -1654,10 +1658,10 @@
 	pci_unregister_driver(&driver);
 }
 
-module_param(debug, int, 0600);
-module_param(mode, charp, 0600);
-module_param(debug_packets, uint, 0600);
-module_param(debug_cmd_packets, uint, 0600);
+module_param(debug, int, S_IRUGO | S_IWUSR);
+module_param_array(mode, charp, &mode_count, S_IRUGO | S_IWUSR);
+module_param(debug_packets, uint, S_IRUGO | S_IWUSR);
+module_param(debug_cmd_packets, uint, S_IRUGO | S_IWUSR);
 MODULE_DESCRIPTION("Wildcard TC400P+TC400M Transcoder");
 MODULE_AUTHOR("John Sloan <jsloan at digium.com>");
 MODULE_LICENSE("GPL");

Modified: team/mogorman/zaptel-1.2-transcoder/wctc4xxp/codec_test.c
URL: http://svn.digium.com/view/zaptel/team/mogorman/zaptel-1.2-transcoder/wctc4xxp/codec_test.c?view=diff&rev=2035&r1=2034&r2=2035
==============================================================================
--- team/mogorman/zaptel-1.2-transcoder/wctc4xxp/codec_test.c (original)
+++ team/mogorman/zaptel-1.2-transcoder/wctc4xxp/codec_test.c Tue Jan 30 19:16:40 2007
@@ -1,9 +1,9 @@
 /*
  * Wilcard TC400B Digium Transcoder Engine Interface Driver for Zapata Telephony interface test tool.
  *
- * Written by Matt O'Gorman <mogormandigium.com>
- *
- * Copyright (C) 2006, Digium, Inc.
+ * Written by Matt O'Gorman <mogorman at digium.com>
+ *
+ * Copyright (C) 2006-2007, Digium, Inc.
  *
  * All rights reserved.
  *



More information about the zaptel-commits mailing list