diff options
Diffstat (limited to 'src/mm-plugin-base.h')
-rw-r--r-- | src/mm-plugin-base.h | 89 |
1 files changed, 86 insertions, 3 deletions
diff --git a/src/mm-plugin-base.h b/src/mm-plugin-base.h index 92e46d90..e426956d 100644 --- a/src/mm-plugin-base.h +++ b/src/mm-plugin-base.h @@ -20,7 +20,54 @@ #include <glib/gtypes.h> #include <glib-object.h> +#define G_UDEV_API_IS_SUBJECT_TO_CHANGE +#include <gudev/gudev.h> + +#include "mm-plugin.h" #include "mm-modem.h" +#include "mm-port.h" + +#define MM_PLUGIN_BASE_PORT_CAP_GSM 0x0001 /* GSM */ +#define MM_PLUGIN_BASE_PORT_CAP_IS707_A 0x0002 /* CDMA Circuit Switched Data */ +#define MM_PLUGIN_BASE_PORT_CAP_IS707_P 0x0004 /* CDMA Packet Switched Data */ +#define MM_PLUGIN_BASE_PORT_CAP_DS 0x0008 /* Data compression selection (v.42bis) */ +#define MM_PLUGIN_BASE_PORT_CAP_ES 0x0010 /* Error control selection (v.42) */ +#define MM_PLUGIN_BASE_PORT_CAP_FCLASS 0x0020 /* Group III Fax */ +#define MM_PLUGIN_BASE_PORT_CAP_MS 0x0040 /* Modulation selection */ +#define MM_PLUGIN_BASE_PORT_CAP_W 0x0080 /* Wireless commands */ +#define MM_PLUGIN_BASE_PORT_CAP_IS856 0x0100 /* CDMA 3G EVDO rev 0 */ +#define MM_PLUGIN_BASE_PORT_CAP_IS856_A 0x0200 /* CDMA 3G EVDO rev A */ + +#define MM_TYPE_PLUGIN_BASE_SUPPORTS_TASK (mm_plugin_base_supports_task_get_type ()) +#define MM_PLUGIN_BASE_SUPPORTS_TASK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MM_TYPE_PLUGIN_BASE_SUPPORTS_TASK, MMPluginBaseSupportsTask)) +#define MM_PLUGIN_BASE_SUPPORTS_TASK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MM_TYPE_PLUGIN_BASE_SUPPORTS_TASK, MMPluginBaseSupportsTaskClass)) +#define MM_IS_PLUGIN_BASE_SUPPORTS_TASK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MM_TYPE_PLUGIN_BASE_SUPPORTS_TASK)) +#define MM_IS_PLUBIN_BASE_SUPPORTS_TASK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MM_TYPE_PLUGIN_BASE_SUPPORTS_TASK)) +#define MM_PLUGIN_BASE_SUPPORTS_TASK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MM_TYPE_PLUGIN_BASE_SUPPORTS_TASK, MMPluginBaseSupportsTaskClass)) + +typedef struct { + GObject parent; +} MMPluginBaseSupportsTask; + +typedef struct { + GObjectClass parent; +} MMPluginBaseSupportsTaskClass; + +GType mm_plugin_base_supports_task_get_type (void); + +MMPlugin *mm_plugin_base_supports_task_get_plugin (MMPluginBaseSupportsTask *task); + +GUdevDevice *mm_plugin_base_supports_task_get_port (MMPluginBaseSupportsTask *task); + +GUdevDevice *mm_plugin_base_supports_task_get_physdev (MMPluginBaseSupportsTask *task); + +const char *mm_plugin_base_supports_task_get_driver (MMPluginBaseSupportsTask *task); + +guint32 mm_plugin_base_supports_task_get_probed_capabilities (MMPluginBaseSupportsTask *task); + +void mm_plugin_base_supports_task_complete (MMPluginBaseSupportsTask *task, + guint32 level); + #define MM_TYPE_PLUGIN_BASE (mm_plugin_base_get_type ()) #define MM_PLUGIN_BASE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MM_TYPE_PLUGIN_BASE, MMPluginBase)) @@ -29,6 +76,8 @@ #define MM_IS_PLUBIN_BASE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MM_TYPE_PLUGIN_BASE)) #define MM_PLUGIN_BASE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MM_TYPE_PLUGIN_BASE, MMPluginBaseClass)) +#define MM_PLUGIN_BASE_NAME "name" + typedef struct _MMPluginBase MMPluginBase; typedef struct _MMPluginBaseClass MMPluginBaseClass; @@ -38,13 +87,38 @@ struct _MMPluginBase { struct _MMPluginBaseClass { GObjectClass parent; + + /* Mandatory subclass functions */ + MMPluginSupportsResult (*supports_port) (MMPluginBase *plugin, + MMModem *existing, + MMPluginBaseSupportsTask *task); + + MMModem *(*grab_port) (MMPluginBase *plugin, + MMModem *existing, + MMPluginBaseSupportsTask *task, + GError **error); + + /* Optional subclass functions */ + void (*cancel_task) (MMPluginBase *plugin, + MMPluginBaseSupportsTask *task); + + GUdevDevice * (*find_physical_device) (MMPluginBase *plugin, + GUdevDevice *port); + + void (*handle_probe_response) (MMPluginBase *plugin, + MMPluginBaseSupportsTask *task, + const char *command, + const char *response, + const GError *error); + + /* Signals */ + void (*probe_result) (MMPluginBase *self, + MMPluginBaseSupportsTask *task, + guint32 capabilities); }; GType mm_plugin_base_get_type (void); -gboolean mm_plugin_base_add_modem (MMPluginBase *self, - MMModem *modem); - MMModem *mm_plugin_base_find_modem (MMPluginBase *self, const char *master_device); @@ -54,5 +128,14 @@ gboolean mm_plugin_base_get_device_ids (MMPluginBase *self, guint16 *vendor, guint16 *product); +gboolean mm_plugin_base_probe_port (MMPluginBase *self, + MMPluginBaseSupportsTask *task, + GError **error); + +/* Returns TRUE if the port was previously probed, FALSE if not */ +gboolean mm_plugin_base_get_cached_port_capabilities (MMPluginBase *self, + GUdevDevice *port, + guint32 *capabilities); + #endif /* MM_PLUGIN_BASE_H */ |