Newer
Older
pyenergenie / src / energenie / radio2.py
# radio2.py  15/04/2015  D.J.Whale
#
# New version of the radio driver, with most of the fast stuff pushed into C.
#
# This is a temporary test only, eventually when OOK and FSK are reimplemented
# and re-tested, this module will replace the radio.py/spi.py and spi_rpi.so files.

#NOTE 1: THIS IS A WORK IN PROGRESS - DO NOT USE
#It has the same interface as radio.py (intentionally)
#so that when it is finished, we can just exchange it and all should work
#as before, but faster and more reliably.

#NOTE 2: Also there is an idea to do a python wrapper, build the C code
#for an Arduino and wrap it with a simple serial message handler.
#This would then make it possible to use the Energenie Radio on a Mac/PC/Linux
#machine but by still using the same higher level Python code.
#All you would need is a different radio.py that marshalled data to and from
#the Arduino via pyserial.

LIBNAME = "radio_rpi.so"

import ctypes
from os import path
mydir = path.dirname(path.abspath(__file__))

libradio                   = ctypes.cdll.LoadLibrary(mydir + "/" + LIBNAME)
radio_init_fn              = libradio["radio_init"]
radio_reset_fn             = libradio["radio_reset"]
radio_get_ver_fn           = libradio["radio_get_ver"]
radio_modulation_fn        = libradio["radio_modulation"]
radio_transmitter_fn       = libradio["radio_transmitter"]
radio_transmit_fn          = libradio["radio_transmit"]
radio_send_payload_fn      = libradio["radio_send_payload"]
radio_receiver_fn          = libradio["radio_receiver"]
radio_isReceiveWaiting_fn  = libradio["radio_isReceiveWaiting"]
radio_receive_fn           = libradio["radio_receive"]
radio_receive_payload_fn   = libradio["radio_receive_payload"]
radio_standby_fn           = libradio["radio_standby"]
radio_finished_fn          = libradio["radio_finished"]


def init():
    """Initialise the module ready for use"""
    #extern void radio_init(void);
    radio_init_fn()


def reset():
    """Reset the radio device"""
    radio_reset_fn()


def get_ver():
    """Read out the version number of the radio"""
    pass # TODO
    ##u8=radio_get_ver_fn()
    #returns number


def modulation(fsk=None, ook=None):
    """Switch modulation, if needed"""
    #extern void radio_modulation(RADIO_MODULATION mod);
    pass # TODO
    ##radio_modulation_fn(mod)


def transmitter(fsk=None, ook=None):
    """Change into transmitter mode"""
    #extern void radio_transmitter(RADIO_MODULATION mod);
    pass # TODO
    ##radio_transmitter_fn(mod)


def transmit(payload):
    """Transmit a single payload using the present modulation scheme"""
    #extern void radio_transmit(uint8_t* payload, uint8_t len, uint8_t repeats);
    pass # TODO
    ##radio_transmit_fn(payload, len, repeats)


def send_payload(payload, repeats=None):
    """Transmit a payload in present modulation scheme, repeated"""
    #TODO: repeats is actually 'times' (repeats=1 sends 1 payload)
    #extern void radio_send_payload(uint8_t* payload, uint8_t len, uint8_t repeats);
    pass # TODO
    ##radio_send_payload_fn(payload, len, repeats)


def receiver(fsk=None, ook=None):
    """Change into receiver mode"""
    #extern void radio_receiver(RADIO_MODULATION mod);
    pass # TODO
    ##radio_receiver_fn(mod)


def isReceiveWaiting():
    """Check to see if a payload is waiting in the receive buffer"""
    #extern RADIO_RESULT radio_isReceiveWaiting(void);
    pass # TODO
    # returns bool
    ##res = radio_isReceiveWaitingFn()


def receive():
    """Put radio into receive mode and receive"""
    #extern RADIO_RESULT radio_receive(uint8_t* buf, uint8_t len)
    pass # TODO
    ##radio_receive_fn(buf, len)
    # returns list of bytes


def radio_receive_payload():
    """Receive a single payload"""
    #extern RADIO_RESULT radio_receive_payload(uint8_t* buf, uint8_t len);
    pass # TODO
    ##radio_receive_payload_fn(buf, len)
    # returns list of bytes


def radio_standby():
    """Put radio into standby mode"""
    #extern void radio_standby(void);
    radio_standby_fn()


def finished():
    """Close the library down cleanly when finished"""
    #extern void radio_finished(void);
    radio_finished_fn()


# END