File indexing completed on 2024-04-21 04:00:06

0001 /*
0002     SPDX-FileCopyrightText: 2012-2013 Jan Grulich <jgrulich@redhat.com>
0003 
0004     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0005 */
0006 
0007 #include "serialsetting.h"
0008 #include "serialsetting_p.h"
0009 
0010 #include <QDebug>
0011 
0012 NetworkManager::SerialSettingPrivate::SerialSettingPrivate()
0013     : name(NM_SETTING_SERIAL_SETTING_NAME)
0014     , baud(57600)
0015     , bits(8)
0016     , parity(SerialSetting::NoParity)
0017     , stopbits(1)
0018     , sendDelay(0)
0019 {
0020 }
0021 
0022 NetworkManager::SerialSetting::SerialSetting()
0023     : Setting(Setting::Serial)
0024     , d_ptr(new SerialSettingPrivate())
0025 {
0026 }
0027 
0028 NetworkManager::SerialSetting::SerialSetting(const Ptr &other)
0029     : Setting(other)
0030     , d_ptr(new SerialSettingPrivate())
0031 {
0032     setBaud(other->baud());
0033     setBits(other->bits());
0034     setParity(other->parity());
0035     setStopbits(other->stopbits());
0036     setSendDelay(other->sendDelay());
0037 }
0038 
0039 NetworkManager::SerialSetting::~SerialSetting()
0040 {
0041     delete d_ptr;
0042 }
0043 
0044 QString NetworkManager::SerialSetting::name() const
0045 {
0046     Q_D(const SerialSetting);
0047 
0048     return d->name;
0049 }
0050 
0051 void NetworkManager::SerialSetting::setBaud(quint32 speed)
0052 {
0053     Q_D(SerialSetting);
0054 
0055     d->baud = speed;
0056 }
0057 
0058 quint32 NetworkManager::SerialSetting::baud() const
0059 {
0060     Q_D(const SerialSetting);
0061 
0062     return d->baud;
0063 }
0064 
0065 void NetworkManager::SerialSetting::setBits(quint32 byteWidgh)
0066 {
0067     Q_D(SerialSetting);
0068 
0069     d->bits = byteWidgh;
0070 }
0071 
0072 quint32 NetworkManager::SerialSetting::bits() const
0073 {
0074     Q_D(const SerialSetting);
0075 
0076     return d->bits;
0077 }
0078 
0079 void NetworkManager::SerialSetting::setParity(NetworkManager::SerialSetting::Parity paritysetting)
0080 {
0081     Q_D(SerialSetting);
0082 
0083     d->parity = paritysetting;
0084 }
0085 
0086 NetworkManager::SerialSetting::Parity NetworkManager::SerialSetting::parity() const
0087 {
0088     Q_D(const SerialSetting);
0089 
0090     return d->parity;
0091 }
0092 
0093 void NetworkManager::SerialSetting::setStopbits(quint32 number)
0094 {
0095     Q_D(SerialSetting);
0096 
0097     d->stopbits = number;
0098 }
0099 
0100 quint32 NetworkManager::SerialSetting::stopbits() const
0101 {
0102     Q_D(const SerialSetting);
0103 
0104     return d->stopbits;
0105 }
0106 
0107 void NetworkManager::SerialSetting::setSendDelay(quint64 delay)
0108 {
0109     Q_D(SerialSetting);
0110 
0111     d->sendDelay = delay;
0112 }
0113 
0114 quint64 NetworkManager::SerialSetting::sendDelay() const
0115 {
0116     Q_D(const SerialSetting);
0117 
0118     return d->sendDelay;
0119 }
0120 
0121 void NetworkManager::SerialSetting::fromMap(const QVariantMap &setting)
0122 {
0123     if (setting.contains(QLatin1String(NM_SETTING_SERIAL_BAUD))) {
0124         setBaud(setting.value(QLatin1String(NM_SETTING_SERIAL_BAUD)).toUInt());
0125     }
0126 
0127     if (setting.contains(QLatin1String(NM_SETTING_SERIAL_BITS))) {
0128         setBits(setting.value(QLatin1String(NM_SETTING_SERIAL_BITS)).toUInt());
0129     }
0130 
0131     if (setting.contains(QLatin1String(NM_SETTING_SERIAL_PARITY))) {
0132         QChar character = setting.value(QLatin1String(NM_SETTING_SERIAL_PARITY)).toChar();
0133 
0134         if (character == 'n') {
0135             setParity(NoParity);
0136         } else if (character == 'E') {
0137             setParity(EvenParity);
0138         } else if (character == 'o') {
0139             setParity(OddParity);
0140         }
0141     }
0142 
0143     if (setting.contains(QLatin1String(NM_SETTING_SERIAL_STOPBITS))) {
0144         setStopbits(setting.value(QLatin1String(NM_SETTING_SERIAL_STOPBITS)).toUInt());
0145     }
0146 
0147     if (setting.contains(QLatin1String(NM_SETTING_SERIAL_SEND_DELAY))) {
0148         setSendDelay((Setting::SecretFlagType)setting.value(QLatin1String(NM_SETTING_SERIAL_SEND_DELAY)).toULongLong());
0149     }
0150 }
0151 
0152 QVariantMap NetworkManager::SerialSetting::toMap() const
0153 {
0154     QVariantMap setting;
0155 
0156     if (baud() != 57600) {
0157         setting.insert(QLatin1String(NM_SETTING_SERIAL_BAUD), baud());
0158     }
0159 
0160     if (bits() != 8) {
0161         setting.insert(QLatin1String(NM_SETTING_SERIAL_BITS), bits());
0162     }
0163 
0164     if (parity() != NoParity) {
0165         if (parity() == EvenParity) {
0166             setting.insert(QLatin1String(NM_SETTING_SERIAL_PARITY), QChar('E'));
0167         } else if (parity() == OddParity) {
0168             setting.insert(QLatin1String(NM_SETTING_SERIAL_PARITY), QChar('o'));
0169         }
0170     }
0171 
0172     if (stopbits() != 1) {
0173         setting.insert(QLatin1String(NM_SETTING_SERIAL_STOPBITS), stopbits());
0174     }
0175 
0176     if (sendDelay()) {
0177         setting.insert(QLatin1String(NM_SETTING_SERIAL_SEND_DELAY), sendDelay());
0178     }
0179 
0180     return setting;
0181 }
0182 
0183 QDebug NetworkManager::operator<<(QDebug dbg, const NetworkManager::SerialSetting &setting)
0184 {
0185     dbg.nospace() << "type: " << setting.typeAsString(setting.type()) << '\n';
0186     dbg.nospace() << "initialized: " << !setting.isNull() << '\n';
0187 
0188     dbg.nospace() << NM_SETTING_SERIAL_BAUD << ": " << setting.baud() << '\n';
0189     dbg.nospace() << NM_SETTING_SERIAL_BITS << ": " << setting.bits() << '\n';
0190     dbg.nospace() << NM_SETTING_SERIAL_PARITY << ": " << setting.parity() << '\n';
0191     dbg.nospace() << NM_SETTING_SERIAL_STOPBITS << ": " << setting.stopbits() << '\n';
0192     dbg.nospace() << NM_SETTING_SERIAL_SEND_DELAY << ": " << setting.sendDelay() << '\n';
0193 
0194     return dbg.maybeSpace();
0195 }