#!/bin/sh

db_file="db-$ROKU_PLATFORM.rtscript"
capture_cmd="capture"
filter_script=""
symbolic_filtering=""
capture_options=""

DFWR_AVMIPS_DEBUG_ALL="device:2,app_video:4,AVMIPS:4,Audio:4[es_size:remain:out_pts],demux:4,HEVC:4,Sound:4,video_decode:6[core:drvr:enc:fmvd:host:mem:meta:mpeg:sche:timer:util:vp9drv:vp9fw],default:4"

DFWR_AVMIPS_DEBUG_ERRS="device:2,app_video:2,AVMIPS:2,Audio:2[es_size:remain:out_pts],demux:2,HEVC:2,Sound:4,video_decode:2[core:drvr:enc:fmvd:host:mem:meta:mpeg:sche:timer:util:vp9drv:vp9fw],default:2"

while [ $1 ]; do
  case $1 in
    --all|-a)
        all_debug="on"; 
        avmips_debug="on";
        dmips_debug="on";
        shift
    ;;
    -v)
        verbose="1"; shift
    ;;
    app)
        app_debug=$2; shift; shift
    ;;
    hal)
        hal_debug=$2; shift; shift
    ;;
    mali)
        mali_debug=$2; shift; shift
    ;;
    avmips)
        avmips_debug=$2; shift; shift
    ;;
    dmips)
        dmips_debug=$2; shift; shift
    ;;
    stream)
        capture_cmd="stream"; shift
    ;;
    loop)
        capture_options="loop $2"; shift; shift
    ;;
    monitor)
        capture_cmd="monitor"; shift
        output_file="";
    ;;
    clean)
        clean_output="on"; shift
    ;;
    disable)
        capture_cmd="disable"; shift
        avmips_debug="off";
        dmips_debug="off";
    ;;
    time)
        time_cmd=$2; shift; shift
    ;;
    *)
        if [ -z $output_file ]; then
            output_file="$1";
        fi
        shift
    ;;
    esac
done

if [ ! -z $avmips_debug ]; then
    symbolic_filtering="on"
    case $avmips_debug in
        off)
            avmips_setup=$DFWR_AVMIPS_DEBUG_ERRS;
            filter_script="$filter_script
            filter reject module avmips_tx"
        ;;
        on)
            avmips_setup=$DFWR_AVMIPS_DEBUG_ALL;
            filter_script="$filter_script
            filter accept module avmips_tx"
        ;;
        only)
            filter_script="$filter_script
            filter reject all
            filter accept module avmips_tx"
        ;;
        *)
        ;;
    esac
fi

if [ ! -z $dmips_debug ]; then
    symbolic_filtering="on"
    case $dmips_debug in
        off)
            dmips_setup="2";
            filter_script="$filter_script
            filter reject module dmips_tx"
        ;;
        on)
            dmips_setup="6";
            filter_script="$filter_script
            filter accept module dmips_tx"
        ;;
        only)
            filter_script="$filter_script
            filter reject all
            filter accept module dmips_tx"
        ;;
        *)
        ;;
    esac
fi

if [ ! -z $app_debug ]; then
    symbolic_filtering="on"
    case $app_debug in
        off)
            filter_script="$filter_script
            filter reject module logapi"
        ;;
        on)
            filter_script="$filter_script
            filter accept module logapi"
        ;;
        only)
            filter_script="$filter_script
            filter reject all
            filter accept module logapi"
        ;;
        *)
        ;;
    esac
fi

if [ ! -z $hal_debug ]; then
    symbolic_filtering="on"
    case $hal_debug in
        off)
            filter_script="$filter_script
            filter reject module sigma_tx_default
            filter reject module mxl_debug"
        ;;
        on)
            filter_script="$filter_script
            filter accept module sigma_tx_default
            filter accept module mxl_debug"
        ;;
        only)
            filter_script="$filter_script
            filter reject all
            filter accept module sigma_tx_default
            filter accept module mxl_debug"
        ;;
        *)
        ;;
    esac
fi

if [ ! -z $mali_debug ]; then
    symbolic_filtering="on"
    case $mali_debug in
        off)
            filter_script="$filter_script
            filter reject module mali_tx"
        ;;
        on)
            filter_script="$filter_script
            filter accept module mali_tx"
        ;;
        only)
            filter_script="$filter_script
            filter reject all
            filter accept module mali_tx"
        ;;
        *)
        ;;
    esac
fi

if [ ! -z $verbose_hi ]; then
echo db_file = "$db_file"
echo output_file = "$output_file"
echo app_debug = "$app_debug"
echo avmips_debug = "$avmips_debug"
echo dmips_debug = "$dmips_debug"
echo avmips_setup = "$avmips_setup"
echo dmips_setup = "$dmips_setup"
echo capture_cmd = "$capture_cmd"
fi

rtlog_script="capture disable
txmask enable all"

if [ $capture_cmd = "monitor" ]; then
symbolic_filtering="on"
fi

if [ ! -z $symbolic_filtering ]; then
  if [ -f $db_file ]; then
    rtlog_script="$rtlog_script
      source $db_file"
  else
    echo ERROR: Cannot find platform db file "$db_file"
    echo the file must be present for symbolic filtering 
    exit
  fi
fi

if [ ! -z $time_cmd ]; then
rtlog_script="$rtlog_script
time $time_cmd"
fi

#if debugging all do not set filter
if [ -z $all_debug ]; then
rtlog_script="$rtlog_script
$filter_script"
fi

rtlog_script="$rtlog_script
capture enable"

if [ $capture_cmd = "capture" ]; then
rtlog_script="$rtlog_script
wait
capture disable
save $output_file"
else
rtlog_script="$rtlog_script
$capture_cmd $output_file $capture_options"
fi

#end it after ctrl-c
rtlog_script="$rtlog_script
quit"

if [ ! -z $avmips_setup ]; then
echo "echo $avmips_setup > /tmp/DEBUG_UPDATE_AVMIPS"
echo "$avmips_setup" > /tmp/DEBUG_UPDATE_AVMIPS
fi

if [ ! -z $dmips_setup ]; then
echo "echo $dmips_setup > /tmp/DEBUG_UPDATE_DISPMIPS"
echo "$dmips_setup" > /tmp/DEBUG_UPDATE_DISPMIPS
fi

if [ $capture_cmd = "disable" ]; then
rtlog_script="txmask disable all
quit"
fi

if [ ! -z $verbose ]; then
echo rtlog_script becomes
echo ==========================
echo "$rtlog_script"
echo ==========================
fi

#rtlog <<EOF | sed 's/logapi*[^]]*/[Application/;s/avmips_tx.*txt/avmips/;s/dmips_tx.*txt/dmips/;s/kernel_tx*[^]]*/[kernel/;s/kernel_printk*[^]]*/[printk/;s/mali_tx :0 error*[^]]*/MALI error /;s/mali_tx :0 debug*[^]]*/MALI debug /;s/mali_tx :0 log*[^]]*/MALI log /;s/mali_tx :0 critical*[^]]*/MALI critical /;s/mali_tx :0 warn*[^]]*/MALI warn /'

if [ $capture_cmd = "monitor" ]; then
exec rtlog <<EOF | sed 's/logapi*[^]]*/[Application/;s/avmips_tx.*txt/avmips/;s/dmips_tx.*txt/dmips/;s/bison_tx*[^]]*/[bison/;s/kernel_tx*[^]]*/[kernel/;s/kernel_printk*[^]]*/[printk/;s/mali_tx :0 error*[^]]*/MALI error /;s/mali_tx :0 debug*[^]]*/MALI debug /;s/mali_tx :0 log*[^]]*/MALI log /;s/mali_tx :0 critical*[^]]*/MALI critical /;s/mali_tx :0 warn*[^]]*/MALI warn /'
$rtlog_script
EOF
else
exec rtlog <<EOF
$rtlog_script
EOF
fi
