port-serial-at: allow specifying subsystem when creating a 'MMPortSerialAt'

Don't just assume that all AT ports are TTYs.
This commit is contained in:
Aleksander Morgado
2013-11-19 20:24:27 +01:00
parent 9432674087
commit 38ebf7c95b
4 changed files with 19 additions and 6 deletions

View File

@@ -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),

View File

@@ -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,

View File

@@ -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));
}

View File

@@ -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,