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));
|
port = MM_PORT (mm_port_serial_qcdm_new (name));
|
||||||
else if (ptype == MM_PORT_TYPE_AT) {
|
else if (ptype == MM_PORT_TYPE_AT) {
|
||||||
/* AT port */
|
/* 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 */
|
/* Set common response parser */
|
||||||
mm_port_serial_at_set_response_parser (MM_PORT_SERIAL_AT (port),
|
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 */
|
/* Create AT serial port if not done before */
|
||||||
if (!task->serial) {
|
if (!task->serial) {
|
||||||
gpointer parser;
|
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) {
|
if (!task->serial) {
|
||||||
port_probe_run_task_complete (
|
port_probe_run_task_complete (
|
||||||
task,
|
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 (MM_IS_PORT_SERIAL_AT (self));
|
||||||
g_return_if_fail (command != NULL);
|
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);
|
g_return_if_fail (buf != NULL);
|
||||||
|
|
||||||
simple = g_simple_async_result_new (G_OBJECT (self),
|
simple = g_simple_async_result_new (G_OBJECT (self),
|
||||||
@@ -496,11 +500,14 @@ config (MMPortSerial *_self)
|
|||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
MMPortSerialAt *
|
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,
|
return MM_PORT_SERIAL_AT (g_object_new (MM_TYPE_PORT_SERIAL_AT,
|
||||||
MM_PORT_DEVICE, name,
|
MM_PORT_DEVICE, name,
|
||||||
MM_PORT_SUBSYS, MM_PORT_SUBSYS_TTY,
|
MM_PORT_SUBSYS, subsys,
|
||||||
MM_PORT_TYPE, MM_PORT_TYPE_AT,
|
MM_PORT_TYPE, MM_PORT_TYPE_AT,
|
||||||
NULL));
|
NULL));
|
||||||
}
|
}
|
||||||
|
@@ -77,7 +77,8 @@ struct _MMPortSerialAtClass {
|
|||||||
|
|
||||||
GType mm_port_serial_at_get_type (void);
|
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,
|
void mm_port_serial_at_add_unsolicited_msg_handler (MMPortSerialAt *self,
|
||||||
GRegex *regex,
|
GRegex *regex,
|
||||||
|
Reference in New Issue
Block a user