66
77import java .util .ArrayList ;
88import java .util .List ;
9+ import java .util .Random ;
910
1011import org .junit .AfterClass ;
1112import org .junit .Before ;
@@ -27,14 +28,9 @@ public static void init() {
2728
2829 String freqStr = System .getProperty ("freq" );
2930 if (freqStr == null ) {
30- freqStr = "868200000 " ;
31+ freqStr = "434200000 " ;
3132 }
3233 frequency = Long .valueOf (freqStr );
33- OpMode req = new OpMode (sx127x_mode_t .SX127X_MODE_SLEEP , sx127x_modulation_t .SX127X_MODULATION_LORA );
34- rx .sx127x_set_opmod (req );
35- rx .sx127x_set_frequency (frequency );
36- tx .sx127x_set_opmod (req );
37- tx .sx127x_set_frequency (frequency );
3834 }
3935
4036 @ Test
@@ -100,7 +96,7 @@ public void testRegisters() {
10096 assertEquals (txHeader , rx .sx127x_lora_tx_get_explicit_header ());
10197
10298 rx .sx127x_lora_set_ppm_offset (4000 );
103- assertEquals (3655 , rx .sx127x_lora_get_ppm_offset ());
99+ assertEquals (3656 , rx .sx127x_lora_get_ppm_offset ());
104100
105101 gain = 0 ;
106102 rx .sx127x_rx_set_lna_gain (gain );
@@ -113,8 +109,6 @@ public void testRegisters() {
113109
114110 @ Test
115111 public void testReset () {
116- rx .sx127x_set_opmod (new OpMode (sx127x_mode_t .SX127X_MODE_SLEEP , sx127x_modulation_t .SX127X_MODULATION_LORA ));
117- rx .sx127x_set_frequency (frequency );
118112 assertEquals (frequency , rx .sx127x_get_frequency ());
119113 rx .reset ();
120114 rx .sx127x_set_opmod (new OpMode (sx127x_mode_t .SX127X_MODE_SLEEP , sx127x_modulation_t .SX127X_MODULATION_LORA ));
@@ -131,28 +125,38 @@ public void testReset() {
131125
132126 @ Test
133127 public void testExplicitHeader () {
134- rx . sx127x_set_opmod ( new OpMode ( sx127x_mode_t . SX127X_MODE_SLEEP , sx127x_modulation_t . SX127X_MODULATION_LORA ) );
128+ String message = createRandom ( 2 );
135129 rx .sx127x_lora_set_implicit_header (null );
136130 rx .sx127x_lora_reset_fifo ();
137131 rx .sx127x_set_opmod (new OpMode (sx127x_mode_t .SX127X_MODE_RX_CONT , sx127x_modulation_t .SX127X_MODULATION_LORA ));
138132
139- sendExplicitMessage ();
133+ sx127x_tx_header_t txHeader = new sx127x_tx_header_t (true , sx127x_cr_t .SX127X_CR_4_5 );
134+ tx .sx127x_lora_tx_set_explicit_header (txHeader );
135+ // it looks like some boards don't have RFO pin connected to the antenna
136+ tx .sx127x_tx_set_pa_config (new PaConfig (sx127x_pa_pin_t .SX127X_PA_PIN_BOOST , 4 ));
137+ tx .sx127x_lora_reset_fifo ();
138+ tx .sx127x_lora_tx_set_for_transmission (message );
139+ tx .tx (sx127x_modulation_t .SX127X_MODULATION_LORA );
140+
141+ LoraTest .assertFrames (rx , message );
140142
141- LoraTest .assertFrames (rx , "CAFE" );
143+ // set is actually set, not append
144+ tx .sx127x_lora_tx_set_for_transmission (message );
145+ tx .sx127x_lora_tx_set_for_transmission (message );
146+ tx .tx (sx127x_modulation_t .SX127X_MODULATION_LORA );
147+
148+ LoraTest .assertFrames (rx , message );
142149 }
143150
144151 @ Test
145152 public void testImplicitHeader () {
146- OpMode req = new OpMode (sx127x_mode_t .SX127X_MODE_SLEEP , sx127x_modulation_t .SX127X_MODULATION_LORA );
147- String message = "CAFE" ;
153+ String message = createRandom (2 );
148154 sx127x_implicit_header_t header = new sx127x_implicit_header_t (message .length () / 2 , true , sx127x_cr_t .SX127X_CR_4_5 );
149155
150- rx .sx127x_set_opmod (req );
151156 rx .sx127x_lora_set_implicit_header (header );
152157 rx .sx127x_lora_reset_fifo ();
153158 rx .sx127x_set_opmod (new OpMode (sx127x_mode_t .SX127X_MODE_RX_CONT , sx127x_modulation_t .SX127X_MODULATION_LORA ));
154159
155- tx .sx127x_set_opmod (req );
156160 tx .sx127x_lora_set_implicit_header (header );
157161 // it looks like some boards don't have RFO pin connected to the antenna
158162 tx .sx127x_tx_set_pa_config (new PaConfig (sx127x_pa_pin_t .SX127X_PA_PIN_BOOST , 4 ));
@@ -169,47 +173,56 @@ public void testFhss() {
169173 frequencies [0 ] = frequency + 500000 ;
170174 frequencies [1 ] = frequency + 1000000 ;
171175 frequencies [2 ] = frequency ;
172- OpMode req = new OpMode (sx127x_mode_t .SX127X_MODE_SLEEP , sx127x_modulation_t .SX127X_MODULATION_LORA );
173-
174- rx .sx127x_set_opmod (req );
175- rx .sx127x_lora_set_implicit_header (null );
176+ String message = createRandom (2 );
176177 rx .sx127x_lora_reset_fifo ();
177178 rx .sx127x_lora_set_frequency_hopping (new FhssConfig (5 , frequencies ));
178179 rx .sx127x_set_opmod (new OpMode (sx127x_mode_t .SX127X_MODE_RX_CONT , sx127x_modulation_t .SX127X_MODULATION_LORA ));
179180
180- tx .sx127x_set_opmod (req );
181- tx .sx127x_lora_set_implicit_header (null );
182181 // it looks like some boards don't have RFO pin connected to the antenna
183182 tx .sx127x_tx_set_pa_config (new PaConfig (sx127x_pa_pin_t .SX127X_PA_PIN_BOOST , 4 ));
184183 tx .sx127x_lora_reset_fifo ();
184+ sx127x_tx_header_t txHeader = new sx127x_tx_header_t (true , sx127x_cr_t .SX127X_CR_4_5 );
185+ tx .sx127x_lora_tx_set_explicit_header (txHeader );
185186 tx .sx127x_lora_set_frequency_hopping (new FhssConfig (5 , frequencies ));
186- tx .sx127x_lora_tx_set_for_transmission ("CAFE" );
187+ tx .sx127x_lora_tx_set_for_transmission (message );
187188 tx .tx (sx127x_modulation_t .SX127X_MODULATION_LORA );
188189
189- LoraTest .assertFrames (rx , "CAFE" );
190+ LoraTest .assertFrames (rx , message );
190191 }
191192
192193 @ Test
193194 public void testCad () {
194- rx . sx127x_set_opmod ( new OpMode ( sx127x_mode_t . SX127X_MODE_SLEEP , sx127x_modulation_t . SX127X_MODULATION_LORA ) );
195+ String message = createRandom ( 2 );
195196 rx .sx127x_lora_set_implicit_header (null );
196197 rx .sx127x_lora_reset_fifo ();
197198 rx .sx127x_set_opmod (new OpMode (sx127x_mode_t .SX127X_MODE_CAD , sx127x_modulation_t .SX127X_MODULATION_LORA ));
198199
199- sendExplicitMessage ();
200+ sx127x_tx_header_t txHeader = new sx127x_tx_header_t (true , sx127x_cr_t .SX127X_CR_4_5 );
201+ tx .sx127x_lora_tx_set_explicit_header (txHeader );
202+ // it looks like some boards don't have RFO pin connected to the antenna
203+ tx .sx127x_tx_set_pa_config (new PaConfig (sx127x_pa_pin_t .SX127X_PA_PIN_BOOST , 4 ));
204+ tx .sx127x_lora_reset_fifo ();
205+ tx .sx127x_lora_tx_set_for_transmission (message );
206+ tx .tx (sx127x_modulation_t .SX127X_MODULATION_LORA );
200207
201- LoraTest .assertFrames (rx , "CAFE" );
208+ LoraTest .assertFrames (rx , message );
202209 }
203210
204211 @ Test
205212 public void testDeepSleep () {
206- rx . sx127x_set_opmod ( new OpMode ( sx127x_mode_t . SX127X_MODE_SLEEP , sx127x_modulation_t . SX127X_MODULATION_LORA ) );
213+ String message = createRandom ( 2 );
207214 rx .sx127x_lora_set_implicit_header (null );
208215 rx .sx127x_lora_reset_fifo ();
209216 rx .sx127x_set_opmod (new OpMode (sx127x_mode_t .SX127X_MODE_RX_CONT , sx127x_modulation_t .SX127X_MODULATION_LORA ));
210217 rx .deepSleep ();
211218
212- sendExplicitMessage ();
219+ sx127x_tx_header_t txHeader = new sx127x_tx_header_t (true , sx127x_cr_t .SX127X_CR_4_5 );
220+ tx .sx127x_lora_tx_set_explicit_header (txHeader );
221+ // it looks like some boards don't have RFO pin connected to the antenna
222+ tx .sx127x_tx_set_pa_config (new PaConfig (sx127x_pa_pin_t .SX127X_PA_PIN_BOOST , 4 ));
223+ tx .sx127x_lora_reset_fifo ();
224+ tx .sx127x_lora_tx_set_for_transmission (message );
225+ tx .tx (sx127x_modulation_t .SX127X_MODULATION_LORA );
213226
214227 // rx need some time to wake up
215228 int attempts = 3 ;
@@ -228,7 +241,7 @@ public void testDeepSleep() {
228241 }
229242 }
230243
231- LoraTest .assertFrames (rx , "CAFE" );
244+ LoraTest .assertFrames (rx , message );
232245 }
233246
234247 @ Before
@@ -237,6 +250,12 @@ public void start() {
237250 rx .resetUart ();
238251 tx .reset ();
239252 tx .resetUart ();
253+ // make sure communication is happening on the configured frequency
254+ OpMode req = new OpMode (sx127x_mode_t .SX127X_MODE_SLEEP , sx127x_modulation_t .SX127X_MODULATION_LORA );
255+ rx .sx127x_set_opmod (req );
256+ rx .sx127x_set_frequency (frequency );
257+ tx .sx127x_set_opmod (req );
258+ tx .sx127x_set_frequency (frequency );
240259 }
241260
242261 @ AfterClass
@@ -249,17 +268,6 @@ public static void destroy() {
249268 }
250269 }
251270
252- private static void sendExplicitMessage () {
253- tx .sx127x_set_opmod (new OpMode (sx127x_mode_t .SX127X_MODE_SLEEP , sx127x_modulation_t .SX127X_MODULATION_LORA ));
254- sx127x_tx_header_t txHeader = new sx127x_tx_header_t (true , sx127x_cr_t .SX127X_CR_4_5 );
255- tx .sx127x_lora_tx_set_explicit_header (txHeader );
256- // it looks like some boards don't have RFO pin connected to the antenna
257- tx .sx127x_tx_set_pa_config (new PaConfig (sx127x_pa_pin_t .SX127X_PA_PIN_BOOST , 4 ));
258- tx .sx127x_lora_reset_fifo ();
259- tx .sx127x_lora_tx_set_for_transmission ("CAFE" );
260- tx .tx (sx127x_modulation_t .SX127X_MODULATION_LORA );
261- }
262-
263271 public static void assertFrames (Sx127x device , String ... framesStr ) {
264272 List <sx127x_frame_t > frames = LoraTest .pullFrames (device , framesStr .length );
265273 assertEquals (framesStr .length , frames .size ());
@@ -285,11 +293,12 @@ public static List<sx127x_frame_t> pullFrames(Sx127x device, int expectedCount)
285293 }
286294 return result ;
287295 }
288-
296+
289297 public static String createRandom (int length ) {
290298 StringBuilder result = new StringBuilder ();
299+ Random r = new Random (System .currentTimeMillis ());
291300 for (int i = 0 ; i < length ; i ++) {
292- result .append (String .format ("%02x" , i % 255 ));
301+ result .append (String .format ("%02x" , ( byte ) ( r . nextInt () % 255 ) ));
293302 }
294303 return result .toString ().toUpperCase ();
295304 }
0 commit comments