#!/bin/bash

help=$'Generate SquashFS image Script

Generates a SquashFS image from the PNOR image

usage: generate-squashfs [OPTION] <PNOR FILE>...

Options:
   -f, --file <file>      Specify destination file. Defaults to
                          `pwd`/pnor.xz.squashfs if unspecified.
   -h, --help             Display this help text and exit.
'

let ffs_entry_size=128
let miscflags_offset=112
outfile=`pwd`"/pnor.xz.squashfs"
declare -a partitions=()
tocfile="pnor.toc"

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

if [ ! -f "${pnorfile}" ]; then
  echo "Please enter a valid PNOR file."
  echo "$help"
  exit 1
fi

scratch_dir=`mktemp -d` || exit 1

echo "Parsing PNOR TOC..."

# Needed to get the READONLY and PRESERVED flags
# TODO: Get READONLY and PRESERVED flags from pflash instead.
pflash_cmd="pflash --partition=part --read=${scratch_dir}/part -F ${pnorfile}"
${pflash_cmd} || exit 1

{
  while read line; do
    if [[ $line == "ID="* ]]; then
        # This line looks like
        # "ID=05 MVPD 000d9000..00169000 (actual=00090000) [ECC]"
        read -r -a fields <<< "$line"

        # Get any flags attached to end (e.g. [ECC])
        flags=""
        for flag in "${fields[@]:4}"
        do
          flags+=",${flag//[\[\]]/}"
        done

        id=${fields[0]##*=}
        offset=$((${ffs_entry_size} * 10#${id} + ${miscflags_offset}))
        miscflags=0x$(xxd -p -l  0x1 -seek ${offset} ${scratch_dir}/part)
        if ((miscflags & 0x80)); then
          flags+=",PRESERVED"
        fi
        if ((miscflags & 0x40)); then
          flags+=",READONLY"
        fi

        # Need the partition ID, name, start location, end location, and flags
        echo  "partition${id}=${fields[1]},${fields[2]/../,}${flags}"

        # Save the partition name
        partitions+=(${fields[1]})
    fi
  done < <(pflash --info -F ${pnorfile} | grep -v -i "part")
} > ${scratch_dir}/${tocfile}

for partition in "${partitions[@]}"; do
  echo "Reading ${partition}..."
  pflash_cmd="pflash --partition=${partition} --read=${scratch_dir}/${partition}
    -F ${pnorfile}"
  ${pflash_cmd} || exit 1
done

echo "Creating SquashFS image..."

cd "${scratch_dir}"
squashfs_cmd="mksquashfs ${tocfile} ${partitions[*]} ${outfile}"
${squashfs_cmd} || exit 1

echo "SquashFS Image at ${outfile}"
rm -r "${scratch_dir}"
