#!/bin/bash
# #############################################################################

       NAME_="ledd"
       HTML_="simple LED daemon for Neo FreeRunner"
    PURPOSE_="display wlan and charging activity"
   SYNOPSIS_="$NAME_"
   REQUIRES_="standard GNU commands, /proc fs, neo freerunner"
    VERSION_="1.0.1"
       DATE_="2008-08-30"
     AUTHOR_="Sebastian Krzyszkowiak <seba.dos1@gmail.com>, Dawid Michalczyk <dm@eonworks.com> (network traffic part - bytetraf)"
        URL_="openmoko.opendevice.org"
   CATEGORY_="net"
   PLATFORM_="om-gta02"
      SHELL_="bash"
 DISTRIBUTE_="yes"

# #########################################################################################
# This program is distributed under the terms of the GNU General Public License 2 or higher

# define net interface
interface=eth0
blue=/sys/class/leds/gta02-power:blue/brightness
orange=/sys/class/leds/gta02-power:orange/brightness
bateria=/sys/devices/platform/bq27000-battery.0/power_supply/bat/status
status=$(cat $bateria)
swieci=0

  [[ $status == "Charging" ]] && echo 1 > $orange && echo 0 > $blue && dioda=$blue
( [[ $status == "Discharging" ]] || [[ $status == "Not charging" ]] ) && echo 1 > $blue && echo 0 > $orange && dioda=$orange

# local funcs
byte_count() {

    while read line;do

        if [[ $line == ${interface}:* ]];then
             [[ $1 == r ]] && { set -- ${line#*:}; echo $1; }
             [[ $1 == t ]] && { set -- ${line#*:}; echo $9; }
        fi

    done < /proc/net/dev
}

# enabling extended globbing
shopt -s extglob 

        while grep $interface < /proc/net/dev &>/dev/null ;do

	    status2=$(cat $bateria)
	    if [[ $status != $status2 ]];then
	      [[ $status2 == "Charging" ]] && echo 1 > $orange && echo $swieci > $blue && dioda=$blue
   	      ([[ $status2 == "Discharging" ]] || [[ $status2 == "Not charging" ]]) && echo 1 > $blue && echo $swieci > $orange && dioda=$orange
              status=$status2
	    fi

            received=$(byte_count r)
            transmit=$(byte_count t)
            sleep 1 # time interval for how often to grab data from /proc/net/dev
            nreceived=$(byte_count r)
            ntransmit=$(byte_count t)
            rdiff=$((( $nreceived - $received )))
            tdiff=$((( $ntransmit - $transmit )))
            rate=$((( ($rdiff + $tdiff) )))

	    [[ $swieci == 0 ]] && [[ $rate > 0 ]] && swieci=1 && echo 1 > $dioda;
            [[ $swieci > 0 ]] && [[ $rate == 0 ]] && swieci=0 && echo 0 > $dioda;
 	done

