File indexing completed on 2024-04-28 15:32:56

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