#!/usr/bin/env python 

from xmlrpc.server import SimpleXMLRPCServer
import logging
import time

def ledInit():
    logging.info("LED init !")
    time.sleep(0.1)
    return True

def ledRelease():
    logging.info("LED close !")
    return True

def ledOn(id, current=None):
    logging.info("LED on ! id=" + str(id))
    time.sleep(0.1)
    return True

def ledOff():
    logging.info("LED off !")
    time.sleep(0.1)
    return True

def sample(channel):
    logging.info("sample() called for channel %d." % channel)
    result = []
    t, c, n, mean, variance = 40., channel, 1000, 20., 2.
    result.append(['%dT' % channel, t])
    result.append(['%dC' % channel, c])
    result.append(['%dN' % channel, n])
    result.append(['%dM' % channel, mean])
    result.append(['%dV' % channel, variance])
    logging.info("sampling channel: %d done." % channel)
    logging.info("sample(%d) returns:" % channel + str(result))
    logging.info("sample(%d) done." % channel)
    return result


def sampleAndDump(led):
    logging.info("sample_and_dump() called.")
    result = []
    channel = {
        'ILED': led, 
        'IPHD': led + 33, 
        'T24':  58, 
        'TBE':  59, 
        'VREF': 61 }
    
    for p in ["ILED", "IPHD", "T24", "TBE", "VREF"]:
        logging.info("sample_and_dump() sampling channel: %d (%s)" % (channel[p], p))
        t, c, n, mean, variance = 42., channel[p], 1000, 24., 2.
        result.append([p + 'T', t])
        result.append([p + 'C', c])
        result.append([p + 'N', n])
        result.append([p + 'M', mean])
        result.append([p + 'V', variance])
        
    logging.info("sample_and_dump() sampling channel: %d (%s) done." % (channel[p], p))
    logging.info("sample_and_dump(%d) returns:" % led + str(result))
    logging.info("sample_and_dump(%d) done." % led)
    return result


ledServer = SimpleXMLRPCServer(("127.0.0.1", 8710), allow_none=True)

ledServer.register_function(ledInit, "init")
ledServer.register_function(ledRelease, "quit")

ledServer.register_function(ledOn, "led_on")
ledServer.register_function(ledOff, "led_off")
ledServer.register_function(sample, "sample")
ledServer.register_function(sampleAndDump, "sample_and_dump")
def ledServer_dir():
    return ["init", "quit", "led_on", "led_off", "sample", "sample_and_dump"]
ledServer.__dir__ = ledServer_dir()

logging.basicConfig(level=logging.INFO)

ledServer.serve_forever()
