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