mirror of
https://gitee.com/bianbu-linux/factorytest
synced 2025-06-28 11:06:08 -04:00
Update for v1.0.5
This commit is contained in:
parent
95d4322ff9
commit
a2c1d15e40
6 changed files with 137 additions and 21 deletions
|
@ -16,6 +16,8 @@
|
||||||
"poweroff_button": "关机",
|
"poweroff_button": "关机",
|
||||||
"camera": "摄像头",
|
"camera": "摄像头",
|
||||||
"audio": "音频",
|
"audio": "音频",
|
||||||
|
"others": "其他项",
|
||||||
|
"sn": "序列号",
|
||||||
"test_table_head": ["模块", "测试项", "结果"],
|
"test_table_head": ["模块", "测试项", "结果"],
|
||||||
"test_step": "测试步骤",
|
"test_step": "测试步骤",
|
||||||
"start_button": "开始",
|
"start_button": "开始",
|
||||||
|
@ -43,6 +45,8 @@
|
||||||
"poweroff_button": "Shutdown",
|
"poweroff_button": "Shutdown",
|
||||||
"camera": "Camera",
|
"camera": "Camera",
|
||||||
"audio": "Microphone",
|
"audio": "Microphone",
|
||||||
|
"others": "Others",
|
||||||
|
"sn": "Serial number",
|
||||||
"test_table_head": ["Module", "Test Item", "Result"],
|
"test_table_head": ["Module", "Test Item", "Result"],
|
||||||
"test_step": "Test Step",
|
"test_step": "Test Step",
|
||||||
"start_button": "Start",
|
"start_button": "Start",
|
||||||
|
|
|
@ -4,16 +4,18 @@ This is the "View" of the MVC world.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from PyQt5.QtCore import Qt, QTimer, QUrl
|
from PyQt5.QtCore import Qt, QTimer, QUrl
|
||||||
from PyQt5.QtGui import QColor
|
from PyQt5.QtGui import QColor, QPixmap, QImage
|
||||||
from PyQt5.QtWidgets import (
|
from PyQt5.QtWidgets import (
|
||||||
QMainWindow,
|
QMainWindow,
|
||||||
QFrame,
|
QFrame,
|
||||||
|
QHBoxLayout,
|
||||||
QVBoxLayout,
|
QVBoxLayout,
|
||||||
QGridLayout,
|
QGridLayout,
|
||||||
QLabel,
|
QLabel,
|
||||||
QPushButton,
|
QPushButton,
|
||||||
QGroupBox,
|
QGroupBox,
|
||||||
QTableWidget,
|
QTableWidget,
|
||||||
|
QAbstractItemView,
|
||||||
QStatusBar,
|
QStatusBar,
|
||||||
QTableWidgetItem,
|
QTableWidgetItem,
|
||||||
QHeaderView
|
QHeaderView
|
||||||
|
@ -21,6 +23,9 @@ from PyQt5.QtWidgets import (
|
||||||
from PyQt5.QtMultimedia import QMediaPlayer, QMediaContent
|
from PyQt5.QtMultimedia import QMediaPlayer, QMediaContent
|
||||||
from PyQt5.QtMultimediaWidgets import QVideoWidget
|
from PyQt5.QtMultimediaWidgets import QVideoWidget
|
||||||
|
|
||||||
|
import qrcode
|
||||||
|
from PIL.ImageQt import ImageQt
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import time
|
import time
|
||||||
import threading
|
import threading
|
||||||
|
@ -184,7 +189,7 @@ class MainWindow(QMainWindow, SimpleLang):
|
||||||
# | auto | camera |
|
# | auto | camera |
|
||||||
# | | |
|
# | | |
|
||||||
# -------------------
|
# -------------------
|
||||||
# | manual | audio |
|
# | manual | others |
|
||||||
# | | |
|
# | | |
|
||||||
# -------------------
|
# -------------------
|
||||||
self.tests = QFrame(self.content)
|
self.tests = QFrame(self.content)
|
||||||
|
@ -200,11 +205,21 @@ class MainWindow(QMainWindow, SimpleLang):
|
||||||
self.media_player.setVideoOutput(video_widget)
|
self.media_player.setVideoOutput(video_widget)
|
||||||
camera_box_layout.addWidget(video_widget)
|
camera_box_layout.addWidget(video_widget)
|
||||||
|
|
||||||
audio_box = QGroupBox(self.get_text('audio'), self.tests)
|
# others
|
||||||
audio_box_layout = QVBoxLayout(audio_box)
|
self.others_box = QGroupBox(self.get_text('others'), self.tests)
|
||||||
|
others_box_layout = QVBoxLayout(self.others_box)
|
||||||
|
|
||||||
|
# item
|
||||||
|
self.others_item = QFrame(self.others_box)
|
||||||
|
self.others_item_layout = QHBoxLayout(self.others_item)
|
||||||
|
others_box_layout.addWidget(self.others_item)
|
||||||
|
|
||||||
|
sn = self._get_sn()
|
||||||
|
if sn:
|
||||||
|
self._setup_sn_qrcode(sn)
|
||||||
|
|
||||||
self.tests_layout.addWidget(camera_box, 0, 1, 4, 1)
|
self.tests_layout.addWidget(camera_box, 0, 1, 4, 1)
|
||||||
self.tests_layout.addWidget(audio_box, 4, 1, 3, 1)
|
self.tests_layout.addWidget(self.others_box, 4, 1, 3, 1)
|
||||||
|
|
||||||
self.tests_layout.setRowStretch(0, 4)
|
self.tests_layout.setRowStretch(0, 4)
|
||||||
self.tests_layout.setRowStretch(1, 4)
|
self.tests_layout.setRowStretch(1, 4)
|
||||||
|
@ -234,6 +249,7 @@ class MainWindow(QMainWindow, SimpleLang):
|
||||||
|
|
||||||
table = QTableWidget(box)
|
table = QTableWidget(box)
|
||||||
table.setStyleSheet('QTableWidget { background-color: black; color: white; }')
|
table.setStyleSheet('QTableWidget { background-color: black; color: white; }')
|
||||||
|
table.setEditTriggers(QAbstractItemView.NoEditTriggers)
|
||||||
table.setColumnCount(len(columns))
|
table.setColumnCount(len(columns))
|
||||||
table.setHorizontalHeaderLabels(columns)
|
table.setHorizontalHeaderLabels(columns)
|
||||||
for i in range(len(columns)):
|
for i in range(len(columns)):
|
||||||
|
@ -251,6 +267,35 @@ class MainWindow(QMainWindow, SimpleLang):
|
||||||
|
|
||||||
self.tests_layout.addWidget(box, row, column, row_span, column_span)
|
self.tests_layout.addWidget(box, row, column, row_span, column_span)
|
||||||
|
|
||||||
|
def _create_qrcode(self, data):
|
||||||
|
qr = qrcode.QRCode(
|
||||||
|
version=1,
|
||||||
|
error_correction=qrcode.constants.ERROR_CORRECT_L,
|
||||||
|
box_size=8,
|
||||||
|
border=0,
|
||||||
|
)
|
||||||
|
qr.add_data(data)
|
||||||
|
qr.make(fit=True)
|
||||||
|
|
||||||
|
img = qr.make_image(fill='black', back_color='white')
|
||||||
|
qt_image = ImageQt(img).convertToFormat(QImage.Format_RGB32)
|
||||||
|
return QPixmap.fromImage(qt_image)
|
||||||
|
|
||||||
|
def _setup_sn_qrcode(self, sn):
|
||||||
|
sn_qrcode = QFrame(self.others_item)
|
||||||
|
sn_qrcode_layout = QVBoxLayout(sn_qrcode)
|
||||||
|
|
||||||
|
qr_label = QLabel(sn_qrcode)
|
||||||
|
qr_label.setAlignment(Qt.AlignCenter)
|
||||||
|
qr_label.setPixmap(self._create_qrcode(sn))
|
||||||
|
sn_qrcode_layout.addWidget(qr_label)
|
||||||
|
|
||||||
|
sn_label = QLabel(f'{self.get_text("sn")}: {sn}', sn_qrcode)
|
||||||
|
sn_qrcode_layout.addWidget(sn_label)
|
||||||
|
|
||||||
|
self.others_item_layout.addWidget(sn_qrcode)
|
||||||
|
|
||||||
|
|
||||||
######################################################
|
######################################################
|
||||||
# Handlers for setting a new project
|
# Handlers for setting a new project
|
||||||
######################################################
|
######################################################
|
||||||
|
@ -433,6 +478,12 @@ class MainWindow(QMainWindow, SimpleLang):
|
||||||
# update "run selected" button enabled state
|
# update "run selected" button enabled state
|
||||||
self.set_selected_button_state()
|
self.set_selected_button_state()
|
||||||
|
|
||||||
|
def _get_sn(self):
|
||||||
|
path = '/proc/device-tree/serial-number'
|
||||||
|
if os.path.exists(path):
|
||||||
|
with open(path, 'r') as f:
|
||||||
|
return f.readline().strip()
|
||||||
|
|
||||||
def _get_fw_version(self):
|
def _get_fw_version(self):
|
||||||
path = '/etc/bianbu_version'
|
path = '/etc/bianbu_version'
|
||||||
if os.path.exists(path):
|
if os.path.exists(path):
|
||||||
|
|
13
gpu.sh
Executable file
13
gpu.sh
Executable file
|
@ -0,0 +1,13 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
while true
|
||||||
|
do
|
||||||
|
glmark2-es2-wayland --off-screen --run-forever > /tmp/glmark2.log
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
echo "gpu test completed successfully."
|
||||||
|
else
|
||||||
|
echo "gpu test encountered an error or exited prematurely."
|
||||||
|
echo none > /sys/class/leds/sys-led/trigger
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
16
memtester.sh
16
memtester.sh
|
@ -1,21 +1,17 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
test_size=100M
|
test_size=100M
|
||||||
test_loop=1000
|
test_loop=1
|
||||||
|
|
||||||
echo "Starting memtester..."
|
while true
|
||||||
memtester $test_size $test_loop &
|
do
|
||||||
|
memtester $test_size $test_loop > /dev/null
|
||||||
|
|
||||||
# Get the process ID of the memtester instance
|
|
||||||
memtester_pid=$!
|
|
||||||
|
|
||||||
# Wait for the process to finish
|
|
||||||
wait $memtester_pid
|
|
||||||
|
|
||||||
# Check the exit status of memtester process
|
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
echo "memtester test completed successfully."
|
echo "memtester test completed successfully."
|
||||||
else
|
else
|
||||||
echo "memtester test encountered an error or exited prematurely."
|
echo "memtester test encountered an error or exited prematurely."
|
||||||
echo none > /sys/class/leds/sys-led/trigger
|
echo none > /sys/class/leds/sys-led/trigger
|
||||||
|
break
|
||||||
fi
|
fi
|
||||||
|
done
|
||||||
|
|
|
@ -5,4 +5,6 @@ ROOT=$(dirname "$(readlink -f "$0")")
|
||||||
pushd $ROOT > /dev/null
|
pushd $ROOT > /dev/null
|
||||||
./stress-ng.sh &
|
./stress-ng.sh &
|
||||||
./memtester.sh &
|
./memtester.sh &
|
||||||
|
./gpu.sh &
|
||||||
|
./vpu.sh &
|
||||||
popd > /dev/null
|
popd > /dev/null
|
||||||
|
|
50
vpu.sh
Executable file
50
vpu.sh
Executable file
|
@ -0,0 +1,50 @@
|
||||||
|
#!/bin/bash -e
|
||||||
|
|
||||||
|
log="/tmp/vpu-test.log"
|
||||||
|
h264="h264_w1920_h1080_f25_r4_p1_8bit_54f_11mb_high_cabac.264"
|
||||||
|
decode_yuv="/tmp/decode.yuv"
|
||||||
|
decode_md5="e59c9318e3f733d016ebfcdec98a95fb"
|
||||||
|
yuv="yuv420p_w1280_h720_30f.yuv"
|
||||||
|
encode_264="/tmp/encode.264"
|
||||||
|
encode_md5="55ceae7750bdc3906dd427e221c0317b"
|
||||||
|
|
||||||
|
while true
|
||||||
|
do
|
||||||
|
rm -f $log
|
||||||
|
|
||||||
|
# decode routine
|
||||||
|
echo "`date`" >> $log
|
||||||
|
rm -f $decode_yuv
|
||||||
|
mvx_decoder -f raw /opt/factorytest/res/h264_w1920_h1080_f25_r4_p1_8bit_54f_11mb_high_cabac.264 $decode_yuv >> $log
|
||||||
|
if [ ! -f $decode_yuv ]
|
||||||
|
then
|
||||||
|
echo "vpu decode encountered an error"
|
||||||
|
echo none > /sys/class/leds/sys-led/trigger
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
md5=`md5sum $decode_yuv | awk '{ print $1 }'`
|
||||||
|
if [ "$md5" != "$decode_md5" ]
|
||||||
|
then
|
||||||
|
echo "vpu decode data md5 unmatch"
|
||||||
|
echo none > /sys/class/leds/sys-led/trigger
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
|
||||||
|
# encode routine
|
||||||
|
echo "`date`" >> $log
|
||||||
|
rm -f $encode_264
|
||||||
|
mvx_encoder -f raw -w 1280 -h 720 /opt/factorytest/res/yuv420p_w1280_h720_30f.yuv $encode_264 >> $log
|
||||||
|
if [ ! -f $encode_264 ]
|
||||||
|
then
|
||||||
|
echo "vpu encode encountered an error"
|
||||||
|
echo none > /sys/class/leds/sys-led/trigger
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
md5=`md5sum $encode_264 | awk '{ print $1 }'`
|
||||||
|
if [ "$md5" != "$encode_md5" ]
|
||||||
|
then
|
||||||
|
echo "vpu encode data md5 unmatch"
|
||||||
|
echo none > /sys/class/leds/sys-led/trigger
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
Loading…
Add table
Add a link
Reference in a new issue