All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] cinterion: Add cinterion vendor support
@ 2015-04-30 19:08 Alex J Lennon
  2015-04-30 19:08 ` [PATCH 2/2] cinterion: Replace tc65 plugin with vendor generic cinterion plugin Alex J Lennon
  2015-05-01 14:02 ` [PATCH 1/2] cinterion: Add cinterion vendor support Denis Kenzior
  0 siblings, 2 replies; 6+ messages in thread
From: Alex J Lennon @ 2015-04-30 19:08 UTC (permalink / raw)
  To: ofono

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

Implement OFONO_VENDOR_CINTERION specific support to register
textual +CIEV indications for signal strength using vendor
specific AT^SIND command
---
 drivers/atmodem/network-registration.c | 64 ++++++++++++++++++++++++++++++++--
 drivers/atmodem/vendor.h               |  1 +
 2 files changed, 62 insertions(+), 3 deletions(-)

diff --git a/drivers/atmodem/network-registration.c b/drivers/atmodem/network-registration.c
index a438726..c3507cc 100644
--- a/drivers/atmodem/network-registration.c
+++ b/drivers/atmodem/network-registration.c
@@ -838,6 +838,39 @@ static void telit_ciev_notify(GAtResult *result, gpointer user_data)
 	ofono_netreg_strength_notify(netreg, strength);
 }
 
+static void cinterion_ciev_notify(GAtResult *result, gpointer user_data)
+{
+	struct ofono_netreg *netreg = user_data;
+	struct netreg_data *nd = ofono_netreg_get_data(netreg);
+	const char *signal_identifier = "rssi";
+	const char *ind_str;
+	int strength;
+	GAtResultIter iter;
+
+	g_at_result_iter_init(&iter, result);
+
+	if (!g_at_result_iter_next(&iter, "+CIEV:"))
+		return;
+
+	if (!g_at_result_iter_next_unquoted_string(&iter, &ind_str))
+		return;
+
+	if (!g_str_equal(signal_identifier, ind_str))
+		return;
+
+	if (!g_at_result_iter_next_number(&iter, &strength))
+		return;
+
+	DBG("rssi %d", strength);
+
+	if (strength == nd->signal_invalid)
+		strength = -1;
+	else
+		strength = (strength * 100) / (nd->signal_max - nd->signal_min);
+
+	ofono_netreg_strength_notify(netreg, strength);
+}
+
 static void ctzv_notify(GAtResult *result, gpointer user_data)
 {
 	struct ofono_netreg *netreg = user_data;
@@ -1494,13 +1527,17 @@ static void at_cmer_set_cb(gboolean ok, GAtResult *result, gpointer user_data)
 	}
 
 	/*
-	 * Telit uses strings instead of numbers to identify indicators
-	 * in a +CIEV URC.
-	 * Handle them in a separate function to keep the code clean.
+	 * Telit/Cinterion uses strings instead of numbers to identify
+	 * indicators in a +CIEV URC.
+	 * Handle them in separate functions to keep the code clean.
 	 */
 	if (nd->vendor == OFONO_VENDOR_TELIT)
 		g_at_chat_register(nd->chat, "+CIEV:",
 				telit_ciev_notify, FALSE, netreg, NULL);
+	else if (nd->vendor == OFONO_VENDOR_CINTERION)
+	{
+	  /* +CIEV handling has been registered in at_creg_set_cb() */
+	}
 	else
 		g_at_chat_register(nd->chat, "+CIEV:",
 				ciev_notify, FALSE, netreg, NULL);
@@ -1915,6 +1952,27 @@ static void at_creg_set_cb(gboolean ok, GAtResult *result, gpointer user_data)
 		g_at_chat_send(nd->chat, "AT*TLTS=1", none_prefix,
 						NULL, NULL, NULL);
 		break;
+	case OFONO_VENDOR_CINTERION:
+		/*
+		 * We can't set rssi bounds from Cinterion responses
+		 * so set them up to specified values here
+		 *
+		 * Cinterion rssi signal strength specified as:
+		 * 0      <= -112dBm
+		 * 1 - 4  signal strengh in 15 dB steps
+		 * 5      >= -51 dBm
+		 * 99     not known or undetectable
+		 */
+		nd->signal_min = 0;
+		nd->signal_max = 5;
+		nd->signal_invalid = 99;
+
+		/* Register for specific signal strength reports */
+		g_at_chat_send(nd->chat, "AT^SIND=\"rssi\",1", none_prefix,
+				NULL, NULL, NULL);
+		g_at_chat_register(nd->chat, "+CIEV:",
+				cinterion_ciev_notify, FALSE, netreg, NULL);
+		break;
 	case OFONO_VENDOR_NOKIA:
 	case OFONO_VENDOR_SAMSUNG:
 		/* Signal strength reporting via CIND is not supported */
diff --git a/drivers/atmodem/vendor.h b/drivers/atmodem/vendor.h
index c132e45..52071c8 100644
--- a/drivers/atmodem/vendor.h
+++ b/drivers/atmodem/vendor.h
@@ -45,4 +45,5 @@ enum ofono_vendor {
 	OFONO_VENDOR_ALCATEL,
 	OFONO_VENDOR_QUECTEL,
 	OFONO_VENDOR_UBLOX,
+	OFONO_VENDOR_CINTERION,
 };
-- 
1.9.1


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

* [PATCH 2/2] cinterion: Replace tc65 plugin with vendor generic cinterion plugin
  2015-04-30 19:08 [PATCH 1/2] cinterion: Add cinterion vendor support Alex J Lennon
@ 2015-04-30 19:08 ` Alex J Lennon
  2015-05-01 14:05   ` Denis Kenzior
  2015-05-01 14:02 ` [PATCH 1/2] cinterion: Add cinterion vendor support Denis Kenzior
  1 sibling, 1 reply; 6+ messages in thread
From: Alex J Lennon @ 2015-04-30 19:08 UTC (permalink / raw)
  To: ofono

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

On the basis that cinterion tx6x, ehsx, other devices will likely
have similar firmware requirements, implement a generic cinterion
plugin.

The udev implementation retains support for "tc65" device for
backwards compatibility, and adds support for  "ehs6" and generic
"cinterion" devices.
---
 Makefile.am         |   4 +-
 plugins/cinterion.c | 249 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 plugins/tc65.c      | 245 ---------------------------------------------------
 plugins/udev.c      |  11 ++-
 4 files changed, 259 insertions(+), 250 deletions(-)
 create mode 100644 plugins/cinterion.c
 delete mode 100644 plugins/tc65.c

diff --git a/Makefile.am b/Makefile.am
index 22249c4..113a2d5 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -390,8 +390,8 @@ builtin_sources += plugins/stemgr.c
 builtin_modules += caif
 builtin_sources += plugins/caif.c
 
-builtin_modules += tc65
-builtin_sources += plugins/tc65.c
+builtin_modules += cinterion
+builtin_sources += plugins/cinterion.c
 
 builtin_modules += nokia
 builtin_sources += plugins/nokia.c
diff --git a/plugins/cinterion.c b/plugins/cinterion.c
new file mode 100644
index 0000000..cda6ea7
--- /dev/null
+++ b/plugins/cinterion.c
@@ -0,0 +1,249 @@
+/*
+ *
+ *  oFono - Open Source Telephony
+ *
+ *  Copyright (C) 2008-2011  Intel Corporation. All rights reserved.
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License version 2 as
+ *  published by the Free Software Foundation.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <errno.h>
+#include <stdlib.h>
+
+#include <glib.h>
+#include <gatchat.h>
+#include <gattty.h>
+
+#define OFONO_API_SUBJECT_TO_CHANGE
+#include <ofono/plugin.h>
+#include <ofono/log.h>
+#include <ofono/modem.h>
+#include <ofono/call-barring.h>
+#include <ofono/call-forwarding.h>
+#include <ofono/call-meter.h>
+#include <ofono/call-settings.h>
+#include <ofono/devinfo.h>
+#include <ofono/message-waiting.h>
+#include <ofono/netreg.h>
+#include <ofono/phonebook.h>
+#include <ofono/sim.h>
+#include <ofono/sms.h>
+#include <ofono/ussd.h>
+#include <ofono/voicecall.h>
+
+#include <drivers/atmodem/atutil.h>
+
+#include <ofono/gprs.h>
+#include <ofono/gprs-context.h>
+
+#include <drivers/atmodem/vendor.h>
+
+static int cinterion_probe(struct ofono_modem *modem)
+{
+	return 0;
+}
+
+static void cinterion_remove(struct ofono_modem *modem)
+{
+}
+
+static void cinterion_debug(const char *str, void *user_data)
+{
+	const char *prefix = user_data;
+
+	ofono_info("%s%s", prefix, str);
+}
+
+static int cinterion_enable(struct ofono_modem *modem)
+{
+	GAtChat *chat;
+	GIOChannel *channel;
+	GAtSyntax *syntax;
+	GHashTable *options;
+	const char *device;
+
+	DBG("%p", modem);
+
+	options = g_hash_table_new(g_str_hash, g_str_equal);
+	if (options == NULL)
+		return -ENOMEM;
+
+	device = ofono_modem_get_string(modem, "Device");
+	if (device == NULL)
+		return -EINVAL;
+
+	g_hash_table_insert(options, "Baud", "115200");
+	g_hash_table_insert(options, "StopBits", "1");
+	g_hash_table_insert(options, "DataBits", "8");
+	g_hash_table_insert(options, "Parity", "none");
+	g_hash_table_insert(options, "XonXoff", "off");
+	g_hash_table_insert(options, "RtsCts", "on");
+	g_hash_table_insert(options, "Local", "on");
+	g_hash_table_insert(options, "Read", "on");
+
+	channel = g_at_tty_open(device, options);
+	g_hash_table_destroy(options);
+
+	if (channel == NULL)
+		return -EIO;
+
+	/*
+	 * (Cinterion plugin is based on TC65. Comment left in but may not be applicable)
+	 *
+	 * TC65 works almost as the 27.007 says. But for example after
+	 * AT+CRSM the modem replies with the data in the queried EF and
+	 * writes three pairs of <CR><LF> after the data and before OK.
+	 */
+	syntax = g_at_syntax_new_gsm_permissive();
+
+	chat = g_at_chat_new(channel, syntax);
+	g_at_syntax_unref(syntax);
+	g_io_channel_unref(channel);
+
+	if (chat == NULL)
+		return -ENOMEM;
+
+	if (getenv("OFONO_AT_DEBUG"))
+		g_at_chat_set_debug(chat, cinterion_debug, "");
+
+	ofono_modem_set_data(modem, chat);
+
+	return 0;
+}
+
+static int cinterion_disable(struct ofono_modem *modem)
+{
+	GAtChat *chat = ofono_modem_get_data(modem);
+
+	DBG("%p", modem);
+
+	ofono_modem_set_data(modem, NULL);
+
+	g_at_chat_send(chat, "AT+CFUN=7", NULL, NULL, NULL, NULL);
+
+	g_at_chat_unref(chat);
+
+	return 0;
+}
+
+static void set_online_cb(gboolean ok, GAtResult *result, gpointer user_data)
+{
+	struct cb_data *cbd = user_data;
+	ofono_modem_online_cb_t cb = cbd->cb;
+	struct ofono_error error;
+
+	decode_at_error(&error, g_at_result_final_response(result));
+
+	cb(&error, cbd->data);
+}
+
+static void cinterion_set_online(struct ofono_modem *modem, ofono_bool_t online,
+			ofono_modem_online_cb_t cb, void *user_data)
+{
+	GAtChat *chat = ofono_modem_get_data(modem);
+	struct cb_data *cbd = cb_data_new(cb, user_data);
+	char const *command = online ? "AT+CFUN=1" : "AT+CFUN=7";
+
+	DBG("modem %p %s", modem, online ? "online" : "offline");
+
+	if (g_at_chat_send(chat, command, NULL, set_online_cb, cbd, g_free))
+		return;
+
+	g_free(cbd);
+
+	CALLBACK_WITH_FAILURE(cb, cbd->data);
+}
+
+static void cinterion_pre_sim(struct ofono_modem *modem)
+{
+	GAtChat *chat = ofono_modem_get_data(modem);
+	struct ofono_sim *sim;
+
+	DBG("%p", modem);
+
+	ofono_devinfo_create(modem, 0, "atmodem", chat);
+	sim = ofono_sim_create(modem, 0, "atmodem", chat);
+	ofono_voicecall_create(modem, 0, "atmodem", chat);
+
+	if (sim)
+		ofono_sim_inserted_notify(sim, TRUE);
+}
+
+static void cinterion_post_sim(struct ofono_modem *modem)
+{
+	GAtChat *chat = ofono_modem_get_data(modem);
+
+	DBG("%p", modem);
+
+	ofono_phonebook_create(modem, 0, "atmodem", chat);
+
+	ofono_sms_create(modem, 0, "atmodem", chat);
+}
+
+static void cinterion_post_online(struct ofono_modem *modem)
+{
+	GAtChat *chat = ofono_modem_get_data(modem);
+	struct ofono_message_waiting *mw;
+	struct ofono_gprs *gprs;
+	struct ofono_gprs_context *gc;
+
+	DBG("%p", modem);
+
+	ofono_ussd_create(modem, 0, "atmodem", chat);
+	ofono_call_forwarding_create(modem, 0, "atmodem", chat);
+	ofono_call_settings_create(modem, 0, "atmodem", chat);
+	ofono_netreg_create(modem, OFONO_VENDOR_CINTERION, "atmodem", chat);
+	ofono_call_meter_create(modem, 0, "atmodem", chat);
+	ofono_call_barring_create(modem, 0, "atmodem", chat);
+
+	gprs = ofono_gprs_create(modem, 0, "atmodem", chat);
+	gc = ofono_gprs_context_create(modem, 0, "atmodem", chat);
+
+	if (gprs && gc)
+		ofono_gprs_add_context(gprs, gc);
+
+	mw = ofono_message_waiting_create(modem);
+	if (mw)
+		ofono_message_waiting_register(mw);
+}
+
+static struct ofono_modem_driver cinterion_driver = {
+	.name		= "cinterion",
+	.probe		= cinterion_probe,
+	.remove		= cinterion_remove,
+	.enable		= cinterion_enable,
+	.disable	= cinterion_disable,
+	.set_online	= cinterion_set_online,
+	.pre_sim	= cinterion_pre_sim,
+	.post_sim	= cinterion_post_sim,
+	.post_online	= cinterion_post_online,
+};
+
+static int cinterion_init(void)
+{
+	return ofono_modem_driver_register(&cinterion_driver);
+}
+
+static void cinterion_exit(void)
+{
+	ofono_modem_driver_unregister(&cinterion_driver);
+}
+
+OFONO_PLUGIN_DEFINE(cinterion, "Cinterion driver plugin", VERSION,
+		OFONO_PLUGIN_PRIORITY_DEFAULT, cinterion_init, cinterion_exit)
diff --git a/plugins/tc65.c b/plugins/tc65.c
deleted file mode 100644
index eb64b89..0000000
--- a/plugins/tc65.c
+++ /dev/null
@@ -1,245 +0,0 @@
-/*
- *
- *  oFono - Open Source Telephony
- *
- *  Copyright (C) 2008-2011  Intel Corporation. All rights reserved.
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License version 2 as
- *  published by the Free Software Foundation.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <errno.h>
-#include <stdlib.h>
-
-#include <glib.h>
-#include <gatchat.h>
-#include <gattty.h>
-
-#define OFONO_API_SUBJECT_TO_CHANGE
-#include <ofono/plugin.h>
-#include <ofono/log.h>
-#include <ofono/modem.h>
-#include <ofono/call-barring.h>
-#include <ofono/call-forwarding.h>
-#include <ofono/call-meter.h>
-#include <ofono/call-settings.h>
-#include <ofono/devinfo.h>
-#include <ofono/message-waiting.h>
-#include <ofono/netreg.h>
-#include <ofono/phonebook.h>
-#include <ofono/sim.h>
-#include <ofono/sms.h>
-#include <ofono/ussd.h>
-#include <ofono/voicecall.h>
-
-#include <drivers/atmodem/atutil.h>
-
-#include <ofono/gprs.h>
-#include <ofono/gprs-context.h>
-
-static int tc65_probe(struct ofono_modem *modem)
-{
-	return 0;
-}
-
-static void tc65_remove(struct ofono_modem *modem)
-{
-}
-
-static void tc65_debug(const char *str, void *user_data)
-{
-	const char *prefix = user_data;
-
-	ofono_info("%s%s", prefix, str);
-}
-
-static int tc65_enable(struct ofono_modem *modem)
-{
-	GAtChat *chat;
-	GIOChannel *channel;
-	GAtSyntax *syntax;
-	GHashTable *options;
-	const char *device;
-
-	DBG("%p", modem);
-
-	options = g_hash_table_new(g_str_hash, g_str_equal);
-	if (options == NULL)
-		return -ENOMEM;
-
-	device = ofono_modem_get_string(modem, "Device");
-	if (device == NULL)
-		return -EINVAL;
-
-	g_hash_table_insert(options, "Baud", "115200");
-	g_hash_table_insert(options, "StopBits", "1");
-	g_hash_table_insert(options, "DataBits", "8");
-	g_hash_table_insert(options, "Parity", "none");
-	g_hash_table_insert(options, "XonXoff", "off");
-	g_hash_table_insert(options, "RtsCts", "on");
-	g_hash_table_insert(options, "Local", "on");
-	g_hash_table_insert(options, "Read", "on");
-
-	channel = g_at_tty_open(device, options);
-	g_hash_table_destroy(options);
-
-	if (channel == NULL)
-		return -EIO;
-
-	/*
-	 * TC65 works almost as the 27.007 says. But for example after
-	 * AT+CRSM the modem replies with the data in the queried EF and
-	 * writes three pairs of <CR><LF> after the data and before OK.
-	 */
-	syntax = g_at_syntax_new_gsm_permissive();
-
-	chat = g_at_chat_new(channel, syntax);
-	g_at_syntax_unref(syntax);
-	g_io_channel_unref(channel);
-
-	if (chat == NULL)
-		return -ENOMEM;
-
-	if (getenv("OFONO_AT_DEBUG"))
-		g_at_chat_set_debug(chat, tc65_debug, "");
-
-	ofono_modem_set_data(modem, chat);
-
-	return 0;
-}
-
-static int tc65_disable(struct ofono_modem *modem)
-{
-	GAtChat *chat = ofono_modem_get_data(modem);
-
-	DBG("%p", modem);
-
-	ofono_modem_set_data(modem, NULL);
-
-	g_at_chat_send(chat, "AT+CFUN=7", NULL, NULL, NULL, NULL);
-
-	g_at_chat_unref(chat);
-
-	return 0;
-}
-
-static void set_online_cb(gboolean ok, GAtResult *result, gpointer user_data)
-{
-	struct cb_data *cbd = user_data;
-	ofono_modem_online_cb_t cb = cbd->cb;
-	struct ofono_error error;
-
-	decode_at_error(&error, g_at_result_final_response(result));
-
-	cb(&error, cbd->data);
-}
-
-static void tc65_set_online(struct ofono_modem *modem, ofono_bool_t online,
-			ofono_modem_online_cb_t cb, void *user_data)
-{
-	GAtChat *chat = ofono_modem_get_data(modem);
-	struct cb_data *cbd = cb_data_new(cb, user_data);
-	char const *command = online ? "AT+CFUN=1" : "AT+CFUN=7";
-
-	DBG("modem %p %s", modem, online ? "online" : "offline");
-
-	if (g_at_chat_send(chat, command, NULL, set_online_cb, cbd, g_free))
-		return;
-
-	g_free(cbd);
-
-	CALLBACK_WITH_FAILURE(cb, cbd->data);
-}
-
-static void tc65_pre_sim(struct ofono_modem *modem)
-{
-	GAtChat *chat = ofono_modem_get_data(modem);
-	struct ofono_sim *sim;
-
-	DBG("%p", modem);
-
-	ofono_devinfo_create(modem, 0, "atmodem", chat);
-	sim = ofono_sim_create(modem, 0, "atmodem", chat);
-	ofono_voicecall_create(modem, 0, "atmodem", chat);
-
-	if (sim)
-		ofono_sim_inserted_notify(sim, TRUE);
-}
-
-static void tc65_post_sim(struct ofono_modem *modem)
-{
-	GAtChat *chat = ofono_modem_get_data(modem);
-
-	DBG("%p", modem);
-
-	ofono_phonebook_create(modem, 0, "atmodem", chat);
-
-	ofono_sms_create(modem, 0, "atmodem", chat);
-}
-
-static void tc65_post_online(struct ofono_modem *modem)
-{
-	GAtChat *chat = ofono_modem_get_data(modem);
-	struct ofono_message_waiting *mw;
-	struct ofono_gprs *gprs;
-	struct ofono_gprs_context *gc;
-
-	DBG("%p", modem);
-
-	ofono_ussd_create(modem, 0, "atmodem", chat);
-	ofono_call_forwarding_create(modem, 0, "atmodem", chat);
-	ofono_call_settings_create(modem, 0, "atmodem", chat);
-	ofono_netreg_create(modem, 0, "atmodem", chat);
-	ofono_call_meter_create(modem, 0, "atmodem", chat);
-	ofono_call_barring_create(modem, 0, "atmodem", chat);
-
-	gprs = ofono_gprs_create(modem, 0, "atmodem", chat);
-	gc = ofono_gprs_context_create(modem, 0, "atmodem", chat);
-
-	if (gprs && gc)
-		ofono_gprs_add_context(gprs, gc);
-
-	mw = ofono_message_waiting_create(modem);
-	if (mw)
-		ofono_message_waiting_register(mw);
-}
-
-static struct ofono_modem_driver tc65_driver = {
-	.name		= "tc65",
-	.probe		= tc65_probe,
-	.remove		= tc65_remove,
-	.enable		= tc65_enable,
-	.disable	= tc65_disable,
-	.set_online	= tc65_set_online,
-	.pre_sim	= tc65_pre_sim,
-	.post_sim	= tc65_post_sim,
-	.post_online	= tc65_post_online,
-};
-
-static int tc65_init(void)
-{
-	return ofono_modem_driver_register(&tc65_driver);
-}
-
-static void tc65_exit(void)
-{
-	ofono_modem_driver_unregister(&tc65_driver);
-}
-
-OFONO_PLUGIN_DEFINE(tc65, "Cinterion TC65 driver plugin", VERSION,
-		OFONO_PLUGIN_PRIORITY_DEFAULT, tc65_init, tc65_exit)
diff --git a/plugins/udev.c b/plugins/udev.c
index a78cd41..3c90e40 100644
--- a/plugins/udev.c
+++ b/plugins/udev.c
@@ -192,7 +192,7 @@ static void add_wavecom(struct ofono_modem *modem,
 	ofono_modem_register(modem);
 }
 
-static void add_tc65(struct ofono_modem *modem,
+static void add_cinterion(struct ofono_modem *modem,
 			struct udev_device *udev_device)
 {
 	const char *devnode;
@@ -243,6 +243,11 @@ static void add_modem(struct udev_device *udev_device)
 		if (devpath == NULL)
 			return;
 
+		if(g_strcmp0(driver, "tc65") == 0)
+			driver = "cinterion";
+		if(g_strcmp0(driver, "ehs6") == 0)
+			driver = "cinterion";
+
 		modem = ofono_modem_create(NULL, driver);
 		if (modem == NULL)
 			return;
@@ -305,8 +310,8 @@ done:
 		add_isi(modem, udev_device);
 	else if (g_strcmp0(driver, "calypso") == 0)
 		add_calypso(modem, udev_device);
-	else if (g_strcmp0(driver, "tc65") == 0)
-		add_tc65(modem, udev_device);
+	else if (g_strcmp0(driver, "cinterion") == 0)
+		add_cinterion(modem, udev_device);
 	else if (g_strcmp0(driver, "nokiacdma") == 0)
 		add_nokiacdma(modem, udev_device);
 	else if (g_strcmp0(driver, "sim900") == 0)
-- 
1.9.1


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

* Re: [PATCH 1/2] cinterion: Add cinterion vendor support
  2015-04-30 19:08 [PATCH 1/2] cinterion: Add cinterion vendor support Alex J Lennon
  2015-04-30 19:08 ` [PATCH 2/2] cinterion: Replace tc65 plugin with vendor generic cinterion plugin Alex J Lennon
@ 2015-05-01 14:02 ` Denis Kenzior
  2015-05-12 17:27   ` Alex J Lennon
  1 sibling, 1 reply; 6+ messages in thread
From: Denis Kenzior @ 2015-05-01 14:02 UTC (permalink / raw)
  To: ofono

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

Hi Alex,

On 04/30/2015 02:08 PM, Alex J Lennon wrote:
> Implement OFONO_VENDOR_CINTERION specific support to register
> textual +CIEV indications for signal strength using vendor
> specific AT^SIND command
> ---
>   drivers/atmodem/network-registration.c | 64 ++++++++++++++++++++++++++++++++--
>   drivers/atmodem/vendor.h               |  1 +
>   2 files changed, 62 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/atmodem/network-registration.c b/drivers/atmodem/network-registration.c
> index a438726..c3507cc 100644
> --- a/drivers/atmodem/network-registration.c
> +++ b/drivers/atmodem/network-registration.c
> @@ -838,6 +838,39 @@ static void telit_ciev_notify(GAtResult *result, gpointer user_data)
>   	ofono_netreg_strength_notify(netreg, strength);
>   }
>
> +static void cinterion_ciev_notify(GAtResult *result, gpointer user_data)
> +{
> +	struct ofono_netreg *netreg = user_data;
> +	struct netreg_data *nd = ofono_netreg_get_data(netreg);
> +	const char *signal_identifier = "rssi";
> +	const char *ind_str;
> +	int strength;
> +	GAtResultIter iter;
> +
> +	g_at_result_iter_init(&iter, result);
> +
> +	if (!g_at_result_iter_next(&iter, "+CIEV:"))
> +		return;
> +
> +	if (!g_at_result_iter_next_unquoted_string(&iter, &ind_str))
> +		return;
> +
> +	if (!g_str_equal(signal_identifier, ind_str))
> +		return;
> +
> +	if (!g_at_result_iter_next_number(&iter, &strength))
> +		return;
> +
> +	DBG("rssi %d", strength);
> +
> +	if (strength == nd->signal_invalid)
> +		strength = -1;
> +	else
> +		strength = (strength * 100) / (nd->signal_max - nd->signal_min);
> +
> +	ofono_netreg_strength_notify(netreg, strength);
> +}
> +
>   static void ctzv_notify(GAtResult *result, gpointer user_data)
>   {
>   	struct ofono_netreg *netreg = user_data;
> @@ -1494,13 +1527,17 @@ static void at_cmer_set_cb(gboolean ok, GAtResult *result, gpointer user_data)
>   	}
>
>   	/*
> -	 * Telit uses strings instead of numbers to identify indicators
> -	 * in a +CIEV URC.
> -	 * Handle them in a separate function to keep the code clean.
> +	 * Telit/Cinterion uses strings instead of numbers to identify
> +	 * indicators in a +CIEV URC.
> +	 * Handle them in separate functions to keep the code clean.
>   	 */

Why is this comment here?  It looks like this function is never called 
in the case of OFONO_VENDOR_CINTERION.  Or am I missing something?

>   	if (nd->vendor == OFONO_VENDOR_TELIT)
>   		g_at_chat_register(nd->chat, "+CIEV:",
>   				telit_ciev_notify, FALSE, netreg, NULL);
> +	else if (nd->vendor == OFONO_VENDOR_CINTERION)
> +	{
> +	  /* +CIEV handling has been registered in at_creg_set_cb() */
> +	}

This part seems to be completely unnecessary?  At least by my reading of 
the code flow, at_cmer_set_cb is never called in the case of 
OFONO_VENDOR_CINTERION.

This is not our coding style.  Please refer to doc/coding-style.txt and 
the Linux Kernel coding style document here: 
https://www.kernel.org/doc/Documentation/CodingStyle.

>   	else
>   		g_at_chat_register(nd->chat, "+CIEV:",
>   				ciev_notify, FALSE, netreg, NULL);
> @@ -1915,6 +1952,27 @@ static void at_creg_set_cb(gboolean ok, GAtResult *result, gpointer user_data)
>   		g_at_chat_send(nd->chat, "AT*TLTS=1", none_prefix,
>   						NULL, NULL, NULL);
>   		break;
> +	case OFONO_VENDOR_CINTERION:
> +		/*
> +		 * We can't set rssi bounds from Cinterion responses
> +		 * so set them up to specified values here
> +		 *
> +		 * Cinterion rssi signal strength specified as:
> +		 * 0      <= -112dBm
> +		 * 1 - 4  signal strengh in 15 dB steps
> +		 * 5      >= -51 dBm
> +		 * 99     not known or undetectable
> +		 */
> +		nd->signal_min = 0;
> +		nd->signal_max = 5;
> +		nd->signal_invalid = 99;
> +
> +		/* Register for specific signal strength reports */
> +		g_at_chat_send(nd->chat, "AT^SIND=\"rssi\",1", none_prefix,
> +				NULL, NULL, NULL);
> +		g_at_chat_register(nd->chat, "+CIEV:",
> +				cinterion_ciev_notify, FALSE, netreg, NULL);
> +		break;
>   	case OFONO_VENDOR_NOKIA:
>   	case OFONO_VENDOR_SAMSUNG:
>   		/* Signal strength reporting via CIND is not supported */
> diff --git a/drivers/atmodem/vendor.h b/drivers/atmodem/vendor.h
> index c132e45..52071c8 100644
> --- a/drivers/atmodem/vendor.h
> +++ b/drivers/atmodem/vendor.h
> @@ -45,4 +45,5 @@ enum ofono_vendor {
>   	OFONO_VENDOR_ALCATEL,
>   	OFONO_VENDOR_QUECTEL,
>   	OFONO_VENDOR_UBLOX,
> +	OFONO_VENDOR_CINTERION,
>   };
>

Regards,
-Denis

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

* Re: [PATCH 2/2] cinterion: Replace tc65 plugin with vendor generic cinterion plugin
  2015-04-30 19:08 ` [PATCH 2/2] cinterion: Replace tc65 plugin with vendor generic cinterion plugin Alex J Lennon
@ 2015-05-01 14:05   ` Denis Kenzior
  2015-05-01 21:11     ` Alex J Lennon
  0 siblings, 1 reply; 6+ messages in thread
From: Denis Kenzior @ 2015-05-01 14:05 UTC (permalink / raw)
  To: ofono

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

Hi Alex,

On 04/30/2015 02:08 PM, Alex J Lennon wrote:
> On the basis that cinterion tx6x, ehsx, other devices will likely
> have similar firmware requirements, implement a generic cinterion
> plugin.
>
> The udev implementation retains support for "tc65" device for
> backwards compatibility, and adds support for  "ehs6" and generic
> "cinterion" devices.
> ---
>   Makefile.am         |   4 +-
>   plugins/cinterion.c | 249 ++++++++++++++++++++++++++++++++++++++++++++++++++++
>   plugins/tc65.c      | 245 ---------------------------------------------------

Might be easier & cleaner to start off with this patch first.  Copying 
the virgin tc65.c to cinterion.c.

>   plugins/udev.c      |  11 ++-

Then add quirk handling in patch 1 and add ehs6 specific logic to 
plugins/udev.c in follow on commits.

>   4 files changed, 259 insertions(+), 250 deletions(-)
>   create mode 100644 plugins/cinterion.c
>   delete mode 100644 plugins/tc65.c
>

Regards,
-Denis


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

* Re: [PATCH 2/2] cinterion: Replace tc65 plugin with vendor generic cinterion plugin
  2015-05-01 14:05   ` Denis Kenzior
@ 2015-05-01 21:11     ` Alex J Lennon
  0 siblings, 0 replies; 6+ messages in thread
From: Alex J Lennon @ 2015-05-01 21:11 UTC (permalink / raw)
  To: ofono

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



On 01/05/2015 16:05, Denis Kenzior wrote:
> Hi Alex,
>
> On 04/30/2015 02:08 PM, Alex J Lennon wrote:
>> On the basis that cinterion tx6x, ehsx, other devices will likely
>> have similar firmware requirements, implement a generic cinterion
>> plugin.
>>
>> The udev implementation retains support for "tc65" device for
>> backwards compatibility, and adds support for  "ehs6" and generic
>> "cinterion" devices.
>> ---
>>   Makefile.am         |   4 +-
>>   plugins/cinterion.c | 249
>> ++++++++++++++++++++++++++++++++++++++++++++++++++++
>>   plugins/tc65.c      | 245
>> ---------------------------------------------------
>
> Might be easier & cleaner to start off with this patch first.  Copying
> the virgin tc65.c to cinterion.c.
>
>>   plugins/udev.c      |  11 ++-
>
> Then add quirk handling in patch 1 and add ehs6 specific logic to
> plugins/udev.c in follow on commits.
>
>>   4 files changed, 259 insertions(+), 250 deletions(-)
>>   create mode 100644 plugins/cinterion.c
>>   delete mode 100644 plugins/tc65.c
>>
>

Hi Denis,

I did it this way around as there was a comment in the hacking document
about breaking down patches,
and also that patches should not break builds, so I added the
functionality before I did the renaming as
otherwise I would break the build. Are you happy to treat the multiple
patches as atomic?

I'm out of the office now until the 11th. I'll pick this up with you
then, if that's OK, to try to understand
what needs to change.

Thanks,

Alex









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

* Re: [PATCH 1/2] cinterion: Add cinterion vendor support
  2015-05-01 14:02 ` [PATCH 1/2] cinterion: Add cinterion vendor support Denis Kenzior
@ 2015-05-12 17:27   ` Alex J Lennon
  0 siblings, 0 replies; 6+ messages in thread
From: Alex J Lennon @ 2015-05-12 17:27 UTC (permalink / raw)
  To: ofono

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

Hi Denis,

On 01/05/2015 16:02, Denis Kenzior wrote:
> Hi Alex,
>
> This part seems to be completely unnecessary?  At least by my reading
> of the code flow, at_cmer_set_cb is never called in the case of
> OFONO_VENDOR_CINTERION.
>
> This is not our coding style.  Please refer to doc/coding-style.txt
> and the Linux Kernel coding style document here:
> https://www.kernel.org/doc/Documentation/CodingStyle.

I've removed the check to ensure that the callback is not re-registered
accidentally and reformatted the patch-set, hopefully more in line with
your suggestions as to flow...

Thanks for the link to the ofono preferred coding style. I will make
time in the near future to take a look at this.

Best Regards,

Alex


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

end of thread, other threads:[~2015-05-12 17:27 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-04-30 19:08 [PATCH 1/2] cinterion: Add cinterion vendor support Alex J Lennon
2015-04-30 19:08 ` [PATCH 2/2] cinterion: Replace tc65 plugin with vendor generic cinterion plugin Alex J Lennon
2015-05-01 14:05   ` Denis Kenzior
2015-05-01 21:11     ` Alex J Lennon
2015-05-01 14:02 ` [PATCH 1/2] cinterion: Add cinterion vendor support Denis Kenzior
2015-05-12 17:27   ` Alex J Lennon

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.