#!/bin/bash
set -eo pipefail

help=$'Generate PNOR UBI image from a PNOR SquashFS Tarball

Generates a UBI, Unsorted Block Images, PNOR image from a PNOR SquashFS Tarball.
The PNOR SquashFS Tarball is generated from the generate-tar script.

usage: generate-ubi [OPTION] <PNOR SquashFS Tarball>...

Options:
   -f, --file <file>      Specify destination file. Defaults to
                          $(pwd)/<PNOR Tarball FILE, removing .squashfs.tar>.ubi.mtd
                          (For example, "generate-ubi my.pnor.squashfs.tar"
                          would generate $(pwd)/my.pnor.ubi.mtd output.)
   -s, --size <MiB>       Specify the size of the PNOR UBI image in MiBs.
                          Defaults to 128.
   -h, --help             Display this help text and exit.
'
# 128MiB is the default image size
image_size="128"

while [[ $# -gt 0 ]]; do
  key="$1"
  case $key in
    -f|--file)
      outfile="$2"
      shift 2
      ;;
    -s|--size)
      image_size="$2"
      shift 2
      ;;
    -h|--help)
      echo "$help"
      exit
      ;;
    *)
      tarball="$1"
      shift 1
      ;;
  esac
done

if [ ! -f "${tarball}" ]; then
  echo "Please enter a PNOR SquashFS Tarball."
  echo "To generate PNOR SquashFS Tarball see generate-tar"
  echo "$help"
  exit 1
fi

if [[ -z $outfile ]]; then
    # Remove .squashfs.tar from end if present and add .ubi.mtd
    outfile=$(pwd)/${tarball%".squashfs.tar"}.ubi.mtd
else
  if [[ $outfile != /* ]]; then
    outfile=$(pwd)/$outfile
  fi
fi

echo "Generating PNOR UBI image."

squashfs_file_name="pnor.xz.squashfs"
manifest_file_name="MANIFEST"

# Scratch directory for untarring and config file
scratch_dir=$(mktemp -d)

# Make sure scratch directory always gets cleaned up
trap '{ rm -r ${scratch_dir}; }' EXIT

squashfs_file=${scratch_dir}/${squashfs_file_name}
manifest_file=${scratch_dir}/${manifest_file_name}
# Untar tarball
tar -xvf "${tarball}" -C "${scratch_dir}" ${squashfs_file_name} ${manifest_file_name}

# All valid PNOR SquashFS Tarballs have a file named "pnor.xz.squashfs"
if [ ! -f "${squashfs_file}" ]; then
  echo "No \"${squashfs_file_name}\" file in the tarball!"
  exit 1
fi

# Need the manifest file for calculating the version id
if [ ! -f "${manifest_file}" ]; then
  echo "No \"${manifest_file_name}\" file in the tarball!"
  exit 1
fi

# Flash page size in bytes
FLASH_PAGE_SIZE="1"
# kibibyte(KiB)
FLASH_PEB_SIZE="64"

# Convert image size from MiB to KiB
image_size=$((image_size * 1024))

# Create UBI volume
add_volume()
{
  config_file=$1
  vol_id=$2
  vol_type=$3
  vol_name=$4
  image=$5
  vol_size=$6

{
  echo \["$vol_name"\]
  echo mode=ubi
} >> "$config_file"
  if [ -n "$image" ]; then
    echo image="$image" >> "$config_file"
  fi
{
  echo vol_type="$vol_type"
  echo vol_name="$vol_name"
  echo vol_id="$vol_id"
} >> "$config_file"
  if [ -n "$vol_size" ]; then
    echo vol_size="$vol_size" >> "$config_file"
  fi
}

# Create an image with all 1's
mk_nor_image()
{
  image_dst=$1
  image_size_kb=$2
  dd if=/dev/zero bs=1k count="$image_size_kb" | tr '\000' '\377' > "$image_dst"
}

# Used to temporary hold the UBI image
tmpfile=$(mktemp "${scratch_dir}"/ubinized.XXXXXX)

# Configuration file used to create UBI image
config_file=${scratch_dir}/ubinize-PNOR.cfg

# The version is listed in the MANIFEST file as "version=v1.99.10-19"
# Use the version to calculate the version id, a unique 8 hexadecimal digit id
version_id=$(sed -ne '/version=/ {s/version=//;p}' "${manifest_file}" | head -n1 | \
  tr -d '\n' | sha512sum | cut -b 1-8)

add_volume "$config_file" 0 static pnor-ro-"${version_id}" "${squashfs_file}"
add_volume "$config_file" 1 dynamic pnor-prsv "" 2MiB
add_volume "$config_file" 2 dynamic pnor-rw-"${version_id}" "" 16MiB

# Build the UBI image
ubinize -p ${FLASH_PEB_SIZE}KiB -m ${FLASH_PAGE_SIZE} -o "${tmpfile}" "$config_file"
mk_nor_image "${outfile}" "${image_size}"
dd bs=1k conv=notrunc seek=0 if="${tmpfile}" of="${outfile}"

echo "PNOR UBI image at ${outfile}"
