mirror of
https://gitee.com/bianbu-linux/factorytest
synced 2025-06-28 03:02:41 -04:00
182 lines
4.9 KiB
Python
182 lines
4.9 KiB
Python
from unittest import TestCase
|
|
|
|
import threading
|
|
import os
|
|
|
|
from PyQt5.QtCore import Qt
|
|
from PyQt5.QtGui import QGuiApplication
|
|
from PyQt5.QtWidgets import (
|
|
QApplication,
|
|
QMainWindow,
|
|
QFrame,
|
|
QVBoxLayout,
|
|
QGroupBox,
|
|
QLabel,
|
|
QStatusBar,
|
|
QPushButton,
|
|
QGridLayout
|
|
)
|
|
|
|
from cricket.lang import SimpleLang
|
|
|
|
result = False
|
|
|
|
class GPIOTestWindow(SimpleLang):
|
|
def __init__(self, languages) -> None:
|
|
super().__init__()
|
|
|
|
self.languages = languages
|
|
|
|
self.app = QApplication([])
|
|
|
|
self.window = QMainWindow()
|
|
self.window.setWindowTitle(self._get_text('title'))
|
|
# self.window.setWindowFlags(Qt.WindowStaysOnTopHint)
|
|
|
|
# Main content
|
|
content = QFrame(self.window)
|
|
content_layout = QVBoxLayout(content)
|
|
|
|
# Test step
|
|
box = QGroupBox(self.get_text('test_step'), content)
|
|
box_layout = QVBoxLayout(box)
|
|
|
|
label = QLabel(self._get_text('test_step'), box)
|
|
box_layout.addWidget(label)
|
|
|
|
content_layout.addWidget(box)
|
|
|
|
# Status
|
|
# self.status = QStatusBar(content)
|
|
# self.status.showMessage('Not running')
|
|
# content_layout.addWidget(self.status)
|
|
|
|
# Toolbar
|
|
toolbar = QFrame(content)
|
|
toolbar_layout = QGridLayout(toolbar)
|
|
|
|
self.pass_button = QPushButton(self.get_text('pass_button'), toolbar)
|
|
# self.pass_button.setDisabled(True)
|
|
self.pass_button.clicked.connect(self.cmd_pass)
|
|
self.pass_button.setFocus()
|
|
toolbar_layout.addWidget(self.pass_button, 0, 0)
|
|
|
|
self.fail_button = QPushButton(self.get_text('fail_button'), toolbar)
|
|
# self.fail_button.setDisabled(True)
|
|
self.fail_button.clicked.connect(self.cmd_fail)
|
|
toolbar_layout.addWidget(self.fail_button, 0, 1)
|
|
|
|
content_layout.addWidget(toolbar)
|
|
|
|
self.window.setCentralWidget(content)
|
|
|
|
# Move to center
|
|
# screen = QGuiApplication.primaryScreen()
|
|
# if screen:
|
|
# screen_geometry = screen.geometry()
|
|
# window_geometry = self.window.geometry()
|
|
# x = (screen_geometry.width() - window_geometry.width()) // 2
|
|
# y = (screen_geometry.height() - window_geometry.height()) // 2
|
|
# self.window.move(x, y)
|
|
|
|
# self.window.show()
|
|
self.window.showFullScreen()
|
|
|
|
self.app.exec_()
|
|
|
|
def _get_text(self, key):
|
|
if self.languages:
|
|
lang = self.languages.get(self.current_lang)
|
|
if lang is not None:
|
|
text = lang.get(key)
|
|
if text is not None:
|
|
return text
|
|
|
|
return 'Undefined'
|
|
|
|
def cmd_pass(self):
|
|
global result
|
|
|
|
# self.status.showMessage('Stopping...')
|
|
result = True
|
|
self.app.quit()
|
|
|
|
def cmd_fail(self):
|
|
global result
|
|
|
|
# self.status.showMessage('Stopping...')
|
|
result = False
|
|
self.app.quit()
|
|
|
|
class GPIOTest(TestCase):
|
|
LANGUAGES = {
|
|
'zh': {
|
|
'GPIOTest': 'GPIO',
|
|
'test_gpio': '开关灯',
|
|
'title': 'GPIO',
|
|
'test_step': '''1. 观察26 pin连接器灯是否全亮
|
|
'''
|
|
},
|
|
'en': {
|
|
'GPIOTest': 'GPIO',
|
|
'test_gpio': '开关灯',
|
|
'title': 'GPIO',
|
|
'test_step': '''1. 观察26 pin连接器灯是否全亮
|
|
'''
|
|
}
|
|
}
|
|
|
|
def _export(self, gpios):
|
|
export_file = '/sys/class/gpio/export'
|
|
self.assertTrue(os.path.exists(export_file))
|
|
for gpio in gpios:
|
|
try:
|
|
with open(export_file, 'w') as f:
|
|
f.write(gpio)
|
|
except:
|
|
self.fail(f'Export gpio{gpio} fail')
|
|
|
|
def _out(self, gpios, value):
|
|
for gpio in gpios:
|
|
try:
|
|
with open(f'/sys/class/gpio/gpio{gpio}/direction', 'w') as f:
|
|
f.write('out')
|
|
with open(f'/sys/class/gpio/gpio{gpio}/value', 'w') as f:
|
|
f.write(value)
|
|
except:
|
|
self.fail(f'Set gpio{gpio} fail')
|
|
|
|
def _unexport(self, gpios):
|
|
unexport_file = '/sys/class/gpio/unexport'
|
|
self.assertTrue(os.path.exists(unexport_file))
|
|
for gpio in gpios:
|
|
try:
|
|
with open(unexport_file, 'w') as f:
|
|
f.write(gpio)
|
|
except:
|
|
self.fail(f'Unexport gpio{gpio} fail')
|
|
|
|
def test_gpio(self):
|
|
global result
|
|
|
|
t = threading.Thread(target=GPIOTestWindow, args=(self.LANGUAGES,))
|
|
t.start()
|
|
|
|
# turn on
|
|
gpios = [
|
|
'47', '48', '49', '50', '51', '52',
|
|
'70', '71', '72', '73', '74',
|
|
'75', '76', '77', '78',
|
|
'90', '91', '92',
|
|
]
|
|
|
|
self._export(gpios)
|
|
self._out(gpios, '1')
|
|
|
|
t.join()
|
|
|
|
# turn off
|
|
self._out(gpios, '0')
|
|
self._unexport(gpios)
|
|
|
|
self.assertTrue(result)
|