Update for v1.0.5

This commit is contained in:
James Deng 2024-06-29 09:30:51 +08:00
parent 95d4322ff9
commit a2c1d15e40
6 changed files with 137 additions and 21 deletions

View file

@ -16,6 +16,8 @@
"poweroff_button": "关机",
"camera": "摄像头",
"audio": "音频",
"others": "其他项",
"sn": "序列号",
"test_table_head": ["模块", "测试项", "结果"],
"test_step": "测试步骤",
"start_button": "开始",
@ -43,6 +45,8 @@
"poweroff_button": "Shutdown",
"camera": "Camera",
"audio": "Microphone",
"others": "Others",
"sn": "Serial number",
"test_table_head": ["Module", "Test Item", "Result"],
"test_step": "Test Step",
"start_button": "Start",

View file

@ -4,16 +4,18 @@ This is the "View" of the MVC world.
"""
from PyQt5.QtCore import Qt, QTimer, QUrl
from PyQt5.QtGui import QColor
from PyQt5.QtGui import QColor, QPixmap, QImage
from PyQt5.QtWidgets import (
QMainWindow,
QFrame,
QHBoxLayout,
QVBoxLayout,
QGridLayout,
QLabel,
QPushButton,
QGroupBox,
QTableWidget,
QAbstractItemView,
QStatusBar,
QTableWidgetItem,
QHeaderView
@ -21,6 +23,9 @@ from PyQt5.QtWidgets import (
from PyQt5.QtMultimedia import QMediaPlayer, QMediaContent
from PyQt5.QtMultimediaWidgets import QVideoWidget
import qrcode
from PIL.ImageQt import ImageQt
import os
import time
import threading
@ -184,7 +189,7 @@ class MainWindow(QMainWindow, SimpleLang):
# | auto | camera |
# | | |
# -------------------
# | manual | audio |
# | manual | others |
# | | |
# -------------------
self.tests = QFrame(self.content)
@ -200,11 +205,21 @@ class MainWindow(QMainWindow, SimpleLang):
self.media_player.setVideoOutput(video_widget)
camera_box_layout.addWidget(video_widget)
audio_box = QGroupBox(self.get_text('audio'), self.tests)
audio_box_layout = QVBoxLayout(audio_box)
# others
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(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(1, 4)
@ -234,6 +249,7 @@ class MainWindow(QMainWindow, SimpleLang):
table = QTableWidget(box)
table.setStyleSheet('QTableWidget { background-color: black; color: white; }')
table.setEditTriggers(QAbstractItemView.NoEditTriggers)
table.setColumnCount(len(columns))
table.setHorizontalHeaderLabels(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)
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
######################################################
@ -433,6 +478,12 @@ class MainWindow(QMainWindow, SimpleLang):
# update "run selected" button enabled 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):
path = '/etc/bianbu_version'
if os.path.exists(path):

13
gpu.sh Executable file
View 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

View file

@ -1,21 +1,17 @@
#!/bin/bash
test_size=100M
test_loop=1000
test_loop=1
echo "Starting memtester..."
memtester $test_size $test_loop &
while true
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
echo "memtester test completed successfully."
else
echo "memtester test encountered an error or exited prematurely."
echo none > /sys/class/leds/sys-led/trigger
fi
if [ $? -eq 0 ]; then
echo "memtester test completed successfully."
else
echo "memtester test encountered an error or exited prematurely."
echo none > /sys/class/leds/sys-led/trigger
break
fi
done

View file

@ -5,4 +5,6 @@ ROOT=$(dirname "$(readlink -f "$0")")
pushd $ROOT > /dev/null
./stress-ng.sh &
./memtester.sh &
./gpu.sh &
./vpu.sh &
popd > /dev/null

50
vpu.sh Executable file
View 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