| ModemManager. |
| The problem ModemManager tries to solve is to provide a unified high level API |
| for communicating with (mobile broadband) modems. While the basic commands are |
| standardized, the more advanced operations (like signal quality monitoring |
| while connected) varies a lot. |
| |
| Using. |
| ModemManager is a system daemon and is not meant to be used directly from |
| the command line. However, since it provides DBus API, it is possible to use |
| 'dbus-send' command to control it from the terminal. There's an example |
| program (tests/mm-test.py) that demonstrates the basic API usage. |
| |
| Implementation. |
| ModemManager is a DBus system bus activated service (meaning it's started |
| automatically when a request arrives). It is written in C. The devices are |
| queried from udev and automatically updated based on hardware events. There's |
| a GInterface (MMModem) that defines the modem interface and any device specific |
| implementation must implement it. There are two generic MMModem implementations |
| to support the basic operations (one for GSM, one for CDMA,) which are common |
| for all cards. |
| |
| Plugins. |
| Plugins are loaded on startup, and must implement the MMPlugin interface. It |
| consists of a couple of methods which tell the daemon whether the plugin |
| supports a port and to create custom MMModem implementations. It most likely |
| makes sense to derive custom modem implementations from one of the generic |
| classes and just add (or override) operations which are not standard. There's a |
| fully working plugin in the plugins/ directory for Huawei cards that can be |
| used as an example for writing new plugins. Writing new plugins is highly |
| encouraged! |
| |
| API. |
| The API is open for changes, so if you're writing a plugin and need to add or |
| change some public method, feel free to suggest it! |