#!/usr/bin/python
#
# SPDX-License-Identifier: Apache-2.0
#
# Copyright (C) 2015, ARM Limited and contributors.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

import logging
import getopt
import sys

# Sampler configuration
config = {
    'period'  : 0,
    'samples' : 0,
}

class OdroidSampler(object):

    sysfs_base = '/sys/devices/12c60000.i2c/i2c-4/i2c-dev/i2c-4/device'
    sysfs = {
        'arm' : sysfs_base + '/4-0040',
        'kfc' : sysfs_base + '/4-0045',
    }
    power = {
        'arm' : sysfs['arm'] + '/sensor_W',
        'kfc' : sysfs['kfc'] + '/sensor_W',
    }

    def __init__(self, samples, period):
        self.energy_proxy = {
            'arm' : 0,
            'kfc' : 0,
        }
        self.samples = samples
        self.period = period

    def sample(self, device):
        f = open(self.power[device], 'r')
        power = f.readline()
        self.energy_proxy[device] += power
        f.close()

    def averagePower(self, device):
        self.energy_proxy[device] = 0
        for i in range(0, self.samples):
            sample(self, device)
            sleep(self.period / 1e6)
        return self.energy_proxy[device] / self.samples


def parseOptions():
    global config

    logging.debug('Parsing options')

    try:
        opts, args = getopt.getopt(sys.argv[1:], "p:s:", ["period=", "samples="])
    except getopt.GetoptError as err:
        # print help information and exit:
        print str(err)
        usage()
        sys.exit(2)
    output = None
    verbose = False
    for o, a in opts:
        if o == "-v":
            verbose = True
        elif o in ("-p", "--period"):
            config['period'] = int(a)
        elif o in ("-s", "--samples"):
            config['samples'] = int(a)
        else:
            assert False, "unhandled option"

    logging.info('Sampler configured for {0:d} samples, evenry {1:.3f}ms'\
        .format(config['samples'], config['period']/1000))

def main():

    parseOptions()

    sampler = OdroidSampler(config['samples'], config['period'])

    avg_power = amples.averagePower(config['device'])
    logging.info('Average power: {0:f}'.format(avg_power))

logging.basicConfig(
    format='%(asctime)-9s %(levelname)-8s: %(message)s',
    level=logging.DEBUG,
    datefmt='%I:%M:%S')

if __name__ == "__main__":
        main()