#!/usr/bin/bash

. /usr/lib64/enyx-hfp/shhelpers

set -e

DEV_PATH="/sys/class/net"
bus_id=
device_id=

while getopts 'hb:d:n:c:' opt; do
    case "$opt" in
        h)
            printf "%s: [-hbd]\n" "$0"
            printf "See man page\n"
            exit 0
            ;;
        b)
            bus_id="$OPTARG"
            ;;
        d)
            device_id="$OPTARG"
            ;;
        n)
            net_dev="$OPTARG"
            ;;
    esac
done

if [ -z "$bus_id" ] && [ -z "$device_id" ]; then
    printf "netif:\n"
    find /sys/class/enyx_hfp_bus/enyx_hfp_bus*/ -name net -exec find -L {} -mindepth 1 -maxdepth 1 \; | \
        while read -r dev; do
            dev="$(basename "$dev")"
            if [ -z "$net_dev" ] || [ "$net_dev" = "$dev" ]; then
                printnode 1 "$dev"
                printnode 2 "packet_count: $(cat "$DEV_PATH/$dev/packet_count")"
                printnode 2 "backpressure_count: $(cat "$DEV_PATH/$dev/backpressure_count")"
                printnode 2 "errors: $(cat "$DEV_PATH/$dev/errors")"
                printnode 2 "fifo_errors: $(cat "$DEV_PATH/$dev/fifo_errors")"
                printnode 2 "truncated_count: $(cat "$DEV_PATH/$dev/truncated_count")"
                printnode 2 "crc_errors: $(cat "$DEV_PATH/$dev/crc_errors")"

            fi
        done
fi

if [ -n "$net_dev" ]; then
    exit 0
fi

printf 'bus:\n'
for bus in $(listdev /dev/enyx/hfp/bus)
do
    cur_bus_id=$(basename "$bus")
    cur_bus_name=$(print_bus_alias "$cur_bus_id")
    if [[ -z "$bus_id" || "$cur_bus_name" = "$bus_id" || "$cur_bus_id" = "$bus_id" ]]
    then
        printnode 1 "#${cur_bus_id} ($cur_bus_name)"

        printnode 2 'rx:'
        for rx in $(listdev "$bus/rx_buffer/by-id")
        do
            if [ -z "$device_id" ] || [ "$(basename "$rx")" = "$device_id" ]; then
                printnode 3 "#$(basename "$rx")"
                printnode 4 "$(printattr "$rx" channel_usage)"
                printnode 4 "$(printattr "$rx" packet_count)"
                printnode 4 "$(printattr "$rx" backpressure_count)"
                printnode 4 "$(printattr "$rx" fifo_errors)"
                printnode 4 "$(printattr "$rx" truncated_count)"
                printnode 4 "$(printattr "$rx" errors)"
            fi
        done
    fi
done

exit 0
