Revision
16155
Author
gmaruzz
Date
2010-01-05 12:22:58 -0600 (Tue, 05 Jan 2010)

Log Message

gsmopen: no_sound per interface config variable (when you are just interested to send/receive SMSs (eg: if no sound device is available). continue to implement workaround for no CNMI (unsolicited message for incoming SMS) and no PDU mode. YOU DON'T WANT THIS ONE :-)

Modified Paths

Diff

Modified: freeswitch/branches/gmaruzz/mod_gsmopen/gsmopen.h (16154 => 16155)


--- freeswitch/branches/gmaruzz/mod_gsmopen/gsmopen.h	2010-01-05 15:55:24 UTC (rev 16154)
+++ freeswitch/branches/gmaruzz/mod_gsmopen/gsmopen.h	2010-01-05 18:22:58 UTC (rev 16155)
@@ -445,6 +445,8 @@
 	teletone_dtmf_detect_state_t dtmf_detect;
 	switch_time_t old_dtmf_timestamp;
 
+	int no_sound;
+
 };
 
 typedef struct private_object private_t;

Modified: freeswitch/branches/gmaruzz/mod_gsmopen/gsmopen_protocol.cpp (16154 => 16155)


--- freeswitch/branches/gmaruzz/mod_gsmopen/gsmopen_protocol.cpp	2010-01-05 15:55:24 UTC (rev 16154)
+++ freeswitch/branches/gmaruzz/mod_gsmopen/gsmopen_protocol.cpp	2010-01-05 18:22:58 UTC (rev 16155)
@@ -2725,6 +2725,9 @@
 	snd_pcm_sframes_t delayp1;
 	snd_pcm_sframes_t delayp2;
 
+	if(tech_pvt->no_sound==1){
+		return res;
+	}
 	//ERRORA("data=%p, datalen=%d\n", GSMOPEN_P_LOG, (void *)data, datalen);
 	/* We have to digest the frame in 160-byte portions */
 	if (datalen > sizeof(sizbuf) - sizpos) {
@@ -2940,6 +2943,9 @@
 
 
 
+	if(tech_pvt->no_sound==1){
+		return r;
+	}
 
 	left = datalen;
 

Modified: freeswitch/branches/gmaruzz/mod_gsmopen/mod_gsmopen.cpp (16154 => 16155)


--- freeswitch/branches/gmaruzz/mod_gsmopen/mod_gsmopen.cpp	2010-01-05 15:55:24 UTC (rev 16154)
+++ freeswitch/branches/gmaruzz/mod_gsmopen/mod_gsmopen.cpp	2010-01-05 18:22:58 UTC (rev 16155)
@@ -263,10 +263,12 @@
 	//teletone_dtmf_detect_init(&tech_pvt->dtmf_detect, tech_pvt->read_codec.implementation->actual_samples_per_second);
 	teletone_dtmf_detect_init(&tech_pvt->dtmf_detect, 8000);
 
-	if (alsa_init(tech_pvt)) {
-		ERRORA("alsa_init failed\n", GSMOPEN_P_LOG);
-		return SWITCH_STATUS_FALSE;
+	if(tech_pvt->no_sound==0){
+		if (alsa_init(tech_pvt)) {
+			ERRORA("alsa_init failed\n", GSMOPEN_P_LOG);
+			return SWITCH_STATUS_FALSE;
 
+		}
 	}
 	if (switch_core_timer_init(&tech_pvt->timer_read, "soft", 20, tech_pvt->read_codec.implementation->samples_per_packet, gsmopen_module_pool) !=
 		SWITCH_STATUS_SUCCESS) {
@@ -495,7 +497,9 @@
 		switch_core_timer_destroy(&tech_pvt->timer_read);
 		switch_core_timer_destroy(&tech_pvt->timer_write);
 
+	if(tech_pvt->no_sound==0){
 		alsa_shutdown(tech_pvt);
+	}
 
 		*tech_pvt->session_uuid_str = '\0';
 		tech_pvt->interface_state = GSMOPEN_STATE_IDLE;
@@ -717,7 +721,9 @@
 	}
 
 	if (samples != 160) {
-		ERRORA("samples=%d\n", GSMOPEN_P_LOG, samples);
+		if(tech_pvt->no_sound==0){
+			ERRORA("samples=%d\n", GSMOPEN_P_LOG, samples);
+		}
 		goto cng;
 	}
 //DEBUGA_GSMOPEN("samples=%d tech_pvt->read_frame.timestamp=%d\n", GSMOPEN_P_LOG, samples, tech_pvt->read_frame.timestamp);
@@ -1231,6 +1237,7 @@
 			const char *alsa_capture_is_mono = "1";
 			const char *capture_boost = "5";
 			const char *playback_boost = "10";
+			const char *no_sound = "0";
 
 			uint32_t interface_id = 0;
 			uint32_t controldevice_speed = B115200;	//FIXME TODO
@@ -1399,10 +1406,11 @@
 					capture_boost = val;
 				} else if (!strcasecmp(var, "playback_boost")) {
 					playback_boost = val;
+				} else if (!strcasecmp(var, "no_sound")) {
+					no_sound = val;
+				}
 
 
-				}
-
 			}
 
 			/* BEGIN: Changes here */
@@ -1478,6 +1486,10 @@
 				ERRORA("interface param 'playback_boost' MUST be a number, now playback_boost='%s'\n", GSMOPEN_P_LOG, playback_boost);
 				continue;
 			}
+			if (!switch_is_number(no_sound)) {
+				ERRORA("interface param 'no_sound' MUST be a number, now no_sound='%s'\n", GSMOPEN_P_LOG, no_sound);
+				continue;
+			}
 
 
 			if (interface_id && interface_id < GSMOPEN_MAX_INTERFACES) {
@@ -1567,6 +1579,7 @@
 				globals.GSMOPEN_INTERFACES[interface_id].alsa_capture_is_mono = atoi(alsa_capture_is_mono);
 				globals.GSMOPEN_INTERFACES[interface_id].capture_boost = atoi(capture_boost);
 				globals.GSMOPEN_INTERFACES[interface_id].playback_boost = atoi(playback_boost);
+				globals.GSMOPEN_INTERFACES[interface_id].no_sound = atoi(no_sound);
 
 
 
@@ -1608,16 +1621,18 @@
 					}
 				}
 
-				if (alsa_init(&globals.GSMOPEN_INTERFACES[interface_id])) {
-					ERRORA("alsa_init failed\n", GSMOPEN_P_LOG);
-					return SWITCH_STATUS_FALSE;
+				if(globals.GSMOPEN_INTERFACES[interface_id].no_sound==0){
+					if (alsa_init(&globals.GSMOPEN_INTERFACES[interface_id])) {
+						ERRORA("alsa_init failed\n", GSMOPEN_P_LOG);
+						return SWITCH_STATUS_FALSE;
 
-				}
+					}
 
-				if (alsa_shutdown(&globals.GSMOPEN_INTERFACES[interface_id])) {
-					ERRORA("alsa_shutdown failed\n", GSMOPEN_P_LOG);
-					return SWITCH_STATUS_FALSE;
+					if (alsa_shutdown(&globals.GSMOPEN_INTERFACES[interface_id])) {
+						ERRORA("alsa_shutdown failed\n", GSMOPEN_P_LOG);
+						return SWITCH_STATUS_FALSE;
 
+					}
 				}
 				//gsmopen_store_boost((char *)"5", &globals.GSMOPEN_INTERFACES[interface_id].capture_boost);    //FIXME
 				//gsmopen_store_boost((char *)"10", &globals.GSMOPEN_INTERFACES[interface_id].playback_boost);  //FIXME