nymea-zigbee/libqtzigbee/zigbeeutils.cpp

95 lines
3.0 KiB
C++

#include "zigbeeutils.h"
#include <QMetaEnum>
#include <QDataStream>
QBitArray ZigbeeUtils::convertByteArrayToBitArray(const QByteArray &byteArray)
{
QBitArray bitArray(byteArray.count() * 8);
// Convert from QByteArray to QBitArray
for(int i = 0; i < byteArray.count(); ++i) {
for(int b = 0; b < 8; b++) {
bitArray.setBit(i * 8 + b, byteArray.at(i) & (1 << ( 7 - b)));
}
}
return bitArray;
}
QByteArray ZigbeeUtils::convertBitArrayToByteArray(const QBitArray &bitArray)
{
QByteArray byteArray;
for(int b = 0; b < bitArray.count(); ++b) {
byteArray[b / 8] = (byteArray.at( b / 8) | ((bitArray[b] ? 1 : 0) << (7 - ( b % 8))));
}
return byteArray;
}
QString ZigbeeUtils::convertByteToHexString(const quint8 &byte)
{
QString hexString(QStringLiteral("0x%1"));
hexString = hexString.arg(byte, 2, 16, QLatin1Char('0'));
return hexString.toStdString().data();
}
QString ZigbeeUtils::convertByteArrayToHexString(const QByteArray &byteArray)
{
QString hexString;
for (int i = 0; i < byteArray.count(); i++) {
hexString.append(convertByteToHexString((quint8)byteArray.at(i)));
if (i != byteArray.count() -1) {
hexString.append(" ");
}
}
return hexString.toStdString().data();
}
QString ZigbeeUtils::convertUint16ToHexString(const quint16 &value)
{
QByteArray data;
QDataStream stream(&data, QIODevice::WriteOnly);
stream << value;
return QString("0x%1").arg(convertByteArrayToHexString(data).remove(" ").remove("0x"));
}
QString ZigbeeUtils::convertUint64ToHexString(const quint64 &value)
{
QByteArray data;
QDataStream stream(&data, QIODevice::WriteOnly);
stream << value;
return QString("0x%1").arg(convertByteArrayToHexString(data).remove(" ").remove("0x"));
}
QString ZigbeeUtils::messageTypeToString(const Zigbee::InterfaceMessageType &type)
{
QMetaObject metaObject = Zigbee::staticMetaObject;
QMetaEnum metaEnum = metaObject.enumerator(metaObject.indexOfEnumerator("InterfaceMessageType"));
QString enumString = metaEnum.valueToKey(type);
return enumString.remove("Zigbee::InterfaceMessageType(MessageType").remove(")");
}
QString ZigbeeUtils::clusterIdToString(const Zigbee::ClusterId &clusterId)
{
QMetaObject metaObject = Zigbee::staticMetaObject;
QMetaEnum metaEnum = metaObject.enumerator(metaObject.indexOfEnumerator("ClusterId"));
QString enumString = metaEnum.valueToKey(clusterId);
return enumString.remove("Zigbee::ClusterId(ClusterId").remove(")").append(QString("(%1)").arg(ZigbeeUtils::convertUint16ToHexString(clusterId)));
}
QString ZigbeeUtils::profileIdToString(const Zigbee::ZigbeeProfile &profileId)
{
QMetaObject metaObject = Zigbee::staticMetaObject;
QMetaEnum metaEnum = metaObject.enumerator(metaObject.indexOfEnumerator("ZigbeeProfile"));
QString enumString = metaEnum.valueToKey(profileId);
return enumString.remove("Zigbee::ZigbeeProfile(ZigbeeProfile").remove(")");
}