aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@aleksander.es>2013-11-19 20:24:27 +0100
committerAleksander Morgado <aleksander@aleksander.es>2014-02-13 13:40:55 +0100
commit38ebf7c95b94f065f80c85505e65f102cef733d2 (patch)
treef0d61b3b508d2713ccf31f7c72d25889f9c789e3 /src
parent9432674087617b8140ca2e517e367bf74061e87e (diff)
port-serial-at: allow specifying subsystem when creating a 'MMPortSerialAt'
Don't just assume that all AT ports are TTYs.
Diffstat (limited to 'src')
-rw-r--r--src/mm-base-modem.c2
-rw-r--r--src/mm-port-probe.c7
-rw-r--r--src/mm-port-serial-at.c13
-rw-r--r--src/mm-port-serial-at.h3
4 files changed, 19 insertions, 6 deletions
diff --git a/src/mm-base-modem.c b/src/mm-base-modem.c
index bd169afe..bc55ebb1 100644
--- a/src/mm-base-modem.c
+++ b/src/mm-base-modem.c
@@ -206,7 +206,7 @@ mm_base_modem_grab_port (MMBaseModem *self,
port = MM_PORT (mm_port_serial_qcdm_new (name));
else if (ptype == MM_PORT_TYPE_AT) {
/* AT port */
- port = MM_PORT (mm_port_serial_at_new (name));
+ port = MM_PORT (mm_port_serial_at_new (name, MM_PORT_SUBSYS_TTY));
/* Set common response parser */
mm_port_serial_at_set_response_parser (MM_PORT_SERIAL_AT (port),
diff --git a/src/mm-port-probe.c b/src/mm-port-probe.c
index 69e68f13..6afd09c8 100644
--- a/src/mm-port-probe.c
+++ b/src/mm-port-probe.c
@@ -1156,8 +1156,13 @@ serial_open_at (MMPortProbe *self)
/* Create AT serial port if not done before */
if (!task->serial) {
gpointer parser;
+ MMPortSubsys subsys = MM_PORT_SUBSYS_TTY;
- task->serial = MM_PORT_SERIAL (mm_port_serial_at_new (g_udev_device_get_name (self->priv->port)));
+ if (g_str_has_prefix (g_udev_device_get_subsystem (self->priv->port), "usb"))
+ subsys = MM_PORT_SUBSYS_USB;
+
+ task->serial = MM_PORT_SERIAL (mm_port_serial_at_new (g_udev_device_get_name (self->priv->port),
+ subsys));
if (!task->serial) {
port_probe_run_task_complete (
task,
diff --git a/src/mm-port-serial-at.c b/src/mm-port-serial-at.c
index da75e0e1..b49de1a1 100644
--- a/src/mm-port-serial-at.c
+++ b/src/mm-port-serial-at.c
@@ -388,7 +388,11 @@ mm_port_serial_at_command (MMPortSerialAt *self,
g_return_if_fail (MM_IS_PORT_SERIAL_AT (self));
g_return_if_fail (command != NULL);
- buf = at_command_to_byte_array (command, is_raw, self->priv->send_lf);
+ buf = at_command_to_byte_array (command,
+ is_raw,
+ (mm_port_get_subsys (MM_PORT (self)) == MM_PORT_SUBSYS_TTY ?
+ self->priv->send_lf :
+ TRUE));
g_return_if_fail (buf != NULL);
simple = g_simple_async_result_new (G_OBJECT (self),
@@ -496,11 +500,14 @@ config (MMPortSerial *_self)
/*****************************************************************************/
MMPortSerialAt *
-mm_port_serial_at_new (const char *name)
+mm_port_serial_at_new (const char *name,
+ MMPortSubsys subsys)
{
+ g_return_val_if_fail (subsys == MM_PORT_SUBSYS_TTY || subsys == MM_PORT_SUBSYS_USB, NULL);
+
return MM_PORT_SERIAL_AT (g_object_new (MM_TYPE_PORT_SERIAL_AT,
MM_PORT_DEVICE, name,
- MM_PORT_SUBSYS, MM_PORT_SUBSYS_TTY,
+ MM_PORT_SUBSYS, subsys,
MM_PORT_TYPE, MM_PORT_TYPE_AT,
NULL));
}
diff --git a/src/mm-port-serial-at.h b/src/mm-port-serial-at.h
index 658f19e4..8e19409e 100644
--- a/src/mm-port-serial-at.h
+++ b/src/mm-port-serial-at.h
@@ -77,7 +77,8 @@ struct _MMPortSerialAtClass {
GType mm_port_serial_at_get_type (void);
-MMPortSerialAt *mm_port_serial_at_new (const char *name);
+MMPortSerialAt *mm_port_serial_at_new (const char *name,
+ MMPortSubsys subsys);
void mm_port_serial_at_add_unsolicited_msg_handler (MMPortSerialAt *self,
GRegex *regex,