#! /bin/bash # Copyright (C) 2014 Samsung Electronics # Lukasz Majewski # # UMS operation test script # # SPDX-License-Identifier: GPL-2.0+ clear COLOUR_RED="\33[31m" COLOUR_GREEN="\33[32m" COLOUR_ORANGE="\33[33m" COLOUR_DEFAULT="\33[0m" DIR=./ SUFFIX=img RCV_DIR=rcv/ LOG_FILE=./log/log-`date +%d-%m-%Y_%H-%M-%S` cd `dirname $0` ../dfu/dfu_gadget_test_init.sh 33M 97M cleanup () { rm -rf $RCV_DIR $MNT_DIR } control_c() # run if user hits control-c { echo -en "\n*** CTRL+C ***\n" umount $MNT_DIR cleanup exit 0 } # trap keyboard interrupt (control-c) trap control_c SIGINT die () { printf " $COLOUR_RED FAILED $COLOUR_DEFAULT \n" cleanup exit 1 } calculate_md5sum () { MD5SUM=`md5sum $1` MD5SUM=`echo $MD5SUM | cut -d ' ' -f1` echo "md5sum:"$MD5SUM } ums_test_file () { printf "$COLOUR_GREEN========================================================================================= $COLOUR_DEFAULT\n" printf "File:$COLOUR_GREEN %s $COLOUR_DEFAULT\n" $1 mount /dev/$MEM_DEV $MNT_DIR if [ -f $MNT_DIR/dat_* ]; then rm $MNT_DIR/dat_* fi cp ./$1 $MNT_DIR while true; do umount $MNT_DIR > /dev/null 2>&1 if [ $? -eq 0 ]; then break fi printf "$COLOUR_ORANGE\tSleeping to wait for umount...$COLOUR_DEFAULT\n" sleep 1 done echo -n "TX: " calculate_md5sum $1 MD5_TX=$MD5SUM sleep 1 N_FILE=$DIR$RCV_DIR${1:2}"_rcv" mount /dev/$MEM_DEV $MNT_DIR cp $MNT_DIR/$1 $N_FILE || die $? rm $MNT_DIR/$1 umount $MNT_DIR echo -n "RX: " calculate_md5sum $N_FILE MD5_RX=$MD5SUM if [ "$MD5_TX" == "$MD5_RX" ]; then printf " $COLOUR_GREEN -------> OK $COLOUR_DEFAULT \n" else printf " $COLOUR_RED -------> FAILED $COLOUR_DEFAULT \n" cleanup exit 1 fi } printf "$COLOUR_GREEN========================================================================================= $COLOUR_DEFAULT\n" echo "U-boot UMS test program" if [ $EUID -ne 0 ]; then echo "You must be root to do this." 1>&2 exit 100 fi if [ $# -lt 3 ]; then echo "Wrong number of arguments" echo "Example:" echo "sudo ./ums_gadget_test.sh VID PID PART_NUM [-f ext4] [test_file]" die fi MNT_DIR="/mnt/tmp-ums-test" VID=$1; shift PID=$1; shift PART_NUM=$1; shift if [ "$1" == "-f" ]; then shift FS_TO_FORMAT=$1; shift fi TEST_FILE=$1 for f in `find /sys -type f -name idProduct`; do d=`dirname ${f}` if [ `cat ${d}/idVendor` != "${VID}" ]; then continue fi if [ `cat ${d}/idProduct` != "${PID}" ]; then continue fi USB_DEV=${d} break done if [ -z "${USB_DEV}" ]; then echo "Connect target" echo "e.g. ums 0 mmc 0" exit 1 fi MEM_DEV=`find $USB_DEV -type d -name "sd[a-z]" | awk -F/ '{print $(NF)}' -` mkdir -p $RCV_DIR if [ ! -d $MNT_DIR ]; then mkdir -p $MNT_DIR fi if [ "$PART_NUM" == "-" ]; then PART_NUM="" fi MEM_DEV=$MEM_DEV$PART_NUM if [ -n "$FS_TO_FORMAT" ]; then echo -n "Formatting partition /dev/$MEM_DEV to $FS_TO_FORMAT" mkfs -t $FS_TO_FORMAT /dev/$MEM_DEV > /dev/null 2>&1 if [ $? -eq 0 ]; then printf " $COLOUR_GREEN DONE $COLOUR_DEFAULT \n" else die fi fi printf "Mount: /dev/$MEM_DEV \n" if [ -n "$TEST_FILE" ]; then if [ ! -e $TEST_FILE ]; then echo "No file: $TEST_FILE" die fi ums_test_file $TEST_FILE else for file in $DIR*.$SUFFIX do ums_test_file $file done fi cleanup exit 0