Blame view

emetteur/emetteur.cpp 4.63 KB
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 dmission 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
      }

  }