[PATCH v2 1/2] at-serial-port: allow enabling/disabling unsolicited message handlers
Aleksander Morgado
aleksander at lanedo.com
Mon Aug 26 07:27:28 PDT 2013
On 22/08/13 02:32, Ben Chan wrote:
> This patch adds an 'enable' flag in MMAtUnsolicitedMsgHandler and
> mm_at_serial_port_enable_disable_unsolicited_msg_handler() to allow
> enabling and disabling of unsolicited message handlers. The enable flag
> is set to TRUE by mm_at_serial_port_add_unsolicited_msg_handler().
> ---
Pushed, thanks. Note that I renamed the method (from 'enable_disable' to
just 'enable') in a separate commit afterwards.
> src/mm-at-serial-port.c | 28 ++++++++++++++++++++++++++++
> src/mm-at-serial-port.h | 4 ++++
> 2 files changed, 32 insertions(+)
>
> diff --git a/src/mm-at-serial-port.c b/src/mm-at-serial-port.c
> index 346221a..3b94458 100644
> --- a/src/mm-at-serial-port.c
> +++ b/src/mm-at-serial-port.c
> @@ -176,6 +176,7 @@ handle_response (MMSerialPort *port,
> typedef struct {
> GRegex *regex;
> MMAtSerialUnsolicitedMsgFn callback;
> + gboolean enable;
> gpointer user_data;
> GDestroyNotify notify;
> } MMAtUnsolicitedMsgHandler;
> @@ -219,10 +220,34 @@ mm_at_serial_port_add_unsolicited_msg_handler (MMAtSerialPort *self,
> }
>
> handler->callback = callback;
> + handler->enable = TRUE;
> handler->user_data = user_data;
> handler->notify = notify;
> }
>
> +void
> +mm_at_serial_port_enable_disable_unsolicited_msg_handler (MMAtSerialPort *self,
> + GRegex *regex,
> + gboolean enable)
> +{
> + GSList *existing;
> + MMAtUnsolicitedMsgHandler *handler;
> + MMAtSerialPortPrivate *priv;
> +
> + g_return_if_fail (MM_IS_AT_SERIAL_PORT (self));
> + g_return_if_fail (regex != NULL);
> +
> + priv = MM_AT_SERIAL_PORT_GET_PRIVATE (self);
> +
> + existing = g_slist_find_custom (priv->unsolicited_msg_handlers,
> + regex,
> + (GCompareFunc)unsolicited_msg_handler_cmp);
> + if (existing) {
> + handler = existing->data;
> + handler->enable = enable;
> + }
> +}
> +
> static gboolean
> remove_eval_cb (const GMatchInfo *match_info,
> GString *result,
> @@ -254,6 +279,9 @@ parse_unsolicited (MMSerialPort *port, GByteArray *response)
> GMatchInfo *match_info;
> gboolean matches;
>
> + if (!handler->enable)
> + continue;
> +
> matches = g_regex_match_full (handler->regex,
> (const char *) response->data,
> response->len,
> diff --git a/src/mm-at-serial-port.h b/src/mm-at-serial-port.h
> index cf960a0..0970681 100644
> --- a/src/mm-at-serial-port.h
> +++ b/src/mm-at-serial-port.h
> @@ -89,6 +89,10 @@ void mm_at_serial_port_add_unsolicited_msg_handler (MMAtSerialPort *self,
> gpointer user_data,
> GDestroyNotify notify);
>
> +void mm_at_serial_port_enable_disable_unsolicited_msg_handler (MMAtSerialPort *self,
> + GRegex *regex,
> + gboolean enable);
> +
> void mm_at_serial_port_set_response_parser (MMAtSerialPort *self,
> MMAtSerialResponseParserFn fn,
> gpointer user_data,
>
--
Aleksander
More information about the ModemManager-devel
mailing list