#!/bin/sh
# command to test USB storage device
#

# 2^10 is 1K.
ONE_K_LEN=10
ONE_K=1024
WC_FLASH_TEST_DEV_NAME=test
TMP_FILE=/tmp/flash_test_pattern
result=
test_failed=

while IFS=" :" read dev size erasesize name; do
  name=${name#\"}
  name=${name%\"}
  if [ "$name" = "$WC_FLASH_TEST_DEV_NAME" ]; then
    result=${dev#mtd}
    total_size=$size
    # erase_size is saved value for later use. erasesize is /proc/mtd name
    erase_size=$erasesize
    # fall through in case there's a subsequent device with same name
  fi
done < /proc/mtd

if [ -n "$result" ]; then
  total_size=$(echo $((0x$total_size)))
  erase_size=$(echo $((0x$erase_size)))
  file_len_in_k=$((total_size / ONE_K))
  num_blocks=$((total_size / erase_size))
  echo -n "test flash /dev/mtd$result size $total_size ($file_len_in_k K) "
  echo "erasesize $erase_size block count $num_blocks"
else
  echo "cannot find test flash dev"
  exit 1
fi

# pattern in '\x5A' '\xA5' '\x55' '\xAA' '\x01' '\xF0' '\x0F' '\xFF'
# \x00 doesn't work. So I used \x01 instead
for pattern in '90' '165' '85' '170' '1' '240' '15' '255'
do
  echo "test with pattern" $pattern
  s=$(printf "\\$(printf '%03o' $pattern)")
  # setup 1K test pattern
  for i in $(seq 1 $ONE_K_LEN); do
    s=$s$s;
  done
  rm -f $TMP_FILE
  for i in $(seq 1 $file_len_in_k); do
    echo -n $s >> $TMP_FILE;
  done
  flash_erase /dev/mtd$result 0 $num_blocks
  cp $TMP_FILE /dev/mtd$result && cmp $TMP_FILE /dev/mtd$result || test_failed=1
  if [ -n "$test_failed" ]; then
    echo "pattern test failed"
    exit 1
  fi
  echo "pattern verified ... passed"
done
echo "flash test passed"
