Newer
Older
pyenergenie / src / energenie / drv / radio_test.c
/* radio_test.c  D.J.Whale  03/04/2016
 *
 * A simple Energenie radio exerciser
 *
 * Repeatedly transmits OOK packets to turn switch 1 on and off.
 */


/***** INCLUDES *****/

#include "system.h"
#include "radio.h"
#include "delay.h"
#include "trace.h"


/***** CONSTANTS *****/

#define REPEATS 8


/***** FORWARD FUNCTION PROTOTYPES *****/

void radio_test_ook(void);
void radio_test_fsk(void);


/*---------------------------------------------------------------------------*/

int main(int argc, char **argv)
{
    radio_test_ook();
    //TODO: radio_test_fsk();
}


/*---------------------------------------------------------------------------*/

void radio_test_ook(void)
{
    //gpio_init();
    //spi_init(&spi_config);

    radio_init();
    radio_transmitter(RADIO_MODULATION_OOK);

    /* The 'radio' module knows nothing about the Energenie (HS1527) bit encoding,
     * so this test code manually encodes the bits.
     * For the full Python stack, there is an encoder module that can generate
     * specific payloads. Repeats are done in radio_transmitter.
     * The HRF preamble feature is no longer used, it's more predictable to
     * put the preamble in the payload.
     */

    /* manual preamble, 20 bit encoded address, 4 encoded data bits */
    static uint8_t enc_1on[16] = {
        0x80, 0x00, 0x00, 0x00, // preamble pulse with timing violation gap
        // Energenie 'random' 20 bit address is 0x6C6C6
        // 0110 1100 0110 1100 0110
        // 0 encoded as 8 (1000)
        // 1 encoded as E (1110)
        0x8E, 0xE8,  0xEE, 0x88,  0x8E, 0xE8,  0xEE, 0x88,  0x8E, 0xE8,
        // Energenie 'switch 1 ON' command  F 1111  (0xEE, 0xEE)
        0xEE, 0xEE
        // Energenie 'switch 1 OFF' command E 1110  (0xEE, 0xE8)
        //0xEE, 0xE8
    };

    static uint8_t enc_1off[16] = {
        0x80, 0x00, 0x00, 0x00, // preamble pulse with timing violation gap
        // Energenie 'random' 20 bit address is 0x6C6C6
        // 0110 1100 0110 1100 0110
        // 0 encoded as 8 (1000)
        // 1 encoded as E (1110)
        0x8E, 0xE8,  0xEE, 0x88,  0x8E, 0xE8,  0xEE, 0x88,  0x8E, 0xE8,
        // Energenie 'switch 1 ON' command  F 1111  (0xEE, 0xEE)
        //0xEE, 0xEE
        // Energenie 'switch 1 OFF' command E 1110  (0xEE, 0xE8)
        0xEE, 0xE8
    };


    while (1)
    {
        /* Turn switch 1 on */
        TRACE_OUTS("Switch 1 ON\n");
        radio_transmit(enc_1on, sizeof(enc_1on), REPEATS);
        radio_standby(); //TODO put this here? move out from radio_transmit??
        delaysec(1);

        TRACE_OUTS("Switch 1 OFF\n");
        radio_transmit(enc_1off, sizeof(enc_1off), REPEATS);
        radio_standby(); //TODO put this here? move out from radio_transmit??
        delaysec(1);
    }

    radio_finished();
}


/*---------------------------------------------------------------------------*/

void radio_test_fsk(void)
{
    //TODO
}


/***** END OF FILE *****/