Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Evergreen:11.1
ModemManager
mm-huawei-disable-dcd.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File mm-huawei-disable-dcd.patch of Package ModemManager
Index: ModemManager-0.1/plugins/mm-plugin-huawei.c =================================================================== --- ModemManager-0.1.orig/plugins/mm-plugin-huawei.c +++ ModemManager-0.1/plugins/mm-plugin-huawei.c @@ -60,6 +60,21 @@ list_supported_udis (MMPlugin *plugin, L return supported; } +static int +get_product (LibHalContext *hal_ctx, const char *udi) +{ + char *parent_udi; + int product = 0; + + parent_udi = libhal_device_get_property_string (hal_ctx, udi, "info.parent", NULL); + if (parent_udi) { + product = libhal_device_get_property_int (hal_ctx, parent_udi, "usb.product_id", NULL); + libhal_free_string (parent_udi); + } + + return product; +} + static gboolean supports_udi (MMPlugin *plugin, LibHalContext *hal_ctx, const char *udi) { @@ -78,7 +93,7 @@ supports_udi (MMPlugin *plugin, LibHalCo int product; vendor = libhal_device_get_property_int (hal_ctx, parent_udi, "usb.vendor_id", NULL); - product = libhal_device_get_property_int (hal_ctx, parent_udi, "usb.product_id", NULL); + product = get_product (hal_ctx, udi); if (vendor == 0x12d1 && (product == 0x1001 || product == 0x1003 || product == 0x1004)) supported = TRUE; @@ -174,13 +189,16 @@ create_modem (MMPlugin *plugin, LibHalCo driver = get_driver_name (hal_ctx, udi); g_return_val_if_fail (driver != NULL, NULL); - monitor_device = get_monitor_device (hal_ctx, udi); - g_debug ("Got monitor device: %s", monitor_device); - - modem = MM_MODEM (mm_modem_huawei_new (data_device, monitor_device, driver)); + if (get_product (hal_ctx, udi) == 0x1001) { + /* This modem is handled by generic GSM device */ + modem = mm_generic_gsm_new (data_device, driver); + } else { + monitor_device = get_monitor_device (hal_ctx, udi); + modem = mm_modem_huawei_new (data_device, monitor_device, driver); + libhal_free_string (monitor_device); + } libhal_free_string (data_device); - libhal_free_string (monitor_device); libhal_free_string (driver); return modem; Index: ModemManager-0.1/src/mm-serial.c =================================================================== --- ModemManager-0.1.orig/src/mm-serial.c +++ ModemManager-0.1/src/mm-serial.c @@ -29,6 +29,7 @@ enum { PROP_PARITY, PROP_STOPBITS, PROP_SEND_DELAY, + PROP_CARRIER_DETECT, LAST_PROP }; @@ -57,6 +58,7 @@ typedef struct { char parity; guint stopbits; guint64 send_delay; + gboolean carrier_detect; guint queue_schedule; guint watch_id; @@ -688,16 +690,20 @@ mm_serial_flash (MMSerial *self, gboolean mm_serial_is_connected (MMSerial *self) { - int fd; + MMSerialPrivate *priv; int mcs = 0; g_return_val_if_fail (MM_IS_SERIAL (self), FALSE); - fd = MM_SERIAL_GET_PRIVATE (self)->fd; - if (fd == 0) + priv = MM_SERIAL_GET_PRIVATE (self); + + if (!priv->carrier_detect) return FALSE; - if (ioctl (fd, TIOCMGET, &mcs) < 0) + if (priv->fd == 0) + return FALSE; + + if (ioctl (priv->fd, TIOCMGET, &mcs) < 0) return FALSE; return mcs & TIOCM_CAR ? TRUE : FALSE; @@ -715,6 +721,7 @@ mm_serial_init (MMSerial *self) priv->parity = 'n'; priv->stopbits = 1; priv->send_delay = 1000; + priv->carrier_detect = TRUE; priv->queue = g_queue_new (); priv->command = g_string_new_len ("AT", SERIAL_BUF_SIZE); @@ -772,6 +779,9 @@ set_property (GObject *object, guint pro case PROP_SEND_DELAY: priv->send_delay = g_value_get_uint64 (value); break; + case PROP_CARRIER_DETECT: + priv->carrier_detect = g_value_get_boolean (value); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -803,6 +813,9 @@ get_property (GObject *object, guint pro case PROP_SEND_DELAY: g_value_set_uint64 (value, priv->send_delay); break; + case PROP_CARRIER_DETECT: + g_value_set_boolean (value, priv->carrier_detect); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -889,4 +902,12 @@ mm_serial_class_init (MMSerialClass *kla "Send delay", 0, G_MAXUINT64, 0, G_PARAM_READWRITE)); + + g_object_class_install_property + (object_class, PROP_CARRIER_DETECT, + g_param_spec_boolean (MM_SERIAL_CARRIER_DETECT, + "CarrierDetect", + "Has carrier detect", + TRUE, + G_PARAM_READWRITE)); } Index: ModemManager-0.1/src/mm-serial.h =================================================================== --- ModemManager-0.1.orig/src/mm-serial.h +++ ModemManager-0.1/src/mm-serial.h @@ -19,6 +19,7 @@ #define MM_SERIAL_PARITY "parity" #define MM_SERIAL_STOPBITS "stopbits" #define MM_SERIAL_SEND_DELAY "send-delay" +#define MM_SERIAL_CARRIER_DETECT "carrier-detect" typedef struct _MMSerial MMSerial; typedef struct _MMSerialClass MMSerialClass; Index: ModemManager-0.1/plugins/mm-modem-huawei.c =================================================================== --- ModemManager-0.1.orig/plugins/mm-modem-huawei.c +++ ModemManager-0.1/plugins/mm-modem-huawei.c @@ -444,6 +444,8 @@ mm_modem_huawei_init (MMModemHuawei *sel priv->reg_state_regex = g_regex_new ("\\r\\n\\+CREG: (\\d+)\\r\\n", G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, NULL); priv->std_parser = mm_serial_parser_v1_new (); mm_serial_set_response_parser (MM_SERIAL (self), huawei_parse_response, self, NULL); + + g_object_set (G_OBJECT (self), MM_SERIAL_CARRIER_DETECT, FALSE, NULL); } static void
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