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;
}
|