1 /*!
2  * \file      main.c
3  *
4  * \brief     Tx Continuous Wave implementation
5  *
6  * \copyright Revised BSD License, see section \ref LICENSE.
7  *
8  * \code
9  *                ______                              _
10  *               / _____)             _              | |
11  *              ( (____  _____ ____ _| |_ _____  ____| |__
12  *               \____ \| ___ |    (_   _) ___ |/ ___)  _ \
13  *               _____) ) ____| | | || |_| ____( (___| | | |
14  *              (______/|_____)_|_|_| \__)_____)\____)_| |_|
15  *              (C)2013-2017 Semtech
16  *
17  * \endcode
18  *
19  * \author    Miguel Luis ( Semtech )
20  *
21  * \author    Gregory Cristian ( Semtech )
22  */
23 #include "board.h"
24 #include "gpio.h"
25 #include "timer.h"
26 #include "radio.h"
27 
28 #if defined( REGION_AS923 )
29 
30 #define RF_FREQUENCY                                923000000 // Hz
31 #define TX_OUTPUT_POWER                             14        // 14 dBm
32 
33 #elif defined( REGION_AU915 )
34 
35 #define RF_FREQUENCY                                915000000 // Hz
36 #define TX_OUTPUT_POWER                             14        // 14 dBm
37 
38 #elif defined( REGION_CN470 )
39 
40 #define RF_FREQUENCY                                470000000 // Hz
41 #define TX_OUTPUT_POWER                             20        // 20 dBm
42 
43 #elif defined( REGION_CN779 )
44 
45 #define RF_FREQUENCY                                779000000 // Hz
46 #define TX_OUTPUT_POWER                             14        // 14 dBm
47 
48 #elif defined( REGION_EU433 )
49 
50 #define RF_FREQUENCY                                433000000 // Hz
51 #define TX_OUTPUT_POWER                             20        // 20 dBm
52 
53 #elif defined( REGION_EU868 )
54 
55 #define RF_FREQUENCY                                868000000 // Hz
56 #define TX_OUTPUT_POWER                             14        // 14 dBm
57 
58 #elif defined( REGION_KR920 )
59 
60 #define RF_FREQUENCY                                920000000 // Hz
61 #define TX_OUTPUT_POWER                             14        // 14 dBm
62 
63 #elif defined( REGION_IN865 )
64 
65 #define RF_FREQUENCY                                865000000 // Hz
66 #define TX_OUTPUT_POWER                             14        // 14 dBm
67 
68 #elif defined( REGION_US915 )
69 
70 #define RF_FREQUENCY                                915000000 // Hz
71 #define TX_OUTPUT_POWER                             14        // 14 dBm
72 
73 #elif defined( REGION_RU864 )
74 
75 #define RF_FREQUENCY                                864000000 // Hz
76 #define TX_OUTPUT_POWER                             14        // 14 dBm
77 
78 #else
79 
80     #error "Please define a frequency band in the compiler options."
81 
82 #endif
83 #define TX_TIMEOUT                                  65535     // seconds (MAX value)
84 
85 static TimerEvent_t Led1Timer;
86 volatile bool Led1TimerEvent = false;
87 
88 static TimerEvent_t Led2Timer;
89 volatile bool Led2TimerEvent = false;
90 
91 static TimerEvent_t Led3Timer;
92 volatile bool Led3TimerEvent = false;
93 
94 /*!
95  * Radio events function pointer
96  */
97 static RadioEvents_t RadioEvents;
98 
99 /*!
100  * LED GPIO pins objects
101  */
102 extern Gpio_t Led1;
103 extern Gpio_t Led2;
104 extern Gpio_t Led3;
105 
106 /*!
107  * \brief Function executed on Led 1 Timeout event
108  */
OnLed1TimerEvent(void * context)109 void OnLed1TimerEvent( void* context )
110 {
111     Led1TimerEvent = true;
112 }
113 
114 /*!
115  * \brief Function executed on Led 2 Timeout event
116  */
OnLed2TimerEvent(void * context)117 void OnLed2TimerEvent( void* context )
118 {
119     Led2TimerEvent = true;
120 }
121 
122 /*!
123  * \brief Function executed on Led 3 Timeout event
124  */
OnLed3TimerEvent(void * context)125 void OnLed3TimerEvent( void* context )
126 {
127     Led3TimerEvent = true;
128 }
129 
130 /*!
131  * \brief Function executed on Radio Tx Timeout event
132  */
OnRadioTxTimeout(void)133 void OnRadioTxTimeout( void )
134 {
135     // Restarts continuous wave transmission when timeout expires
136     Radio.SetTxContinuousWave( RF_FREQUENCY, TX_OUTPUT_POWER, TX_TIMEOUT );
137 }
138 
139 /**
140  * Main application entry point.
141  */
main(void)142 int main( void )
143 {
144     // Target board initialization
145     BoardInitMcu( );
146     BoardInitPeriph( );
147 
148     TimerInit( &Led1Timer, OnLed1TimerEvent );
149     TimerSetValue( &Led1Timer, 90 );
150 
151     TimerInit( &Led2Timer, OnLed2TimerEvent );
152     TimerSetValue( &Led2Timer, 90 );
153 
154     TimerInit( &Led3Timer, OnLed3TimerEvent );
155     TimerSetValue( &Led3Timer, 90 );
156 
157     // Switch LED 1 ON
158     GpioWrite( &Led1, 0 );
159     TimerStart( &Led1Timer );
160 
161     // Radio initialization
162     RadioEvents.TxTimeout = OnRadioTxTimeout;
163     Radio.Init( &RadioEvents );
164 
165     Radio.SetTxContinuousWave( RF_FREQUENCY, TX_OUTPUT_POWER, TX_TIMEOUT );
166 
167     // Blink LEDs just to show some activity
168     while( 1 )
169     {
170         if( Led1TimerEvent == true )
171         {
172             Led1TimerEvent = false;
173 
174             // Switch LED 1 OFF
175             GpioWrite( &Led1, 1 );
176             // Switch LED 2 ON
177             GpioWrite( &Led2, 0 );
178             TimerStart( &Led2Timer );
179         }
180 
181         if( Led2TimerEvent == true )
182         {
183             Led2TimerEvent = false;
184 
185             // Switch LED 2 OFF
186             GpioWrite( &Led2, 1 );
187             // Switch LED 3 ON
188             GpioWrite( &Led3, 0 );
189             TimerStart( &Led3Timer );
190         }
191 
192         if( Led3TimerEvent == true )
193         {
194             Led3TimerEvent = false;
195 
196             // Switch LED 3 OFF
197             GpioWrite( &Led3, 1 );
198             // Switch LED 1 ON
199             GpioWrite( &Led1, 0 );
200             TimerStart( &Led1Timer );
201         }
202     }
203 }
204