diff --git a/src/energenie/drv/build_mac b/src/energenie/drv/build_mac index ba60d4a..3949287 100755 --- a/src/energenie/drv/build_mac +++ b/src/energenie/drv/build_mac @@ -46,9 +46,9 @@ ##cp spi_rpi.so .. -# radio spi .so library on Raspberry Pi -## gcc -Wall -shared -o radio_rpi.so -fPIC radio.c hrf69.c spis_rpi.c gpio_rpi.c -## nm -D radio_rpi.so -## cp radio_rpi.so .. +# radio spi .so library on Mac +gcc -Wall -shared -o radio_mac.so -fPIC radio.c hrfm69.c spis.c gpio_sim.c delay_posix.c +nm -g radio_mac.so +## cp radio_mac.so .. # END diff --git a/src/energenie/drv/radio.c b/src/energenie/drv/radio.c index 1e10bd2..af3238c 100644 --- a/src/energenie/drv/radio.c +++ b/src/energenie/drv/radio.c @@ -51,9 +51,7 @@ static void _wait_ready(void); static void _wait_txready(void); static void _config(HRF_CONFIG_REC* config, uint8_t len); -static int _payload_waiting(void); -static void _receive_payload(uint8_t* buf, uint8_t len); -static void _send_payload(uint8_t* payload, uint8_t len, uint8_t repeats); +//static int _payload_waiting(void); //----- ENERGENIE SPECIFIC CONFIGURATIONS -------------------------------------- @@ -149,14 +147,15 @@ /*---------------------------------------------------------------------------*/ // Check if there is a payload in the FIFO waiting to be processed -static int _payload_waiting(void) -{ - //TODO: First read might be superflous, but left in just in case - uint8_t irqflags1 = HRF_readreg(HRF_ADDR_IRQFLAGS1); - - uint8_t irqflags2 = HRF_readreg(HRF_ADDR_IRQFLAGS2); - return (irqflags2 & HRF_MASK_PAYLOADRDY) == HRF_MASK_PAYLOADRDY; -} +//static int _payload_waiting(void) +//{ +// //TODO: First read might be superflous, but left in just in case +// //uint8_t irqflags1 = +// HRF_readreg(HRF_ADDR_IRQFLAGS1); +// +// uint8_t irqflags2 = HRF_readreg(HRF_ADDR_IRQFLAGS2); +// return (irqflags2 & HRF_MASK_PAYLOADRDY) == HRF_MASK_PAYLOADRDY; +//} /***** PUBLIC ****************************************************************/ @@ -165,11 +164,11 @@ void radio_reset(void) { - gpio_high(RESET); - delayms(150); + gpio_high(RESET); + delayms(150); - gpio_low(RESET); - delayus(100); + gpio_low(RESET); + delayus(100); } diff --git a/src/energenie/radio2.py b/src/energenie/radio2.py index c9b8d2c..1fbb191 100644 --- a/src/energenie/radio2.py +++ b/src/energenie/radio2.py @@ -17,13 +17,14 @@ #All you would need is a different radio.py that marshalled data to and from #the Arduino via pyserial. -LIBNAME = "radio_rpi.so" +#LIBNAME = "radio_rpi.so" +LIBNAME = "radio_mac.so" # testing import ctypes from os import path mydir = path.dirname(path.abspath(__file__)) -libradio = ctypes.cdll.LoadLibrary(mydir + "/" + LIBNAME) +libradio = ctypes.cdll.LoadLibrary(mydir + "/drv/" + LIBNAME) radio_init_fn = libradio["radio_init"] radio_reset_fn = libradio["radio_reset"] radio_get_ver_fn = libradio["radio_get_ver"] @@ -31,13 +32,16 @@ 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_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"] +RADIO_MODULATION_OOK = 0 +RADIO_MODULATION_FSK = 1 + def init(): """Initialise the module ready for use""" @@ -47,74 +51,92 @@ def reset(): """Reset the radio device""" + #extern void radio_reset(void); radio_reset_fn() def get_ver(): """Read out the version number of the radio""" - pass # TODO - ##u8=radio_get_ver_fn() - #returns number + return radio_get_ver_fn() def modulation(fsk=None, ook=None): """Switch modulation, if needed""" #extern void radio_modulation(RADIO_MODULATION mod); - pass # TODO - ##radio_modulation_fn(mod) + if ook: + m = ctypes.c_int(RADIO_MODULATION_OOK) + elif fsk: + m = ctypes.c_int(RADIO_MODULATION_FSK) + radio_modulation_fn(m) def transmitter(fsk=None, ook=None): """Change into transmitter mode""" #extern void radio_transmitter(RADIO_MODULATION mod); - pass # TODO - ##radio_transmitter_fn(mod) + if ook: + m = ctypes.c_int(RADIO_MODULATION_OOK) + elif fsk: + m = ctypes.c_int(RADIO_MODULATION_FSK) + radio_transmitter_fn(m) -def transmit(payload): +def transmit(payload, times=1): """Transmit a single payload using the present modulation scheme""" + #Note, this does a mode change before and after #extern void radio_transmit(uint8_t* payload, uint8_t len, uint8_t repeats); - pass # TODO - ##radio_transmit_fn(payload, len, repeats) + framelen = len(payload) + Frame = ctypes.c_ubyte * framelen + txframe = Frame(*payload) + repeats = ctypes.c_ubyte(times) + radio_transmit_fn(txframe, framelen, repeats) -def send_payload(payload, repeats=None): +def send_payload(payload, times=1): """Transmit a payload in present modulation scheme, repeated""" - #TODO: repeats is actually 'times' (repeats=1 sends 1 payload) + #Note, this does not do a mode change before or after, + #and assumes the mode is already transmit #extern void radio_send_payload(uint8_t* payload, uint8_t len, uint8_t repeats); - pass # TODO - ##radio_send_payload_fn(payload, len, repeats) + + framelen = len(payload) + Frame = ctypes.c_ubyte * framelen + txframe = Frame(*payload) + repeats = ctypes.c_ubyte(times) + radio_send_payload_fn(txframe, framelen, 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 receiver(fsk=None, ook=None): +# """Change into receiver mode""" +# #extern void radio_receiver(RADIO_MODULATION mod); +# if ook: +# m = ctypes.c_int(RADIO_MODULATION_OOK) +# elif fsk: +# m = ctypes.c_int(RADIO_MODULATION_FSK) +# +# radio_receiver_fn(m) -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 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 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_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():