base-modem,port-probe: set serial port flow control from udev tag

Set the serial port flow control from the udev tag
ID_MM_TTY_FLOW_CONTROL before accessing the port.
This commit is contained in:
Alfonso Sánchez-Beato
2018-09-03 09:06:27 +02:00
committed by Dan Williams
parent 4e69c10c2d
commit 94879ce1ce
2 changed files with 25 additions and 1 deletions

View File

@@ -151,6 +151,7 @@ mm_base_modem_grab_port (MMBaseModem *self,
gchar *key; gchar *key;
const gchar *subsys; const gchar *subsys;
const gchar *name; const gchar *name;
const gchar *flow_control_tag;
g_return_val_if_fail (MM_IS_BASE_MODEM (self), FALSE); g_return_val_if_fail (MM_IS_BASE_MODEM (self), FALSE);
g_return_val_if_fail (MM_IS_KERNEL_DEVICE (kernel_device), FALSE); g_return_val_if_fail (MM_IS_KERNEL_DEVICE (kernel_device), FALSE);
@@ -246,11 +247,18 @@ mm_base_modem_grab_port (MMBaseModem *self,
G_CALLBACK (serial_port_timed_out_cb), G_CALLBACK (serial_port_timed_out_cb),
self); self);
/* For serial ports, optionally use a specific baudrate */ /* For serial ports, optionally use a specific baudrate and flow control */
if (mm_kernel_device_has_property (kernel_device, "ID_MM_TTY_BAUDRATE")) if (mm_kernel_device_has_property (kernel_device, "ID_MM_TTY_BAUDRATE"))
g_object_set (port, g_object_set (port,
MM_PORT_SERIAL_BAUD, mm_kernel_device_get_property_as_int (kernel_device, "ID_MM_TTY_BAUDRATE"), MM_PORT_SERIAL_BAUD, mm_kernel_device_get_property_as_int (kernel_device, "ID_MM_TTY_BAUDRATE"),
NULL); NULL);
flow_control_tag = mm_kernel_device_get_property (kernel_device,
"ID_MM_TTY_FLOW_CONTROL");
if (flow_control_tag)
g_object_set (port,
MM_PORT_SERIAL_FLOW_CONTROL,
mm_parse_flow_control_tag (flow_control_tag),
NULL);
} }
/* Net ports... */ /* Net ports... */
else if (g_str_equal (subsys, "net")) { else if (g_str_equal (subsys, "net")) {

View File

@@ -711,6 +711,7 @@ serial_probe_qcdm (MMPortProbe *self)
gint len; gint len;
guint8 marker = 0x7E; guint8 marker = 0x7E;
PortProbeRunContext *ctx; PortProbeRunContext *ctx;
const gchar *flow_control_tag;
g_assert (self->priv->task); g_assert (self->priv->task);
ctx = g_task_get_task_data (self->priv->task); ctx = g_task_get_task_data (self->priv->task);
@@ -751,6 +752,13 @@ serial_probe_qcdm (MMPortProbe *self)
g_object_set (ctx->serial, g_object_set (ctx->serial,
MM_PORT_SERIAL_BAUD, mm_kernel_device_get_property_as_int (self->priv->port, "ID_MM_TTY_BAUDRATE"), MM_PORT_SERIAL_BAUD, mm_kernel_device_get_property_as_int (self->priv->port, "ID_MM_TTY_BAUDRATE"),
NULL); NULL);
flow_control_tag = mm_kernel_device_get_property (self->priv->port,
"ID_MM_TTY_FLOW_CONTROL");
if (flow_control_tag)
g_object_set (ctx->serial,
MM_PORT_SERIAL_FLOW_CONTROL,
mm_parse_flow_control_tag (flow_control_tag),
NULL);
/* Try to open the port */ /* Try to open the port */
if (!mm_port_serial_open (ctx->serial, &error)) { if (!mm_port_serial_open (ctx->serial, &error)) {
@@ -1256,6 +1264,7 @@ serial_open_at (MMPortProbe *self)
{ {
GError *error = NULL; GError *error = NULL;
PortProbeRunContext *ctx; PortProbeRunContext *ctx;
const gchar *flow_control_tag;
g_assert (self->priv->task); g_assert (self->priv->task);
ctx = g_task_get_task_data (self->priv->task); ctx = g_task_get_task_data (self->priv->task);
@@ -1295,6 +1304,13 @@ serial_open_at (MMPortProbe *self)
g_object_set (ctx->serial, g_object_set (ctx->serial,
MM_PORT_SERIAL_BAUD, mm_kernel_device_get_property_as_int (self->priv->port, "ID_MM_TTY_BAUDRATE"), MM_PORT_SERIAL_BAUD, mm_kernel_device_get_property_as_int (self->priv->port, "ID_MM_TTY_BAUDRATE"),
NULL); NULL);
flow_control_tag = mm_kernel_device_get_property (self->priv->port,
"ID_MM_TTY_FLOW_CONTROL");
if (flow_control_tag)
g_object_set (ctx->serial,
MM_PORT_SERIAL_FLOW_CONTROL,
mm_parse_flow_control_tag (flow_control_tag),
NULL);
parser = mm_serial_parser_v1_new (); parser = mm_serial_parser_v1_new ();
mm_serial_parser_v1_add_filter (parser, mm_serial_parser_v1_add_filter (parser,