Testasimme 4 laitteen välisen yhteyden seuraavilla koodeilla. Yhdestä laudasta teimme masterin joka sai tiedon kolmelta slave laudalta. Slave laudassa nappia painamalla masterissa syttyy vihreä ledi. Slave lautojen ohjelman ainoana erona oli osoitteen vaihtaminen smpl_config.dat tiedostosta :
--define=THIS_DEVICE_ADDRESS="{0x93, 0x56, 0x34, 0x12}"
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" // jos halutaan lähettää viestiä vastaanottimelta, poistetaan tämän kommentointi// static void linkFrom(void); 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 { SMPL_Ioctl( IOCTL_OBJ_RADIO, IOCTL_ACT_RADIO_RXON, 0); // radion käynnistys break; } } while (1); // jos halutaan lähettää viestiä vastaanottimelta, poistetaan tämän kommentointi // linkFrom(); while (1) ; } // jos halutaan lähettää viestiä vastaanottimelta, poistetaan tämän kommentointi /* static void linkFrom() { uint8_t msg[1]; msg[0] = 1; while (1) { if (viestiVastaanotettu) { 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(); // jos halutaan lähettää viestiä vastaanottimelta, poistetaan tämän kommentointi // viestiVastaanotettu = 1; return 1; } } return 0; } |
Slave 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 linkTo(void); static linkID_t sLinkID1 = 0; static uint8_t sRxCallback(linkID_t); void main(void) // Pääohjelma alkaa tästä { BSP_Init(); // laudan alustus SMPL_Init(sRxCallback); // radion alustus BSP_TOGGLE_LED2(); // punanen ledi paalle do { if (BSP_BUTTON1()) // odotetaan etta nappia painetaan { break; } } while (1); linkTo(); // linkin muodostaminen while (1) ; } static void linkTo() // linkin muodostaminen { uint8_t msg[2]; // kun linkki onnistunut laitetaan vihrea ledi paalle BSP_TOGGLE_LED1(); // radion kaynnistys SMPL_Ioctl( IOCTL_OBJ_RADIO, IOCTL_ACT_RADIO_RXON, 0); // valitaan radiocontrol ja action // valitaan kumpi viesti lähetetään takaisin ja kommentoidaan toinen msg[1] = 1; // vastaan otin lukee sen vihreena ledinä msg[2] = 2; // vastaan otin lukee sen punasena ledinä while (1) { if(BSP_BUTTON1()) { NWK_DELAY(100); // 100ms delay SMPL_Send(SMPL_LINKID_USER_UUD, msg, sizeof(msg)); // lahetetaan viesti } } } static uint8_t sRxCallback(linkID_t port) // viestin takaisin vastaanotto { uint8_t msg[2], len; // tarkisetaan vastaan otetavan viestin ID if (port == SMPL_LINKID_USER_UUD) { // tänne voi laittaan viestin vastaanotto... } return 0; } |