diff options
Diffstat (limited to 'src/mm-port-probe.c')
-rw-r--r-- | src/mm-port-probe.c | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/src/mm-port-probe.c b/src/mm-port-probe.c index 6c36e6ba..33f0be86 100644 --- a/src/mm-port-probe.c +++ b/src/mm-port-probe.c @@ -955,6 +955,23 @@ serial_buffer_full (MMSerialPort *serial, } static gboolean +serial_parser_filter_cb (gpointer filter, + gpointer user_data, + GString *response, + GError **error) +{ + if (is_non_at_response ((const guint8 *) response->str, response->len)) { + g_set_error (error, + MM_SERIAL_ERROR, + MM_SERIAL_ERROR_PARSE_FAILED, + "Not an AT response"); + return FALSE; + } + + return TRUE; +} + +static gboolean serial_open_at (MMPortProbe *self) { PortProbeRunTask *task = self->priv->task; @@ -968,6 +985,8 @@ serial_open_at (MMPortProbe *self) /* Create AT serial port if not done before */ if (!task->serial) { + gpointer parser; + task->serial = MM_SERIAL_PORT (mm_at_serial_port_new (g_udev_device_get_name (self->priv->port))); if (!task->serial) { port_probe_run_task_complete ( @@ -989,9 +1008,13 @@ serial_open_at (MMPortProbe *self) MM_SERIAL_PORT_SPEW_CONTROL, TRUE, NULL); + parser = mm_serial_parser_v1_new (); + mm_serial_parser_v1_add_filter (parser, + serial_parser_filter_cb, + NULL); mm_at_serial_port_set_response_parser (MM_AT_SERIAL_PORT (task->serial), mm_serial_parser_v1_parse, - mm_serial_parser_v1_new (), + parser, mm_serial_parser_v1_destroy); } |