Add support for the TI backend

This commit is contained in:
Michael Zanetti 2022-02-06 01:20:19 +01:00
parent 801f44e8d2
commit c58f38d183
8 changed files with 148 additions and 12 deletions

View File

@ -94,6 +94,21 @@ void ZigbeeAdaptersProxy::setOnlyUnused(bool onlyUnused)
}
}
QString ZigbeeAdaptersProxy::serialPortFilter() const
{
return m_serialPortFilter;
}
void ZigbeeAdaptersProxy::setSerialPortFilter(const QString &serialPortFilter)
{
if (m_serialPortFilter != serialPortFilter) {
m_serialPortFilter = serialPortFilter;
emit serialPortFilterChanged();
invalidateFilter();
emit countChanged();
}
}
ZigbeeAdapter *ZigbeeAdaptersProxy::get(int index) const
{
if (index >= 0 && index < m_manager->adapters()->rowCount()) {
@ -122,5 +137,9 @@ bool ZigbeeAdaptersProxy::filterAcceptsRow(int source_row, const QModelIndex &so
}
}
if (!m_serialPortFilter.isEmpty() && m_serialPortFilter != adapter->serialPort()) {
return false;
}
return true;
}

View File

@ -48,6 +48,7 @@ class ZigbeeAdaptersProxy : public QSortFilterProxyModel
// Optional filtering
Q_PROPERTY(ZigbeeAdaptersProxy::HardwareFilter hardwareFilter READ hardwareFilter WRITE setHardwareFilter NOTIFY hardwareFilterChanged)
Q_PROPERTY(bool onlyUnused READ onlyUnused WRITE setOnlyUnused NOTIFY onlyUnusedChanged)
Q_PROPERTY(QString serialPortFilter READ serialPortFilter WRITE setSerialPortFilter NOTIFY serialPortFilterChanged)
public:
enum HardwareFilter {
@ -68,6 +69,9 @@ public:
bool onlyUnused() const;
void setOnlyUnused(bool onlyUnused);
QString serialPortFilter() const;
void setSerialPortFilter(const QString &serialPortFilter);
Q_INVOKABLE ZigbeeAdapter* get(int index) const;
protected:
@ -78,11 +82,13 @@ signals:
void managerChanged();
void hardwareFilterChanged(HardwareFilter hardwareFilter);
void onlyUnusedChanged();
void serialPortFilterChanged();
private:
ZigbeeManager *m_manager = nullptr;
HardwareFilter m_hardwareFilter = HardwareFilterNone;
bool m_onlyUnused = false;
QString m_serialPortFilter;
};
#endif // ZIGBEEADAPTERSPROXY_H

View File

@ -91,6 +91,36 @@ void ZigbeeNodesProxy::setShowCoordinator(bool showCoordinator)
}
}
bool ZigbeeNodesProxy::showOnline() const
{
return m_showOnline;
}
void ZigbeeNodesProxy::setShowOnline(bool showOnline)
{
if (m_showOnline != showOnline) {
m_showOnline = showOnline;
emit showOnlineChanged();
invalidateFilter();
emit countChanged();
}
}
bool ZigbeeNodesProxy::showOffline() const
{
return m_showOffline;
}
void ZigbeeNodesProxy::setShowOffline(bool showOffline)
{
if (m_showOffline != showOffline) {
m_showOffline = showOffline;
emit showOfflineChanged();
invalidateFilter();
emit countChanged();
}
}
bool ZigbeeNodesProxy::newOnTop() const
{
return m_newOnTop;
@ -120,6 +150,12 @@ bool ZigbeeNodesProxy::filterAcceptsRow(int source_row, const QModelIndex &sourc
if (!m_showCoordinator && node->type() == ZigbeeNode::ZigbeeNodeTypeCoordinator) {
return false;
}
if (!m_showOnline && node->reachable()) {
return false;
}
if (!m_showOffline && !node->reachable()) {
return false;
}
return true;
}

View File

@ -42,7 +42,10 @@ class ZigbeeNodesProxy : public QSortFilterProxyModel
Q_OBJECT
Q_PROPERTY(int count READ rowCount NOTIFY countChanged)
Q_PROPERTY(ZigbeeNodes *zigbeeNodes READ zigbeeNodes WRITE setZigbeeNodes NOTIFY zigbeeNodesChanged)
Q_PROPERTY(bool showCoordinator READ showCoordinator WRITE setShowCoordinator NOTIFY showCoordinatorChanged)
Q_PROPERTY(bool showOnline READ showOnline WRITE setShowOnline NOTIFY showOnlineChanged)
Q_PROPERTY(bool showOffline READ showOffline WRITE setShowOffline NOTIFY showOfflineChanged)
Q_PROPERTY(bool newOnTop READ newOnTop WRITE setNewOnTop NOTIFY newOnTopChanged)
@ -55,6 +58,12 @@ public:
bool showCoordinator() const;
void setShowCoordinator(bool showCoordinator);
bool showOnline() const;
void setShowOnline(bool showOnline);
bool showOffline() const;
void setShowOffline(bool showOffline);
bool newOnTop() const;
void setNewOnTop(bool newOnTop);
@ -65,6 +74,8 @@ signals:
void zigbeeNodesChanged(ZigbeeNodes *zigbeeNodes);
void showCoordinatorChanged();
void newOnTopChanged();
void showOnlineChanged();
void showOfflineChanged();
protected:
bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const override;
@ -74,6 +85,8 @@ private:
ZigbeeNodes *m_zigbeeNodes = nullptr;
bool m_showCoordinator = true;
bool m_showOnline = true;
bool m_showOffline = true;
bool m_newOnTop = false;

View File

@ -271,5 +271,6 @@
<file>ui/images/sensors/co.svg</file>
<file>ui/images/sensors/gas.svg</file>
<file>ui/images/contact-group.svg</file>
<file>ui/images/zigbee/TI.svg</file>
</qresource>
</RCC>

View File

@ -45,7 +45,7 @@ Page {
Flickable {
anchors.fill: parent
contentHeight: layout.implicitHeight + (layout.isGrid ? app.margins * 2 : 0)
contentHeight: layout.implicitHeight + app.margins
clip: true
GridLayout {

View File

@ -0,0 +1,46 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="113mm"
height="113mm"
viewBox="0 0 113 113"
version="1.1"
id="svg5"
inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)"
sodipodi:docname="TI.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview7"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="0.60756173"
inkscape:cx="-86.410973"
inkscape:cy="383.50013"
inkscape:window-width="1468"
inkscape:window-height="933"
inkscape:window-x="68"
inkscape:window-y="27"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs2" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<path
style="fill:#808080;stroke-width:1;fill-opacity:1"
d="m 72.994252,110.39645 c -6.34159,-0.70539 -12.743813,-5.22391 -17.33733,-12.236248 -1.573038,-2.40136 -3.540241,-6.22708 -6.292342,-12.23706 -1.256507,-2.74393 -2.673617,-5.70906 -3.149141,-6.58919 -3.23453,-5.98664 -5.893201,-8.03385 -9.55658,-7.35866 -2.030035,0.37415 -2.991389,0.99956 -5.458884,3.55131 -2.820611,2.91693 -3.216789,3.14529 -5.459613,3.14708 -1.450524,0.001 -1.850993,-0.072 -2.782749,-0.50865 -2.081887,-0.97553 -4.142624,-3.41625 -5.611155,-6.64583 -0.329118,-0.72379 -1.09697,-2.5713 -1.706337,-4.10559 -2.235698,-5.629103 -2.574904,-6.08099 -8.9994825,-11.988999 -4.187126,-3.85046 -5.925958,-6.777279 -6.515093,-10.966291 L -2.215e-4,43.564076 H 15.552812 31.105844 V 23.043465 2.5228553 h 12.988541 12.988548 l 0.0486,10.5897647 0.0486,10.589762 3.682542,0.09413 3.682537,0.09413 -1.220831,6.730388 -1.220839,6.730382 h -3.732478 c -2.052859,0 -3.732472,0.0249 -3.732472,0.05529 0,0.03038 -0.55067,2.801225 -1.223713,6.15739 -0.673034,3.356164 -1.223704,6.126992 -1.223704,6.157397 0,0.03038 1.652004,0.05529 3.671122,0.05529 2.115745,0 3.671115,0.07357 3.671115,0.173638 0,0.0955 -0.801745,3.562519 -1.781655,7.704484 -3.474829,14.687701 -3.538006,14.992131 -3.561972,17.164671 -0.02078,1.8811 0.0093,2.04394 0.598501,3.24082 0.703745,1.42962 1.495813,2.17436 3.144893,2.95702 2.56172,1.21579 5.537262,1.51667 15.000592,1.51689 l 7.09356,1.5e-4 0.19765,-0.98838 c 0.10871,-0.54361 0.67089,-3.52992 1.2493,-6.63625 0.57841,-3.10632 1.09532,-5.82909 1.1487,-6.05057 0.0952,-0.39521 0.045,-0.40411 -2.69499,-0.47863 -3.23887,-0.0881 -3.8443,-0.2879 -4.20761,-1.38874 -0.25449,-0.7711 -0.23228,-0.92759 0.5326,-3.75433 0.42986,-1.588587 2.37166,-9.633047 3.14695,-13.037185 0.096,-0.421717 0.11289,-0.423588 3.81392,-0.423588 h 3.71746 l 1.23874,-6.212662 1.23876,-6.212663 h -3.73967 -3.73966 l 0.10162,-0.423589 c 0.1363,-0.568132 2.35296,-12.80238 2.35296,-12.98652 0,-0.07964 5.04073,-0.144792 11.20162,-0.144792 h 11.201609 l 0.004,6.824519 c 0.002,3.753484 0.085,7.38646 0.18438,8.073277 0.26153,1.807904 1.01422,4.03216 1.83089,5.410505 0.83425,1.407995 2.61269,3.407701 3.54076,3.981283 l 0.6529,0.403517 v 10.600522 10.600526 l -0.70598,0.12881 c -1.16987,0.21345 -7.15311,2.26312 -9.36606,3.20853 -4.522999,1.93228 -9.312539,4.60712 -12.193699,6.80988 -1.61558,1.23517 -4.8512,4.3971 -6.15414,6.01397 -2.91442,3.61661 -4.56534,7.34411 -4.99279,11.27291 -0.15988,1.46946 0.1891,5.427728 0.64731,7.342238 0.19826,0.82835 0.61997,2.13196 0.93713,2.89689 0.31717,0.76494 0.57666,1.45344 0.57666,1.52999 0,0.23952 -1.87063,0.95684 -3.17547,1.21768 -1.71677,0.34319 -4.00439,0.46001 -5.57873,0.2849 z M 60.945233,67.991142 c 0.134204,-0.56234 8.566159,-43.966373 8.566159,-44.094836 0,-0.05486 2.25074,-0.09979 5.00164,-0.09979 4.67542,0 4.99524,0.02149 4.90333,0.329458 -0.10844,0.363428 -8.58713,43.973248 -8.58713,44.167618 0,0.0666 -2.24664,0.12113 -4.99254,0.12113 H 60.844144 Z M 70.841942,17.25752 c 0.007,-0.182921 0.28234,-2.154024 0.61186,-4.380228 l 0.59913,-4.0476437 4.94189,-0.05019 c 4.62173,-0.04694 4.94107,-0.02865 4.92918,0.282394 -0.007,0.182921 -0.28234,2.1540237 -0.61186,4.3802277 l -0.59913,4.047644 -4.94189,0.05019 c -4.62172,0.04694 -4.94107,0.02865 -4.92918,-0.282394 z"
id="path854" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.4 KiB

View File

@ -85,10 +85,12 @@ SettingsPageBase {
Repeater {
model: zigbeeManager.networks
delegate: BigTile {
id: networkDelegate
Layout.fillWidth: true
interactive: false
property ZigbeeNetwork network: zigbeeManager.networks.get(index)
onClicked: pageStack.push(Qt.resolvedUrl("ZigbeeNetworkPage.qml"), { zigbeeManager: zigbeeManager, network: zigbeeManager.networks.get(index) })
onClicked: pageStack.push(Qt.resolvedUrl("ZigbeeNetworkPage.qml"), { zigbeeManager: zigbeeManager, network: networkDelegate.network })
header: RowLayout {
ColorIcon {
@ -152,23 +154,36 @@ SettingsPageBase {
RowLayout {
Label {
Layout.fillWidth: true
text: qsTr("MAC address:")
text: qsTr("Adapter:")
}
Label {
text: model.macAddress
Layout.fillWidth: true
text: adaptersProxy.count > 0 ? adaptersProxy.get(0).description : ""
elide: Text.ElideRight
ZigbeeAdaptersProxy {
id: adaptersProxy
manager: zigbeeManager
serialPortFilter: networkDelegate.network.serialPort
}
}
}
RowLayout {
Label {
Layout.fillWidth: true
text: qsTr("Firmware version:")
}
Label {
text: model.firmwareVersion
Label {
Layout.fillWidth: true
text: offlineNodes.count == 0
? qsTr("%n device(s)", "", networkDelegate.network.nodes.count)
: qsTr("%n device(s) (%1 disconnected)", "", networkDelegate.network.nodes.count).arg(offlineNodes.count)
ZigbeeNodesProxy {
id: offlineNodes
zigbeeNodes: networkDelegate.network.nodes
showCoordinator: false
showOnline: false
}
}
}
}
}