Il est possible de modifier la puissance d'emission, l'adresse du noeud destinataire, l'activation du mode promiscuité.
Voilà un exemple d'affichage :
RFM69 Ping Demo **
----------- Menu -----------
[space]: start/stop Tx
p: toggle promiscous
t: change target node
w: change power level
Frf: 868000 kHz - Power Level: 0 dBm - Promiscuous: 1
Own address: [1]
Transmitting data on network 1 to node [10]...
T[1]>[10] 'Hello 0' > Ack [RSSI = -28]
T[1]>[10] 'Hello 1' > Ack [RSSI = -28]
....
tTarget ID (255 for broadcast)? 255
Frf: 868000 kHz - Power Level: 0 dBm - Promiscuous: 1
Own address: [1]
Transmitting data on network 1 to node [255]...
T[1]>[255] 'Hello 16' >
#include <sysio/delay.h>
#include <sysio/rf69.h>
#include <sysio/term.h>
#include <assert.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#define DIO0_IRQ 6 // BCM25 on Raspberry Pi
#define MYNODE_ID 1 // Adresse de notre module
#define TARGET_ID 10 // Adresse du module destinataire de nos messages
#define NET_ID 1 // Numéro de notre réseau
static void
vSigIntHandler (int sig) {
printf ("\neverything was closed.\nHave a nice day !\n");
exit (EXIT_SUCCESS);
}
int
main (void) {
int ret, c;
int src, target, level, net;
bool bPrintStat = true;
bool bTxOn = true;
bool bPromiscuous = true;
printf ("\n\n** RFM69 Ping Demo **\n"
"----------- Menu -----------\n"
"[space]: start/stop Tx\n"
" p: toggle promiscous\n"
" t: change target node\n"
" w: change power level\n");
ret =
iRf69Open (rf, eRf69Band868Mhz, MYNODE_ID, NET_ID);
target = TARGET_ID;
signal (SIGINT, vSigIntHandler);
printf ("Press Ctrl+C to abort ...\n");
for (;;) {
c = getchar();
switch (c) {
case ' ':
bTxOn = ! bTxOn;
printf ("\nTx %s\n", bTxOn ? "On" : "Off");
break;
case 'p':
bPromiscuous = ! bPromiscuous;
printf ("\nPromiscuous %s\n", bPromiscuous ? "On" : "Off");
break;
case 't':
do {
scanf ("%d", &ret);
}
while ( (ret < 1) || (ret > 255));
target = ret;
bPrintStat = true;
break;
case 'w':
do {
printf ("\nPower level [-18,13]? ");
scanf ("%d", &ret);
}
while ( (ret < -18) || (ret > 13));
level = ret + 18;
bPrintStat = true;
break;
default:
break;
}
}
if (bPrintStat) {
if (ret) {
level = level / 2 + 5;
}
else {
level -= 18;
}
printf ("\nFrf: %lu kHz - Power Level: %d dBm - Promiscuous: %d\n"
"Own address: [%d]\n"
"Transmitting data on network %d to node [%d]...\n",
frf / 1000, level, bPromiscuous, src, net, target);
bPrintStat = false;
}
if (bTxOn) {
if (ret == true) {
static int count;
char msg[20];
snprintf (msg, sizeof (msg), "Hello %d", count++);
printf ("\nT[%d]>[%d] '%s' > ", src, target, msg);
int rssi = 0;
if (ret == true) {
}
switch (ret) {
case false:
printf ("Timeout");
break;
case true:
printf ("Ack");
break;
default:
printf ("Error %d", ret);
break;
}
printf (" [RSSI = %d]", rssi);
}
}
}
if (ret == true) {
}
if (ret == true) {
printf (" > Ack");
}
printf (" [RSSI = %d]\n", rssi);
}
}
return 0;
}