All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3] ifx: Adding modem selftest for Infineon modem
@ 2010-12-23 22:47 Robertino Benis
  2011-01-05 20:13 ` Robertino Benis
  2011-01-05 21:47 ` Marcel Holtmann
  0 siblings, 2 replies; 6+ messages in thread
From: Robertino Benis @ 2010-12-23 22:47 UTC (permalink / raw)
  To: ofono

[-- Attachment #1: Type: text/plain, Size: 3710 bytes --]

Hi all,

This is another attempt to submit a patch that triggers Infineon
modem selftest during ofono boot. Patch addresses issues raised
by Marcel from the previous submissions.

Thank you,
-- r.

---
 plugins/ifx.c |   76 +++++++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 66 insertions(+), 10 deletions(-)

diff --git a/plugins/ifx.c b/plugins/ifx.c
index c0a69c2..e0eb982 100644
--- a/plugins/ifx.c
+++ b/plugins/ifx.c
@@ -71,6 +71,8 @@
 #define GPRS3_DLC   4
 #define AUX_DLC     5
 
+#define IFX_SELF_TESTS_TIMEOUT	10
+
 static char *dlc_prefixes[NUM_DLC] = { "Voice: ", "Net: ", "GPRS1: ",
 					"GPRS2: ", "GPRS3: ", "Aux: " };
 
@@ -81,6 +83,16 @@ static const char *dlc_nodes[NUM_DLC] = { "/dev/ttyGSM1", "/dev/ttyGSM2",
 static const char *none_prefix[] = { NULL };
 static const char *xdrv_prefix[] = { "+XDRV:", NULL };
 
+static struct {
+	char *test_desc;
+	char *at_cmd;
+} const mst[] = {
+	{ "AT Command Test", "ATE0 +CMEE=1" }, /* set echo & error reporting */
+	{ "RTC GTI Test", "at(a)rtc:rtc_gti_test_verify_32khz()" },
+	{ "Device Version Test", "at(a)vers:device_version_id()" },
+	{ NULL, NULL }
+};
+
 struct ifx_data {
 	GIOChannel *device;
 	GAtMux *mux;
@@ -99,6 +111,7 @@ struct ifx_data {
 	int audio_loopback;
 	struct ofono_sim *sim;
 	gboolean have_sim;
+	int self_test_idx;
 };
 
 static void ifx_debug(const char *str, void *user_data)
@@ -545,6 +558,52 @@ static gboolean mux_timeout_cb(gpointer user_data)
 	return FALSE;
 }
 
+static void ifx_self_test_cb(gboolean ok, GAtResult *result,
+				gpointer user_data)
+{
+	struct ofono_modem *modem = user_data;
+	struct ifx_data *data = ofono_modem_get_data(modem);
+
+	if (data->mux_init_timeout > 0) {
+		g_source_remove(data->mux_init_timeout);
+		data->mux_init_timeout = 0;
+	}
+
+	if (!ok) {
+		ofono_error("Modem %s: FAIL",
+			mst[data->self_test_idx].test_desc);
+		g_at_chat_unref(data->dlcs[AUX_DLC]);
+		data->dlcs[AUX_DLC] = NULL;
+
+		g_io_channel_unref(data->device);
+		data->device = NULL;
+
+		ofono_modem_set_powered(modem, FALSE);
+
+		return;
+	}
+
+	data->self_test_idx++;
+
+	if (mst[data->self_test_idx].at_cmd != NULL) {
+		g_at_chat_send(data->dlcs[AUX_DLC],
+			mst[data->self_test_idx].at_cmd,
+			NULL, ifx_self_test_cb, modem, NULL);
+
+		data->mux_init_timeout = g_timeout_add_seconds(
+			IFX_SELF_TESTS_TIMEOUT, mux_timeout_cb, modem);
+
+	} else {	/* Enable  MUX Channels */
+		data->frame_size = 1509;
+		g_at_chat_send(data->dlcs[AUX_DLC],
+				"AT+CMUX=0,0,,1509,10,3,30,,", NULL,
+				mux_setup_cb, modem, NULL);
+
+		data->mux_init_timeout = g_timeout_add_seconds(5,
+				mux_timeout_cb,	modem);
+	}
+}
+
 static int ifx_enable(struct ofono_modem *modem)
 {
 	struct ifx_data *data = ofono_modem_get_data(modem);
@@ -595,18 +654,15 @@ static int ifx_enable(struct ofono_modem *modem)
 	if (getenv("OFONO_AT_DEBUG"))
 		g_at_chat_set_debug(chat, ifx_debug, "Master: ");
 
-	g_at_chat_send(chat, "ATE0 +CMEE=1", NULL,
-					NULL, NULL, NULL);
-
-	data->frame_size = 1509;
-
-	g_at_chat_send(chat, "AT+CMUX=0,0,,1509,10,3,30,,", NULL,
-					mux_setup_cb, modem, NULL);
+	/* Execute Modem Self tests */
+	data->dlcs[AUX_DLC] = chat;
+	data->self_test_idx = 0;
 
-	data->mux_init_timeout = g_timeout_add_seconds(5, mux_timeout_cb,
-								modem);
+	g_at_chat_send(data->dlcs[AUX_DLC], mst[data->self_test_idx].at_cmd,
+		NULL, ifx_self_test_cb, modem, NULL);
 
-	data->dlcs[AUX_DLC] = chat;
+	data->mux_init_timeout = g_timeout_add_seconds(
+		IFX_SELF_TESTS_TIMEOUT, mux_timeout_cb,	modem);
 
 	return -EINPROGRESS;
 }
-- 
1.7.0.4


^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2011-01-12  6:27 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-12-23 22:47 [PATCH v3] ifx: Adding modem selftest for Infineon modem Robertino Benis
2011-01-05 20:13 ` Robertino Benis
2011-01-05 21:47 ` Marcel Holtmann
2011-01-06 22:18   ` Bastian, Waldo
2011-01-07  1:42     ` Robertino Benis
2011-01-12  6:27     ` Marcel Holtmann

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.