Viadeo Twitter Google Bookmarks ! Facebook Digg del.icio.us MySpace Yahoo MyWeb Blinklist Netvouz Reddit Simpy StumbleUpon Bookmarks Windows Live Favorites 
Logo Documentation Qt ·  Page d'accueil  ·  Toutes les classes  ·  Toutes les fonctions  ·  Vues d'ensemble  · 

GSM Modem Integration

GSM Modem Integration

The implementation of the 3GPP AT command specifications (3GPP TS 27.007 and 3GPP TS 27.005) varies between modems, with most modems supporting proprietary AT commands for special features.

Qt Extended supports vendor-specific modem commands through the use of plug-ins to the Qt Extended Phone Modem Library. The vendor-specific code is placed in the device-specific directory devices/DEVNAME/src/plugins/phonevendors/DEVNAME, where DEVNAME is the manufacturer's name for the device.

Qt Extended will load every vendor plug-in that is installed and query each one to see which is capable of handling the modem. The QTOPIA_PHONE_VENDOR macro in custom.h can be used to force Qt Extended to load only that plug-in, ignoring any others that may be present in the system. For example, setting QTOPIA_PHONE_VENDOR to wavecom will instruct Qt Extended to load libwavecomvendor.so to provide vendor-specific AT commands. The QTOPIA_PHONE_VENDOR value can also be set as an environment variable.

3GPP TS 07.10 multiplexing can also be a source of problems when supporting a new modem. During initial testing it can be disabled by setting the QTOPIA_PHONE_MUX environment variable to no. Qt Extended will still function, but you will be unable to make GPRS calls without multiplexing support.

If your modem does not support 3GPP TS 07.10 multiplexing, or you need to modify the 3GPP TS 07.10 parameters, it will be necessary to write a multiplexer plug-in. See Writing a Multiplexer Plug-in for more information on how to do this.

Outline of a Modem Vendor Plugin

There are two sample implementations under src/plugins/phonevendors/ericsson and src/plugins/phonevendors/wavecom. This section reviews the major components of the wavecom plugin to demonstrate how to write such a plug-in.

The plug-in inherits from the QModemServicePlugin class, which provides modem detection and service creation functions.

    #include <qmodemserviceplugin.h>

    class WavecomPluginImpl : public QModemServicePlugin
    {
        Q_OBJECT
    public:
        WavecomPluginImpl();
        virtual ~WavecomPluginImpl();

        bool supports( const QString& manufacturer );
        QModemService *create( const QString& service,
                               QSerialIODeviceMultiplexer *mux,
                               QObject *parent );
    };

The plug-in declares two functions, supports() and create(), which should be implemented as follows:

    QTOPIA_EXPORT_PLUGIN( WavecomPluginImpl )

    WavecomPluginImpl::WavecomPluginImpl() {}
    WavecomPluginImpl::~WavecomPluginImpl() {}

    bool WavecomPluginImpl::supports( const QString& manufacturer )
    {
        return manufacturer.contains( "WAVECOM" );
    }

    QModemService *WavecomPluginImpl::create
        ( const QString& service, QSerialIODeviceMultiplexer *mux, QObject *parent )
    {
        return new WavecomModemService( service, mux, parent );
    }

The supports() function checks the manufacturer string from the AT+CGMI command against the expected value. The first plug-in that returns true from supports() will used.

The create() function creates a QModemService instance to handle the modem specifics. It is passed the name of the service (usually modem), the multiplexing object that is used to communicate with the modem, and the parent QObject to attach the modem service to.

The modem service implementation inherits from QModemService and should override initialize() to create the vendor-specific functionality handlers:

    #include <qmodemservice.h>
    class WavecomModemService : public QModemService
    {
        Q_OBJECT
    public:
        WavecomModemService
            ( const QString& service, QSerialIODeviceMultiplexer *mux,
              QObject *parent = 0 );
        ~WavecomModemService();

        void initialize();
        ...
    };

    WavecomModemService::WavecomModemService
            ( const QString& service, QSerialIODeviceMultiplexer *mux,
              QObject *parent )
        : QModemService( service, mux, parent )
    {
        ...
    }

    WavecomModemService::~WavecomModemService() {}

    void WavecomModemService::initialize()
    {
        // Create our Wavecom-specific overrides for the service interfaces.
        if ( !supports<QSimInfo>() )
            addInterface( new WavecomSimInfo( this ) );

        if ( !supports<QSimToolkit>() )
            addInterface( new WavecomSimToolkit( this ) );

        if ( !supports<QPhoneBook>() )
            addInterface( new WavecomPhoneBook( this ) );

        if ( !supports<QPhoneRfFunctionality>() )
            addInterface( new WavecomRfFunctionality( this ) );

        if ( !supports<QTelephonyConfiguration>() )
            addInterface( new WavecomConfiguration( this ) );

        if ( !callProvider() )
            setCallProvider( new WavecomCallProvider( this ) );

        // Call QModemService to create other interfaces that we didn't override.
        QModemService::initialize();
    }

Modem services within Qt Extended are split up into several handlers, one for each functionality area (phone calls, network registration, SMS, SIM toolkit, phone books, etc).

The QModemService class creates default implementations based on the 3GPP TS 27.007 and 3GPP TS 27.005 specifications. The modem vendor plug-in overrides those handlers that are different from the standard, and only those that are different. When QModemService::initialize() is called, the missing handlers will be created automatically.

The handlers mentioned above inherit from the following standard classes:

WavecomSimInfoQModemSimInfo
WavecomSimToolkitQModemSimToolkit
WavecomPhoneBookQModemPhoneBook
WavecomRfFunctionalityQModemRfFunctionality
WavecomConfigurationQModemConfiguration
WavecomCallProviderQModemCallProvider

A complete list of classes for accessing AT-based modems can be found on the Modem Classes page.

Modem Porting Sequence

To support a modem the following sequence may be used as a guide:

  1. Check the AT Commands that Qt Extended requires and determine which ones your modem supports.
  2. Determine the appropriate alternative AT commands suited to your modem and write the vendor-specific plug-in to issue these commands.
  3. Run Qt Extended with the QTOPIA_PHONE_MUX environment variable set to no and with the AtChat and Modem logging categories enabled.
  4. Check the error/message log for commands that are reported as being in error.
  5. Using the error log, modify the plug-in and/or the phone library so that the modem-supported AT command parameters are used.
  6. Repeat from the second step until phone calls are possible and SIM details are being read.
  7. Write a multiplexer plug-in if your modem does not support 3GPP TS 07.10, or the 07.10 parameters need to be adjusted.
  8. Enable multiplexing by setting the QTOPIA_PHONE_MUX environment variable to yes.
  9. Re-test Qt Extended, especially the GPRS features, until the multiplexer is functioning correctly. Verbose multiplexer debugging can be enabled with the Mux logging category.

Modem Emulator

Most modern phones have an external serial interface, which is used to connect to a computer for the purposes of data calls, FAX transmissions, or synchronization with desktop applications. The Modem Emulator assists with supporting such interfaces.

To enable the modem emulator to use an external serial interface, the Phone.conf file should be placed under the etc/default/Trolltech directory on the vendor system, with contents such as the following:

    [SerialDevices]
    ExternalAccessDevice=/dev/ttyS1:115200

where /dev/ttyS1 should be replaced with the name of the serial device to listen to, and 115200 should be replaced with the desired baud rate.

If this option is configured, the modem emulator will be launched automatically once the phone server has been initialized. If this option is not configured, then the modem emulator will only be launched when other components in the system request it (for example, Bluetooth hands-free kits).

Publicité

Best Of

Actualités les plus lues

Semaine
Mois
Année
  1. « Quelque chose ne va vraiment pas avec les développeurs "modernes" », un développeur à "l'ancienne" critique la multiplication des bibliothèques 103
  2. Pourquoi les programmeurs sont-ils moins payés que les gestionnaires de programmes ? Manquent-ils de pouvoir de négociation ? 56
  3. «Le projet de loi des droits du développeur» : quelles conditions doivent remplir les entreprises pour que le développeur puisse réussir ? 90
  4. Les développeurs détestent-ils les antivirus ? Un programmeur manifeste sa haine envers ces solutions de sécurité 31
  5. Qt Commercial : Digia organise un webinar gratuit le 27 mars sur la conception d'interfaces utilisateur et d'applications avec le framework 0
  6. Quelles nouveautés de C++11 Visual C++ doit-il rapidement intégrer ? Donnez-nous votre avis 10
  7. 2017 : un quinquennat pour une nouvelle version du C++ ? Possible, selon Herb Sutter 11
Page suivante
  1. Linus Torvalds : le "C++ est un langage horrible", en justifiant le choix du C pour le système de gestion de version Git 100
  2. Comment prendre en compte l'utilisateur dans vos applications ? Pour un développeur, « 90 % des utilisateurs sont des idiots » 231
  3. Quel est LE livre que tout développeur doit lire absolument ? Celui qui vous a le plus marqué et inspiré 96
  4. Apple cède et s'engage à payer des droits à Nokia, le conflit des brevets entre les deux firmes s'achève 158
  5. Nokia porte à nouveau plainte contre Apple pour violation de sept nouveaux brevets 158
  6. « Quelque chose ne va vraiment pas avec les développeurs "modernes" », un développeur à "l'ancienne" critique la multiplication des bibliothèques 103
  7. Quel est le code dont vous êtes le plus fier ? Pourquoi l'avez-vous écrit ? Et pourquoi vous a-t-il donné autant de satisfaction ? 83
Page suivante

Le Qt Developer Network au hasard

Logo

Comment fermer une application

Le Qt Developer Network est un réseau de développeurs Qt anglophone, où ils peuvent partager leur expérience sur le framework. Lire l'article.

Communauté

Ressources

Liens utiles

Contact

  • Vous souhaitez rejoindre la rédaction ou proposer un tutoriel, une traduction, une question... ? Postez dans le forum Contribuez ou contactez-nous par MP ou par email (voir en bas de page).

Qt dans le magazine

Cette page est une traduction d'une page de la documentation de Qt, écrite par Nokia Corporation and/or its subsidiary(-ies). Les éventuels problèmes résultant d'une mauvaise traduction ne sont pas imputables à Nokia. Qt qtextended4.4
Copyright © 2012 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon, vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Cette page est déposée à la SACD.
Vous avez déniché une erreur ? Un bug ? Une redirection cassée ? Ou tout autre problème, quel qu'il soit ? Ou bien vous désirez participer à ce projet de traduction ? N'hésitez pas à nous contacter ou par MP !
 
 
 
 
Partenaires

Hébergement Web