Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Testasimme 4 laitteen välisen yhteyden seuraavilla koodeilla. Yhdestä laudasta teimme masterin joka sai tiedon kolmelta slave laudalta. Slave lautassa nappia painamalla masterissa syttyi punanen/vihreä ledi.

Masterin koodi:

Code Block

 #include "bsp.h"
#include "mrfi.h"
#include "nwk_types.h"
#include "nwk_api.h"
#include "bsp_leds.h"
#include "bsp_buttons.h"
#include "nwk.h"

static void linkFrom(void);

void toggleLED(uint8_t);

static          uint8_t  viestiLaskuri = 0;
static volatile uint8_t  viestiVastaanotettu = 0;

static uint8_t sRxCallback(linkID_t);

void main (void)
{
    BSP_Init(); // laudan alustus
    SMPL_Init(sRxCallback); // radion ja SimpliTi alustus
    BSP_TOGGLE_LED1(); // vihreä ledi päälle
    do {
        if (BSP_BUTTON1()) // odotetaan että nappia painetaan
        {
            break;
        }
    } while (1);
    linkFrom(); // linkin muodostaminen
    while (1) ;
}

static void linkFrom()
{
    uint8_t     msg[2];

    SMPL_Ioctl( IOCTL_OBJ_RADIO, IOCTL_ACT_RADIO_RXON, 0); // radion käynnistys
   
    msg[0] = 1;
    
    while (1)
    {
        if (viestiVastaanotettu)
        {
            msg[1] = ++viestiLaskuri;
            SMPL_Send(SMPL_LINKID_USER_UUD, msg, sizeof(msg));
            viestiVastaanotettu = 0;
        }
    }
}


static uint8_t sRxCallback(linkID_t port) // viestin takaisin vastaanotto
{
    uint8_t msg[2], len;

    if (port == SMPL_LINKID_USER_UUD) // tarkisetaan vastaan otetavan viestin ID
    {
        if (SMPL_SUCCESS == SMPL_Receive(SMPL_LINKID_USER_UUD, msg, &len))
        {
            uint16_t led=msg[0];
            if (led == 2) BSP_TOGGLE_LED2();
            
            uint16_t led1=msg[1];
            if (led1 == 1) BSP_TOGGLE_LED1();

            viestiVastaanotettu = 1;
            
            return 1;
        }
    }
  return 0;
}