File: qt5

package info (click to toggle)
libhinawa 4.0.2-5
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 540 kB
  • sloc: ansic: 1,901; python: 690; javascript: 5; makefile: 5
file content (116 lines) | stat: -rwxr-xr-x 2,928 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#!/usr/bin/env python3

from pathlib import Path
from sys import argv, exit
from signal import SIGINT
from struct import unpack
import common

import gi
gi.require_versions({'GLib': '2.0', 'Hinawa': '4.0'})
from gi.repository import GLib, Hinawa

# Qt5 python binding
from PyQt5.QtWidgets import (
    QApplication,
    QWidget,
    QHBoxLayout,
    QVBoxLayout,
    QToolButton,
    QGroupBox,
    QLineEdit,
    QLabel,
)


def main() -> int:
    if len(argv) < 2:
        msg = ('One argument is required for path to special file of Linux FireWire character '
               'device')
        common.print_help_with_msg(Path(__file__).name, msg)
        return 1
    cmd, literal = argv[:2]

    try:
        path = common.detect_fw_cdev(literal)
    except Exception as e:
        common.print_help_with_msg(cmd, str(e))
        return 1

    try:
        node = Hinawa.FwNode.new()
        _ = node.open(str(path), 0)
        common.print_fw_node_information(node)
    except Exception as e:
        msg = str(e)
        common.print_help_with_msg(cmd, msg)
        return 1

    with common.listen_node_event(node, path):
        app = QApplication(argv)
        sample = Sample(app, node)
        node.connect('disconnected', lambda n, a: a.quit(), app)

        sample.show()
        app.exec()

    return 0


class Sample(QWidget):
    def __init__(self, app, node):
        super(Sample, self).__init__()

        self.node = node
        self.req = Hinawa.FwReq.new()

        self.setWindowTitle("Hinawa-4.0 gir sample")

        layout = QVBoxLayout()
        self.setLayout(layout)

        top_grp = QGroupBox(self)
        top_layout = QHBoxLayout()
        top_grp.setLayout(top_layout)
        layout.addWidget(top_grp)

        buttom_grp = QGroupBox(self)
        buttom_layout = QHBoxLayout()
        buttom_grp.setLayout(buttom_layout)
        layout.addWidget(buttom_grp)

        button = QToolButton(top_grp)
        button.setText('Read')
        top_layout.addWidget(button)
        button.clicked.connect(self.run_transaction)

        close = QToolButton(top_grp)
        close.setText('Close')
        top_layout.addWidget(close)
        close.clicked.connect(app.quit)

        self.addr = QLineEdit(buttom_grp)
        self.addr.setText('0xfffff0000980')
        buttom_layout.addWidget(self.addr)

        self.value = QLabel(buttom_grp)
        self.value.setText('00000000')
        buttom_layout.addWidget(self.value)

        # handle unix signal
        GLib.unix_signal_add(GLib.PRIORITY_HIGH, SIGINT, lambda a: a.quit(), app)

    def run_transaction(self, val):
        addr = int(self.addr.text(), 16)
        frames = [0] * 4

        try:
            quadlet = common.read_quadlet(self.node, self.req, addr)
        except Exception as e:
            print(e)

        label = '0x{:08x}'.format(quadlet)
        self.value.setText(label)

if __name__ == '__main__':
    exit(main())