Demo réception RFM69 (module rf69) Ce programme attend la réception de messages, les affichent sur la liaison série et retourne un accusé réception si demandé.
Il est possible de modifier la puissance d'emission et l'activation du mode promiscuité.
Voilà un exemple d'affichage :
Demo Gateway RFM69 **
----------- Menu -----------
[space]: start/stop Rx
p: toggle promiscous
w: change power level
Frf: 868000 kHz - Power Level: 0 dBm - Promiscuous: 1
Own address: [10]
Receiving data on network 1...
R[10]<[1] < 'Hello 0' > Ack [RSSI = -28]
R[10]<[1] < 'Hello 1' > Ack [RSSI = -28]
....
wPower level [-18,13]? 3
Frf: 868000 kHz - Power Level: 3 dBm - Promiscuous: 1
Own address: [10]
Receiving data on network 1...
R[10]<[1] < 'Hello 10' > Ack [RSSI = -28]
#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 10 // Adresse de notre module
#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, level, net;
bool bPrintStat = true;
bool bRxOn = true;
bool bPromiscuous = true;
printf ("\n\n** Demo Gateway RFM69 **\n"
"----------- Menu -----------\n"
"[space]: start/stop Rx\n"
" p: toggle promiscous\n"
" w: change power level\n");
ret =
iRf69Open (rf, eRf69Band868Mhz, MYNODE_ID, NET_ID);
signal (SIGINT, vSigIntHandler);
printf ("Press Ctrl+C to abort ...\n");
for (;;) {
c = getchar();
switch (c) {
case ' ':
bRxOn = ! bRxOn;
printf ("\nRx %s\n", bRxOn ? "On" : "Off");
break;
case 'p':
bPromiscuous = ! bPromiscuous;
printf ("\nPromiscuous %s\n", bPromiscuous ? "On" : "Off");
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"
"Receiving data on network %d...\n",
frf / 1000, level, bPromiscuous, src , net);
bPrintStat = false;
}
if (bRxOn) {
if (ret == true) {
}
if (ret == true) {
printf (" > Ack");
}
printf (" [RSSI = %d]\n", rssi);
}
}
}
return 0;
}