a12ed64b
rcavalie
recepteur ok
|
1
2
3
|
////////////////////////////////////////////////////////////////////////////////
//Headers
#include "mbed.h"
|
7e1ad503
rcavalie
fichiers départ +...
|
4
5
6
|
#include "main.h"
#include "sx1276-hal.h"
#include "debug.h"
|
a12ed64b
rcavalie
recepteur ok
|
7
8
9
10
|
////////////////////////////////////////////////////////////////////////////////
#define DEBUG_MESSAGE 1
////////////////////////////////////////////////////////////////////////////////
//Modulation LoRa active
|
7e1ad503
rcavalie
fichiers départ +...
|
11
12
|
#define USE_MODEM_LORA 1
#define USE_MODEM_FSK !USE_MODEM_LORA
|
a12ed64b
rcavalie
recepteur ok
|
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
//Paramètres
#define RF_FREQUENCY 868000000 //Hz : Fréquence de travail pour UE
#define TX_OUTPUT_POWER 14 //dBm : puissance de sortie du signal
#define LORA_BANDWIDTH 1 // 0:125 kHz de BP
#define LORA_SPREADING_FACTOR 10 // [SF7..SF12] Portée du débit. grande portée inutile
#define LORA_CODINGRATE 1
#define LORA_PREAMBLE_LENGTH 8 // Same for Tx and Rx
#define LORA_SYMBOL_TIMEOUT 5 // Symbols
#define LORA_FIX_LENGTH_PAYLOAD_ON false
#define LORA_FHSS_ENABLED true
#define LORA_NB_SYMB_HOP 4
#define LORA_IQ_INVERSION_ON false
#define LORA_CRC_ENABLED true
#define RX_TIMEOUT_VALUE 3500 // in ms
#define BUFFER_SIZE 32 // Define the payload size here
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
//Variables globales
|
7e1ad503
rcavalie
fichiers départ +...
|
32
33
34
35
|
typedef enum
{
LOWPOWER = 0,
IDLE,
|
7e1ad503
rcavalie
fichiers départ +...
|
36
37
38
|
RX,
RX_TIMEOUT,
RX_ERROR,
|
7e1ad503
rcavalie
fichiers départ +...
|
39
40
|
TX,
TX_TIMEOUT,
|
7e1ad503
rcavalie
fichiers départ +...
|
41
42
43
44
45
|
CAD,
CAD_DONE
}AppStates_t;
volatile AppStates_t State = LOWPOWER;
|
7e1ad503
rcavalie
fichiers départ +...
|
46
|
static RadioEvents_t RadioEvents;
|
7e1ad503
rcavalie
fichiers départ +...
|
47
|
SX1276MB1xAS Radio( NULL );
|
7e1ad503
rcavalie
fichiers départ +...
|
48
49
|
uint16_t BufferSize = BUFFER_SIZE;
uint8_t Buffer[BUFFER_SIZE];
|
7e1ad503
rcavalie
fichiers départ +...
|
50
51
|
int16_t RssiValue = 0.0;
int8_t SnrValue = 0.0;
|
a12ed64b
rcavalie
recepteur ok
|
52
53
54
55
56
|
const uint8_t TestMsg[] = "TEST";
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
//Fonctions utiles
|
7e1ad503
rcavalie
fichiers départ +...
|
57
|
|
a12ed64b
rcavalie
recepteur ok
|
58
59
|
//Debug pour savoir si le message a été transmis
void OnTxDone( void )
|
7e1ad503
rcavalie
fichiers départ +...
|
60
|
{
|
a12ed64b
rcavalie
recepteur ok
|
61
62
63
64
65
|
Radio.SetChannel( HoppingFrequencies[0] );
Radio.Sleep( );
State = TX;
debug_if( DEBUG_MESSAGE, "Envoye\n\r" );
}
|
7e1ad503
rcavalie
fichiers départ +...
|
66
|
|
a12ed64b
rcavalie
recepteur ok
|
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
//Time out de transmission. Échec de l'envoi
void OnTxTimeout( void )
{
Radio.SetChannel(HoppingFrequencies[0]);
Radio.Sleep( );
State = TX_TIMEOUT;
debug_if( DEBUG_MESSAGE, "Echec de l'envoi\n\r" );
}
//Modification du canal d'emission
void OnFhssChangeChannel( uint8_t channelIndex )
{
Radio.SetChannel(HoppingFrequencies[channelIndex]);
debug_if(DEBUG_MESSAGE, "F%d-", channelIndex);
}
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
//Main emission
int main( void )
{
uint8_t i;
debug("\n\n\rEmetteur SX1276\n\n\r");
|
7e1ad503
rcavalie
fichiers départ +...
|
90
91
92
|
// Initialize Radio driver
RadioEvents.TxDone = OnTxDone;
|
7e1ad503
rcavalie
fichiers départ +...
|
93
|
RadioEvents.TxTimeout = OnTxTimeout;
|
a12ed64b
rcavalie
recepteur ok
|
94
95
|
RadioEvents.FhssChangeChannel = OnFhssChangeChannel;
Radio.Init(&RadioEvents);
|
7e1ad503
rcavalie
fichiers départ +...
|
96
|
|
a12ed64b
rcavalie
recepteur ok
|
97
98
|
//Véification de la connexion avec la carte
while(Radio.Read(REG_VERSION) == 0x00)
|
7e1ad503
rcavalie
fichiers départ +...
|
99
|
{
|
a12ed64b
rcavalie
recepteur ok
|
100
101
|
debug("Aucune radio detectee\n\r", NULL);
wait(1);
|
7e1ad503
rcavalie
fichiers départ +...
|
102
103
|
}
|
a12ed64b
rcavalie
recepteur ok
|
104
105
106
|
//Checking du matériel connecté
debug_if( ( DEBUG_MESSAGE & ( Radio.DetectBoardType( ) == SX1276MB1LAS ) ), "\n\rMateriel detecte : SX1276MB1LAS < \n\r" );
debug_if( ( DEBUG_MESSAGE & ( Radio.DetectBoardType( ) == SX1276MB1MAS ) ), "\n\rMateriel detecte : SX1276MB1MAS < \n\r" );
|
7e1ad503
rcavalie
fichiers départ +...
|
107
|
|
a12ed64b
rcavalie
recepteur ok
|
108
109
|
//Paramétrage du canal
Radio.SetChannel( HoppingFrequencies[0] );
|
7e1ad503
rcavalie
fichiers départ +...
|
110
|
|
a12ed64b
rcavalie
recepteur ok
|
111
|
#if USE_MODEM_LORA == 1
|
7e1ad503
rcavalie
fichiers départ +...
|
112
|
|
a12ed64b
rcavalie
recepteur ok
|
113
114
|
debug_if( LORA_FHSS_ENABLED, "\n\n\rLORA FHSS Mode\n\n\r" );
debug_if( !LORA_FHSS_ENABLED, "\n\n\rLORA Mode\n\n\r" );
|
7e1ad503
rcavalie
fichiers départ +...
|
115
|
|
a12ed64b
rcavalie
recepteur ok
|
116
117
118
119
120
121
122
123
124
|
//Configuration du modem transmission
Radio.SetTxConfig( MODEM_LORA, TX_OUTPUT_POWER, 0, LORA_BANDWIDTH,
LORA_SPREADING_FACTOR, LORA_CODINGRATE,
LORA_PREAMBLE_LENGTH, LORA_FIX_LENGTH_PAYLOAD_ON,
LORA_CRC_ENABLED, LORA_FHSS_ENABLED, LORA_NB_SYMB_HOP,
LORA_IQ_INVERSION_ON, 4000 );
#else
#error "Aucun modem defini"
#endif
|
7e1ad503
rcavalie
fichiers départ +...
|
125
|
|
a12ed64b
rcavalie
recepteur ok
|
126
|
debug_if( DEBUG_MESSAGE, "Procedure d'emission lancee\r\n" );
|
7e1ad503
rcavalie
fichiers départ +...
|
127
|
|
a12ed64b
rcavalie
recepteur ok
|
128
129
|
//Boucle d'émission infinie
while(1)
|
7e1ad503
rcavalie
fichiers départ +...
|
130
|
{
|
a12ed64b
rcavalie
recepteur ok
|
131
132
133
134
135
136
137
138
139
140
|
debug( "Tentative d'envoi :\r\n" );
strcpy((char*)Buffer, (char*)TestMsg);
// We fill the buffer with numbers for the payload
for(i=4; i<BufferSize; i++)
{
Buffer[i] = i - 4;
}
debug( "Message envoye\r\n" );
wait_ms(1000);
Radio.Send(Buffer, BufferSize);
|
7e1ad503
rcavalie
fichiers départ +...
|
141
142
|
}
}
|