File indexing completed on 2024-04-21 03:59:48

0001 /*
0002     SPDX-FileCopyrightText: 2010 Lamarque Souza <lamarque@kde.org>
0003     SPDX-FileCopyrightText: 2013 Lukas Tinkl <ltinkl@redhat.com>
0004     SPDX-FileCopyrightText: 2013-2015 Jan Grulich <jgrulich@redhat.com>
0005 
0006     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0007 */
0008 
0009 #include "generictypes.h"
0010 #include "generictypes_p.h"
0011 
0012 #include <QDBusMetaType>
0013 
0014 QDBusArgument &operator<<(QDBusArgument &arg, const ModemManager::Port &port)
0015 {
0016     arg.beginStructure();
0017     arg << port.name << port.type;
0018     arg.endStructure();
0019     return arg;
0020 }
0021 
0022 const QDBusArgument &operator>>(const QDBusArgument &arg, ModemManager::Port &port)
0023 {
0024     QString temp1;
0025     uint temp2;
0026     arg.beginStructure();
0027     arg >> temp1 >> temp2;
0028     port.name = temp1;
0029     port.type = (MMModemPortType)temp2;
0030     arg.endStructure();
0031 
0032     return arg;
0033 }
0034 
0035 // Marshall the CurrentModesType data into a D-BUS argument
0036 QDBusArgument &operator<<(QDBusArgument &arg, const ModemManager::CurrentModesType &mode)
0037 {
0038     arg.beginStructure();
0039     arg << mode.allowed << mode.preferred;
0040     arg.endStructure();
0041     return arg;
0042 }
0043 
0044 // Retrieve the CurrentModesType data from the D-BUS argument
0045 const QDBusArgument &operator>>(const QDBusArgument &arg, ModemManager::CurrentModesType &mode)
0046 {
0047     uint temp1;
0048     uint temp2;
0049     arg.beginStructure();
0050     arg >> temp1 >> temp2;
0051     mode.allowed = (MMModemMode)temp1;
0052     mode.preferred = (MMModemMode)temp2;
0053     arg.endStructure();
0054 
0055     return arg;
0056 }
0057 
0058 #if MM_CHECK_VERSION(1, 2, 0)
0059 // Marshall the OmaSessionType data into a D-BUS argument
0060 QDBusArgument &operator<<(QDBusArgument &arg, const ModemManager::OmaSessionType &sessionType)
0061 {
0062     arg.beginStructure();
0063     arg << sessionType.type << sessionType.id;
0064     arg.endStructure();
0065     return arg;
0066 }
0067 
0068 // Retrieve the OmaSessionType data from the D-BUS argument
0069 const QDBusArgument &operator>>(const QDBusArgument &arg, ModemManager::OmaSessionType &sessionType)
0070 {
0071     uint type;
0072     uint id;
0073     arg.beginStructure();
0074     arg >> type >> id;
0075     sessionType.type = (MMOmaSessionType)type;
0076     sessionType.id = id;
0077     arg.endStructure();
0078 
0079     return arg;
0080 }
0081 #endif
0082 
0083 // Marshall the SignalQualityPair data into a D-BUS argument
0084 QDBusArgument &operator<<(QDBusArgument &arg, const ModemManager::SignalQualityPair &sqp)
0085 {
0086     arg.beginStructure();
0087     arg << sqp.signal << sqp.recent;
0088     arg.endStructure();
0089     return arg;
0090 }
0091 
0092 // Retrieve the SignalQualityPair data from the D-BUS argument
0093 const QDBusArgument &operator>>(const QDBusArgument &arg, ModemManager::SignalQualityPair &sqp)
0094 {
0095     arg.beginStructure();
0096     arg >> sqp.signal >> sqp.recent;
0097     arg.endStructure();
0098     return arg;
0099 }
0100 
0101 // Marshall the ValidityPair data into a D-BUS argument
0102 QDBusArgument &operator<<(QDBusArgument &arg, const ModemManager::ValidityPair &vp)
0103 {
0104     arg.beginStructure();
0105     arg << vp.validity << vp.value;
0106     arg.endStructure();
0107     return arg;
0108 }
0109 
0110 // Retrieve the ValidityPair data from the D-BUS argument
0111 const QDBusArgument &operator>>(const QDBusArgument &arg, ModemManager::ValidityPair &vp)
0112 {
0113     uint temp1;
0114     uint temp2;
0115     arg.beginStructure();
0116     arg >> temp1 >> temp2;
0117     vp.validity = (MMSmsValidityType)temp1;
0118     vp.value = temp2;
0119     arg.endStructure();
0120 
0121     return arg;
0122 }
0123 
0124 // Marshall the UnlockRetriesMap data into a D-BUS argument
0125 QDBusArgument &operator<<(QDBusArgument &argument, const ModemManager::UnlockRetriesMap &unlockRetriesMap)
0126 {
0127     argument.beginMap(QMetaType::Int, QMetaType::UInt);
0128 
0129     QMapIterator<MMModemLock, uint> i(unlockRetriesMap);
0130     while (i.hasNext()) {
0131         i.next();
0132         argument.beginMapEntry();
0133         argument << i.key() << i.value();
0134         argument.endMapEntry();
0135     }
0136     argument.endMap();
0137     return argument;
0138 }
0139 
0140 // Retrieve the UnlockRetriesMap data from the D-BUS argument
0141 const QDBusArgument &operator>>(const QDBusArgument &argument, ModemManager::UnlockRetriesMap &unlockRetriesMap)
0142 {
0143     argument.beginMap();
0144     unlockRetriesMap.clear();
0145 
0146     while (!argument.atEnd()) {
0147         int key;
0148         uint value;
0149         argument.beginMapEntry();
0150         argument >> key;
0151         argument >> value;
0152         argument.endMapEntry();
0153         unlockRetriesMap.insert((MMModemLock)key, value);
0154     }
0155 
0156     argument.endMap();
0157     return argument;
0158 }
0159 
0160 // Marshal QList<QVariantMap> into a D-BUS argument
0161 QDBusArgument &operator<<(QDBusArgument &argument, const ModemManager::QVariantMapList &variantMapList)
0162 {
0163     argument.beginArray(qMetaTypeId<QVariantMap>());
0164     for (int i = 0; i < variantMapList.length(); ++i) {
0165         argument << variantMapList[i];
0166     }
0167     argument.endArray();
0168     return argument;
0169 }
0170 
0171 // Retrieve QList<QVariantMap> from a D-BUS argument
0172 const QDBusArgument &operator>>(const QDBusArgument &argument, ModemManager::QVariantMapList &variantMapList)
0173 {
0174     argument.beginArray();
0175     variantMapList.clear();
0176 
0177     while (!argument.atEnd()) {
0178         QVariantMap element;
0179         argument >> element;
0180         variantMapList.append(element);
0181     }
0182 
0183     argument.endArray();
0184     return argument;
0185 }
0186 
0187 // Marshal LocationInformationMap into a D-BUS argument
0188 QDBusArgument &operator<<(QDBusArgument &argument, const ModemManager::LocationInformationMap &locationMap)
0189 {
0190     argument.beginMap(qMetaTypeId<uint>(), qMetaTypeId<QDBusVariant>());
0191 
0192     QMapIterator<MMModemLocationSource, QVariant> i(locationMap);
0193     while (i.hasNext()) {
0194         i.next();
0195         argument.beginMapEntry();
0196         argument << (uint)i.key() << QDBusVariant(i.value());
0197         argument.endMapEntry();
0198     }
0199     argument.endMap();
0200     return argument;
0201 }
0202 
0203 // Retrieve LocationInformationMap from a D-BUS argument
0204 const QDBusArgument &operator>>(const QDBusArgument &argument, ModemManager::LocationInformationMap &locationMap)
0205 {
0206     argument.beginMap();
0207     locationMap.clear();
0208 
0209     while (!argument.atEnd()) {
0210         uint key;
0211         QDBusVariant value;
0212         argument.beginMapEntry();
0213         argument >> key;
0214         argument >> value;
0215         argument.endMapEntry();
0216         locationMap.insert((MMModemLocationSource)key, value.variant());
0217     }
0218 
0219     argument.endMap();
0220     return argument;
0221 }
0222 
0223 void registerModemManagerTypes()
0224 {
0225     qDBusRegisterMetaType<ModemManager::MMVariantMapMap>();
0226     qDBusRegisterMetaType<ModemManager::DBUSManagerStruct>();
0227     qDBusRegisterMetaType<ModemManager::UIntList>();
0228     qDBusRegisterMetaType<ModemManager::UIntListList>();
0229     qDBusRegisterMetaType<ModemManager::Port>();
0230     qDBusRegisterMetaType<ModemManager::PortList>();
0231     qDBusRegisterMetaType<ModemManager::CurrentModesType>();
0232     qDBusRegisterMetaType<ModemManager::SignalQualityPair>();
0233     qDBusRegisterMetaType<ModemManager::SupportedModesType>();
0234     qDBusRegisterMetaType<ModemManager::UnlockRetriesMap>();
0235     qDBusRegisterMetaType<ModemManager::QVariantMapList>();
0236 #if MM_CHECK_VERSION(1, 2, 0)
0237     qDBusRegisterMetaType<ModemManager::OmaSessionType>();
0238     qDBusRegisterMetaType<ModemManager::OmaSessionTypes>();
0239 #endif
0240     qDBusRegisterMetaType<ModemManager::LocationInformationMap>();
0241     qDBusRegisterMetaType<ModemManager::ValidityPair>();
0242     qDBusRegisterMetaType<ModemManager::PortList>();
0243     qRegisterMetaType<MMModemMode>("MMModemMode");
0244     qRegisterMetaType<MMModemLock>("MMModemLock");
0245     qRegisterMetaType<MMModem3gppUssdSessionState>("MMModem3gppUssdSessionState");
0246     qRegisterMetaType<MMModemLocationSource>("MMModemLocationSource");
0247 }