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:
@@ -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),
|
||||
|
@@ -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,
|
||||
|
@@ -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));
|
||||
}
|
||||
|
@@ -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,
|
||||
|
Reference in New Issue
Block a user