lriot  2.1.0.0
lriot.h
Go to the documentation of this file.
1 /****************************************************************************
2 ** Copyright (C) 2020 MikroElektronika d.o.o.
3 ** Contact: https://www.mikroe.com/contact
4 **
5 ** Permission is hereby granted, free of charge, to any person obtaining a copy
6 ** of this software and associated documentation files (the "Software"), to deal
7 ** in the Software without restriction, including without limitation the rights
8 ** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 ** copies of the Software, and to permit persons to whom the Software is
10 ** furnished to do so, subject to the following conditions:
11 ** The above copyright notice and this permission notice shall be
12 ** included in all copies or substantial portions of the Software.
13 **
14 ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15 ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
16 ** OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
17 ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
18 ** DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
19 ** OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
20 ** USE OR OTHER DEALINGS IN THE SOFTWARE.
21 ****************************************************************************/
22 
28 #ifndef LRIOT_H
29 #define LRIOT_H
30 
31 #ifdef __cplusplus
32 extern "C"{
33 #endif
34 
35 #include "mikrosdk_version.h"
36 
37 #ifdef __GNUC__
38 #if mikroSDK_GET_VERSION < 20800ul
39 #include "rcu_delays.h"
40 #else
41 #include "delays.h"
42 #endif
43 #endif
44 
45 #include "drv_digital_out.h"
46 #include "drv_digital_in.h"
47 #include "drv_spi_master.h"
48 #include "spi_specifics.h"
50 #include "common/lr1110_types.h"
61 
82 #define LRIOT_TEMP_INT_VREF 1.35
83 #define LRIOT_TEMP_VOLTAGE_AT_25C 0.7295
84 #define LRIOT_TEMP_RESOLUTION 2047.0
85 #define LRIOT_TEMP_NOMINAL 25
86 #define LRIOT_TEMP_SLOPE -1.7
87 #define LRIOT_TEMP_SLOPE_DIVIDEND 1000.0
88 
93 #define LRIOT_TCXO_DELAY_2SEC 0xFFFA
94 
99 #define LRIOT_GNSS_SCAN_MAX_SATELLITES 16
100 #define LRIOT_GNSS_SCAN_RESULTS_BUF_LEN 256
101 #define LRIOT_GNSS_SCAN_DISPLAY_ALL 0
102 
107 #define LRIOT_WIFI_SCAN_MAX_RESULTS 12
108 #define LRIOT_WIFI_SCAN_DISPLAY_ALL 0
109 
114 #define LRIOT_LORA_PKT_PAYLOAD_LEN 64
115 #define LRIOT_LORA_DEFAULT_FREQ 868100000ul
116 
124 #define LRIOT_UPDATE_FIRMWARE 0
125 
130 #define LRIOT_TRANSCEIVER_FIRMWARE 0
131 #define LRIOT_MODEM_FIRMWARE 1
132 #define LRIOT_FIRMWARE_SELECTOR LRIOT_TRANSCEIVER_FIRMWARE
133 
142 #define LRIOT_SET_DATA_SAMPLE_EDGE SET_SPI_DATA_SAMPLE_EDGE
143 #define LRIOT_SET_DATA_SAMPLE_MIDDLE SET_SPI_DATA_SAMPLE_MIDDLE
144  // lriot_set
146 
161 #define LRIOT_MAP_MIKROBUS( cfg, mikrobus ) \
162  cfg.miso = MIKROBUS( mikrobus, MIKROBUS_MISO ); \
163  cfg.mosi = MIKROBUS( mikrobus, MIKROBUS_MOSI ); \
164  cfg.sck = MIKROBUS( mikrobus, MIKROBUS_SCK ); \
165  cfg.cs = MIKROBUS( mikrobus, MIKROBUS_CS ); \
166  cfg.rst = MIKROBUS( mikrobus, MIKROBUS_RST ); \
167  cfg.bsy = MIKROBUS( mikrobus, MIKROBUS_PWM ); \
168  cfg.int_pin = MIKROBUS( mikrobus, MIKROBUS_INT )
169  // lriot_map // lriot
172 
177 typedef struct
178 {
179 #if ( LRIOT_FIRMWARE_SELECTOR == LRIOT_TRANSCEIVE_FIRMWARE )
183 #else
185  lr1110_modem_wifi_channel_t channels;
186  lr1110_modem_wifi_mode_t scan_mode;
187  lr1110_modem_wifi_result_format_t result_format;
188 #endif
189  uint8_t max_results;
191  uint16_t timeout_in_ms;
193 
195 
200 typedef struct
201 {
202 #if ( LRIOT_FIRMWARE_SELECTOR == LRIOT_TRANSCEIVE_FIRMWARE )
205 #else
208 #endif
210 
212 
217 typedef struct
218 {
219  uint8_t num_satellites;
220 #if ( LRIOT_FIRMWARE_SELECTOR == LRIOT_TRANSCEIVE_FIRMWARE )
222 #else
224 #endif
225  uint8_t scan_results[ LRIOT_GNSS_SCAN_RESULTS_BUF_LEN ];
227  uint8_t destination_id;
228 
230 
235 typedef struct
236 {
237 #if ( LRIOT_FIRMWARE_SELECTOR == LRIOT_TRANSCEIVE_FIRMWARE )
242 #else
243  lr1110_modem_version_t version;
244  lr1110_modem_chip_eui_t chip_eui;
245  lr1110_modem_join_eui_t join_eui;
246  lr1110_modem_dev_eui_t dev_eui;
247  uint32_t pin;
248 #endif
249 
251 
256 typedef struct
257 {
259  int8_t snr_pkt_in_db;
263 
268 typedef struct
269 {
270  // Output pins
271  digital_out_t rst;
273  // Input pins
274  digital_in_t bsy;
275  digital_in_t int_pin;
277  pin_name_t bsy_pin_name;
279  // Modules
280  spi_master_t spi;
282  pin_name_t chip_select;
286 } lriot_t;
287 
292 typedef struct
293 {
294  // Communication gpio pins
295  pin_name_t miso;
296  pin_name_t mosi;
297  pin_name_t sck;
298  pin_name_t cs;
300  // Additional gpio pins
301  pin_name_t rst;
302  pin_name_t bsy;
303  pin_name_t int_pin;
305  // static variable
306  uint32_t spi_speed;
307  spi_master_mode_t spi_mode;
308  spi_master_chip_select_polarity_t cs_polarity;
310 } lriot_cfg_t;
311 
316 typedef enum
317 {
318  LRIOT_OK = 0,
319  LRIOT_ERROR = -1
320 
322 
339 
353 err_t lriot_init ( lriot_t *ctx, lriot_cfg_t *cfg );
354 
367 err_t lriot_default_cfg ( lriot_t *ctx );
368 
378 void lriot_set_rst_pin ( lriot_t *ctx, uint8_t state );
379 
388 uint8_t lriot_get_busy_pin ( lriot_t *ctx );
389 
398 uint8_t lriot_get_int_pin ( lriot_t *ctx );
399 
413 
414 #if ( LRIOT_FIRMWARE_SELECTOR == LRIOT_TRANSCEIVE_FIRMWARE )
415 
426 err_t lriot_get_temperature ( lriot_t *ctx, float *temperature );
427 
439 err_t lriot_send_lora_message ( lriot_t *ctx, uint8_t *message );
440 
454 err_t lriot_read_lora_message ( lriot_t *ctx, lriot_lora_packet_status_t *pkt_status, uint8_t *message );
455 #endif
456 
470 
484 
497 
498 #ifdef __cplusplus
499 }
500 #endif
501 #endif // LRIOT_H
502  // lriot
504 
505 // ------------------------------------------------------------------------ END
lriot_lora_packet_status_t::snr_pkt_in_db
int8_t snr_pkt_in_db
Definition: lriot.h:259
lriot_cfg_t::cs
pin_name_t cs
Definition: lriot.h:298
lriot_gnss_scan_results_t::num_satellites
uint8_t num_satellites
Definition: lriot.h:219
lr1110_modem_gnss_types.h
GNSS scan driver types definition for LR1110 modem.
lr1110_wifi_signal_type_scan_t
lr1110_wifi_signal_type_scan_t
Wi-Fi signal type for passive scanning configuration.
Definition: lr1110_wifi_types.h:227
lriot_t::bsy_pin_name
pin_name_t bsy_pin_name
Definition: lriot.h:277
LRIOT_ERROR
@ LRIOT_ERROR
Definition: lriot.h:319
lriot_lora_packet_status_t::rssi_pkt_in_dbm
int8_t rssi_pkt_in_dbm
Definition: lriot.h:258
lr1110_modem_gnss_detected_satellite_t
Detected satellite structure.
Definition: lr1110_modem_gnss_types.h:226
lriot_cfg_t::cs_polarity
spi_master_chip_select_polarity_t cs_polarity
Definition: lriot.h:308
lr1110_modem_wifi_types.h
Wi-Fi passive scan driver types definition for LR1110 modem.
lr1110_modem_wifi_cumulative_timings_t
Cumulative timings.
Definition: lr1110_modem_wifi_types.h:236
lriot_wifi_settings_t::timeout_in_ms
uint16_t timeout_in_ms
Definition: lriot.h:191
lriot_t
LR IoT Click context object.
Definition: lriot.h:269
lriot_cfg_t::rst
pin_name_t rst
Definition: lriot.h:301
lriot_gnss_scan_results_t
LR IoT GNSS Scan results object.
Definition: lriot.h:218
lr1110_wifi_extended_full_result_t
Extended full result structure.
Definition: lr1110_wifi_types.h:340
lriot_wifi_settings_t::signal_type
lr1110_wifi_signal_type_scan_t signal_type
Definition: lriot.h:180
lriot_default_cfg
err_t lriot_default_cfg(lriot_t *ctx)
LR IoT default configuration function.
lr1110_radio_types.h
Radio driver types for LR1110.
lriot_gnss_scan_results_t::destination_id
uint8_t destination_id
Definition: lriot.h:227
lr1110_modem_lorawan_types.h
Modem lorawan types for LR1110.
spi_specifics.h
This file contains SPI specific macros, functions, etc.
lriot_cfg_t::mosi
pin_name_t mosi
Definition: lriot.h:296
lriot_t::bsy
digital_in_t bsy
Definition: lriot.h:274
lriot_wifi_scan_results_t
LR IoT WiFi Scan results object.
Definition: lriot.h:201
lriot_chip_info_t::version
lr1110_system_version_t version
Definition: lriot.h:238
lr1110_modem_wifi_result_format_t
lr1110_modem_wifi_result_format_t
Definition: lr1110_modem_wifi_types.h:199
lr1110_bootloader_types.h
Bootloader driver types for LR1110.
lr1110_modem_version_t
LR1110 modem version structure.
Definition: lr1110_modem_lorawan_types.h:487
lriot_get_int_pin
uint8_t lriot_get_int_pin(lriot_t *ctx)
LR IoT get int pin function.
lr1110_system_join_eui_t
uint8_t lr1110_system_join_eui_t[LR1110_SYSTEM_JOIN_EUI_LENGTH]
Fixed-length array to store a joinEUI.
Definition: lr1110_system_types.h:87
lr1110_system_uid_t
uint8_t lr1110_system_uid_t[LR1110_SYSTEM_UID_LENGTH]
Fixed-length array to store a UID.
Definition: lr1110_system_types.h:82
lr1110_wifi_mode_t
lr1110_wifi_mode_t
Wi-Fi capture mode.
Definition: lr1110_wifi_types.h:271
lriot_t::rst
digital_out_t rst
Definition: lriot.h:271
LRIOT_OK
@ LRIOT_OK
Definition: lriot.h:318
lriot_wifi_settings_t::nb_scan_per_channel
uint8_t nb_scan_per_channel
Definition: lriot.h:190
lriot_lora_packet_status_t
LR IoT LoRa packet status object.
Definition: lriot.h:257
lriot_get_busy_pin
uint8_t lriot_get_busy_pin(lriot_t *ctx)
LR IoT get busy pin function.
lriot_wifi_settings_t
LR IoT WiFi settings object.
Definition: lriot.h:178
lriot_cfg_t::bsy
pin_name_t bsy
Definition: lriot.h:302
lriot_wifi_settings_t::max_results
uint8_t max_results
Definition: lriot.h:189
lr1110_modem_wifi_mode_t
lr1110_modem_wifi_mode_t
Wi-Fi capture mode.
Definition: lr1110_modem_wifi_types.h:186
lriot_get_wifi_scan_results
err_t lriot_get_wifi_scan_results(lriot_t *ctx, lriot_wifi_scan_results_t *results)
LR IoT get wifi scan results function.
lriot_gnss_scan_results_t::scan_results_len
uint16_t scan_results_len
Definition: lriot.h:226
lriot_lora_packet_status_t::signal_rssi_pkt_in_dbm
int8_t signal_rssi_pkt_in_dbm
Definition: lriot.h:260
lriot_cfg_t
LR IoT Click configuration object.
Definition: lriot.h:293
lr1110_gnss_detected_satellite_s
Detected SV structure.
Definition: lr1110_gnss_types.h:264
lr1110_modem_wifi_extended_full_result_t
Extended full result structure.
Definition: lr1110_modem_wifi_types.h:288
lriot_t::int_pin
digital_in_t int_pin
Definition: lriot.h:275
LRIOT_GNSS_SCAN_MAX_SATELLITES
#define LRIOT_GNSS_SCAN_MAX_SATELLITES
LR IoT GNSS scan macros.
Definition: lriot.h:99
lriot_cfg_t::miso
pin_name_t miso
Definition: lriot.h:295
lriot_wifi_scan_results_t::timings
lr1110_wifi_cumulative_timings_t timings
Definition: lriot.h:204
lriot_send_lora_message
err_t lriot_send_lora_message(lriot_t *ctx, uint8_t *message)
LR IoT send lora message function.
lriot_get_temperature
err_t lriot_get_temperature(lriot_t *ctx, float *temperature)
LR IoT get temperature function.
lr1110_modem_chip_eui_t
uint8_t lr1110_modem_chip_eui_t[LR1110_MODEM_CHIP_EUI_LENGTH]
Chip EUI type.
Definition: lr1110_modem_lorawan_types.h:543
lriot_init
err_t lriot_init(lriot_t *ctx, lriot_cfg_t *cfg)
LR IoT initialization function.
lriot_wifi_settings_t::scan_mode
lr1110_wifi_mode_t scan_mode
Definition: lriot.h:182
lr1110_modem_system_types.h
System driver types for LR1110 modem.
LRIOT_GNSS_SCAN_RESULTS_BUF_LEN
#define LRIOT_GNSS_SCAN_RESULTS_BUF_LEN
Definition: lriot.h:100
lriot_cfg_t::spi_speed
uint32_t spi_speed
Definition: lriot.h:306
lr1110_wifi_channel_mask_t
uint16_t lr1110_wifi_channel_mask_t
Type to store a Wi-Fi channel mask.
Definition: lr1110_wifi_types.h:103
lriot_t::spi
spi_master_t spi
Definition: lriot.h:280
lr1110_modem_wifi_signal_type_scan_t
lr1110_modem_wifi_signal_type_scan_t
Wi-Fi signal type for passive scanning configuration.
Definition: lr1110_modem_wifi_types.h:144
lriot_wifi_settings_t::abort_on_timeout
bool abort_on_timeout
Definition: lriot.h:192
lriot_chip_info_t
LR IoT chip info object.
Definition: lriot.h:236
lriot_wifi_scan_results_t::num_wifi_results
uint8_t num_wifi_results
Definition: lriot.h:209
lriot_chip_info_t::join_eui
lr1110_system_join_eui_t join_eui
Definition: lriot.h:240
lr1110_modem_dev_eui_t
uint8_t lr1110_modem_dev_eui_t[LR1110_MODEM_DEV_EUI_LENGTH]
Device EUI type.
Definition: lr1110_modem_lorawan_types.h:553
lr1110_types.h
Type definitions for LR1110.
lriot_read_lora_message
err_t lriot_read_lora_message(lriot_t *ctx, lriot_lora_packet_status_t *pkt_status, uint8_t *message)
LR IoT read lora message function.
lriot_cfg_t::sck
pin_name_t sck
Definition: lriot.h:297
LRIOT_WIFI_SCAN_MAX_RESULTS
#define LRIOT_WIFI_SCAN_MAX_RESULTS
LR IoT WiFi scan macros.
Definition: lriot.h:107
lriot_t::chip_select
pin_name_t chip_select
Definition: lriot.h:282
lriot_chip_info_t::uid
lr1110_system_uid_t uid
Definition: lriot.h:239
lriot_get_gnss_scan_results
err_t lriot_get_gnss_scan_results(lriot_t *ctx, lriot_gnss_scan_results_t *results)
LR IoT get gnss scan results function.
lriot_cfg_t::int_pin
pin_name_t int_pin
Definition: lriot.h:303
lr1110_gnss_types.h
GNSS scan driver types for LR1110.
lriot_return_value_t
lriot_return_value_t
LR IoT Click return value data.
Definition: lriot.h:317
lr1110_system_version_s
Version structure definition.
Definition: lr1110_system_types.h:301
lriot_set_rst_pin
void lriot_set_rst_pin(lriot_t *ctx, uint8_t state)
LR IoT set rst pin function.
lriot_update_firmware
err_t lriot_update_firmware(lriot_t *ctx)
LR IoT update firmware function.
lr1110_modem_wifi_channel_t
lr1110_modem_wifi_channel_t
Wi-Fi Channels index.
Definition: lr1110_modem_wifi_types.h:115
lriot_cfg_setup
void lriot_cfg_setup(lriot_cfg_t *cfg)
LR IoT configuration object setup function.
lriot_cfg_t::spi_mode
spi_master_mode_t spi_mode
Definition: lriot.h:307
lriot_wifi_settings_t::channels
lr1110_wifi_channel_mask_t channels
Definition: lriot.h:181
lriot_get_chip_info
err_t lriot_get_chip_info(lriot_t *ctx, lriot_chip_info_t *info)
LR IoT get chip info function.
lr1110_system_pin_t
uint8_t lr1110_system_pin_t[LR1110_SYSTEM_PIN_LENGTH]
Fixed-length array to store a PIN.
Definition: lr1110_system_types.h:92
lr1110_wifi_types.h
Wi-Fi passive scan driver types for LR1110.
lr1110_wifi_cumulative_timings_s
Cumulative timings.
Definition: lr1110_wifi_types.h:292
lriot_t::wifi_settings
lriot_wifi_settings_t wifi_settings
Definition: lriot.h:284
lriot_chip_info_t::pin
lr1110_system_pin_t pin
Definition: lriot.h:241
lr1110_modem_helper_types.h
helper functions types definition for LR1110 modem
lr1110_crypto_engine_types.h
Cryptographic engine driver types for LR1110.
lr1110_system_types.h
System driver types for LR1110.
lr1110_modem_join_eui_t
uint8_t lr1110_modem_join_eui_t[LR1110_MODEM_JOIN_EUI_LENGTH]
Join EUI type.
Definition: lr1110_modem_lorawan_types.h:548