Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Evergreen:11.1:kernel-2.6.32
ModemManager
mm-v1-e1-parser.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File mm-v1-e1-parser.patch of Package ModemManager
From eae902db41879551945200c61e2148a78f4caa11 Mon Sep 17 00:00:00 2001 From: Tambet Ingo <tambet@gmail.com> Date: Thu, 2 Apr 2009 12:31:40 +0300 Subject: [PATCH] Implement 'V1 E1' parser to work with modems which refuse to turn their echo off. diff --git a/src/mm-serial-parsers.c b/src/mm-serial-parsers.c index 2f4e2a9..8e6b75b 100644 --- a/src/mm-serial-parsers.c +++ b/src/mm-serial-parsers.c @@ -295,3 +295,54 @@ mm_serial_parser_v1_destroy (gpointer data) g_slice_free (MMSerialParserV1, data); } + +typedef struct { + gpointer v1; + GRegex *regex_echo; +} MMSerialParserV1E1; + +gpointer +mm_serial_parser_v1_e1_new (void) +{ + MMSerialParserV1E1 *parser; + GRegexCompileFlags flags = G_REGEX_DOLLAR_ENDONLY | G_REGEX_RAW | G_REGEX_OPTIMIZE; + + parser = g_slice_new (MMSerialParserV1E1); + parser->v1 = mm_serial_parser_v1_new (); + + /* Does not start with '<CR><LF>' and ends with '<CR>'. */ + parser->regex_echo = g_regex_new ("^(?!\\r\\n).+\\r", flags, 0, NULL); + + return parser; +} + +gboolean +mm_serial_parser_v1_e1_parse (gpointer data, + GString *response, + GError **error) +{ + MMSerialParserV1E1 *parser = (MMSerialParserV1E1 *) data; + GMatchInfo *match_info = NULL; + + /* Remove the command echo */ + if (g_regex_match_full (parser->regex_echo, response->str, response->len, 0, 0, &match_info, NULL)) { + gchar *match = g_match_info_fetch (match_info, 0); + + g_string_erase (response, 0, strlen (match)); + g_free (match); + g_match_info_free (match_info); + } + + return mm_serial_parser_v1_parse (parser->v1, response, error); +} + +void +mm_serial_parser_v1_e1_destroy (gpointer data) +{ + MMSerialParserV1E1 *parser = (MMSerialParserV1E1 *) data; + + g_regex_unref (parser->regex_echo); + mm_serial_parser_v1_destroy (parser->v1); + + g_slice_free (MMSerialParserV1E1, data); +} diff --git a/src/mm-serial-parsers.h b/src/mm-serial-parsers.h index 29e3646..8bfda83 100644 --- a/src/mm-serial-parsers.h +++ b/src/mm-serial-parsers.h @@ -20,4 +20,12 @@ gboolean mm_serial_parser_v1_parse (gpointer parser, void mm_serial_parser_v1_destroy (gpointer parser); + +gpointer mm_serial_parser_v1_e1_new (void); +gboolean mm_serial_parser_v1_e1_parse (gpointer parser, + GString *response, + GError **error); + +void mm_serial_parser_v1_e1_destroy (gpointer parser); + #endif /* MM_SERIAL_PARSERS_H */ -- 1.6.0.2
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor