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 "drv_digital_out.h"
36 #include "drv_digital_in.h"
37 #include "drv_spi_master.h"
38 #include "spi_specifics.h"
40 #include "common/lr1110_types.h"
51 
72 #define LRIOT_TEMP_INT_VREF 1.35
73 #define LRIOT_TEMP_VOLTAGE_AT_25C 0.7295
74 #define LRIOT_TEMP_RESOLUTION 2047.0
75 #define LRIOT_TEMP_NOMINAL 25
76 #define LRIOT_TEMP_SLOPE -1.7
77 #define LRIOT_TEMP_SLOPE_DIVIDEND 1000.0
78 
83 #define LRIOT_TCXO_DELAY_2SEC 0xFFFA
84 
89 #define LRIOT_GNSS_SCAN_MAX_SATELLITES 16
90 #define LRIOT_GNSS_SCAN_RESULTS_BUF_LEN 256
91 #define LRIOT_GNSS_SCAN_DISPLAY_ALL 0
92 
97 #define LRIOT_WIFI_SCAN_MAX_RESULTS 12
98 #define LRIOT_WIFI_SCAN_DISPLAY_ALL 0
99 
104 #define LRIOT_LORA_PKT_PAYLOAD_LEN 64
105 #define LRIOT_LORA_DEFAULT_FREQ 868100000ul
106 
114 #define LRIOT_UPDATE_FIRMWARE 0
115 
120 #define LRIOT_TRANSCEIVER_FIRMWARE 0
121 #define LRIOT_MODEM_FIRMWARE 1
122 #define LRIOT_FIRMWARE_SELECTOR LRIOT_TRANSCEIVER_FIRMWARE
123 
132 #define LRIOT_SET_DATA_SAMPLE_EDGE SET_SPI_DATA_SAMPLE_EDGE
133 #define LRIOT_SET_DATA_SAMPLE_MIDDLE SET_SPI_DATA_SAMPLE_MIDDLE
134  // lriot_set
136 
151 #define LRIOT_MAP_MIKROBUS( cfg, mikrobus ) \
152  cfg.miso = MIKROBUS( mikrobus, MIKROBUS_MISO ); \
153  cfg.mosi = MIKROBUS( mikrobus, MIKROBUS_MOSI ); \
154  cfg.sck = MIKROBUS( mikrobus, MIKROBUS_SCK ); \
155  cfg.cs = MIKROBUS( mikrobus, MIKROBUS_CS ); \
156  cfg.rst = MIKROBUS( mikrobus, MIKROBUS_RST ); \
157  cfg.bsy = MIKROBUS( mikrobus, MIKROBUS_PWM ); \
158  cfg.int_pin = MIKROBUS( mikrobus, MIKROBUS_INT )
159  // lriot_map // lriot
162 
167 typedef struct
168 {
169 #if ( LRIOT_FIRMWARE_SELECTOR == LRIOT_TRANSCEIVE_FIRMWARE )
173 #else
175  lr1110_modem_wifi_channel_t channels;
176  lr1110_modem_wifi_mode_t scan_mode;
177  lr1110_modem_wifi_result_format_t result_format;
178 #endif
179  uint8_t max_results;
181  uint16_t timeout_in_ms;
183 
185 
190 typedef struct
191 {
192 #if ( LRIOT_FIRMWARE_SELECTOR == LRIOT_TRANSCEIVE_FIRMWARE )
195 #else
198 #endif
200 
202 
207 typedef struct
208 {
209  uint8_t num_satellites;
210 #if ( LRIOT_FIRMWARE_SELECTOR == LRIOT_TRANSCEIVE_FIRMWARE )
212 #else
214 #endif
215  uint8_t scan_results[ LRIOT_GNSS_SCAN_RESULTS_BUF_LEN ];
217  uint8_t destination_id;
218 
220 
225 typedef struct
226 {
227 #if ( LRIOT_FIRMWARE_SELECTOR == LRIOT_TRANSCEIVE_FIRMWARE )
232 #else
233  lr1110_modem_version_t version;
234  lr1110_modem_chip_eui_t chip_eui;
235  lr1110_modem_join_eui_t join_eui;
236  lr1110_modem_dev_eui_t dev_eui;
237  uint32_t pin;
238 #endif
239 
241 
246 typedef struct
247 {
249  int8_t snr_pkt_in_db;
253 
258 typedef struct
259 {
260  // Output pins
261  digital_out_t rst;
263  // Input pins
264  digital_in_t bsy;
265  digital_in_t int_pin;
267  pin_name_t bsy_pin_name;
269  // Modules
270  spi_master_t spi;
272  pin_name_t chip_select;
276 } lriot_t;
277 
282 typedef struct
283 {
284  // Communication gpio pins
285  pin_name_t miso;
286  pin_name_t mosi;
287  pin_name_t sck;
288  pin_name_t cs;
290  // Additional gpio pins
291  pin_name_t rst;
292  pin_name_t bsy;
293  pin_name_t int_pin;
295  // static variable
296  uint32_t spi_speed;
297  spi_master_mode_t spi_mode;
298  spi_master_chip_select_polarity_t cs_polarity;
300 } lriot_cfg_t;
301 
306 typedef enum
307 {
308  LRIOT_OK = 0,
309  LRIOT_ERROR = -1
310 
312 
329 
343 err_t lriot_init ( lriot_t *ctx, lriot_cfg_t *cfg );
344 
357 err_t lriot_default_cfg ( lriot_t *ctx );
358 
368 void lriot_set_rst_pin ( lriot_t *ctx, uint8_t state );
369 
378 uint8_t lriot_get_busy_pin ( lriot_t *ctx );
379 
388 uint8_t lriot_get_int_pin ( lriot_t *ctx );
389 
403 
404 #if ( LRIOT_FIRMWARE_SELECTOR == LRIOT_TRANSCEIVE_FIRMWARE )
405 
416 err_t lriot_get_temperature ( lriot_t *ctx, float *temperature );
417 
429 err_t lriot_send_lora_message ( lriot_t *ctx, uint8_t *message );
430 
444 err_t lriot_read_lora_message ( lriot_t *ctx, lriot_lora_packet_status_t *pkt_status, uint8_t *message );
445 #endif
446 
460 
474 
487 
488 #ifdef __cplusplus
489 }
490 #endif
491 #endif // LRIOT_H
492  // lriot
494 
495 // ------------------------------------------------------------------------ END
lriot_lora_packet_status_t::snr_pkt_in_db
int8_t snr_pkt_in_db
Definition: lriot.h:249
lriot_cfg_t::cs
pin_name_t cs
Definition: lriot.h:288
lriot_gnss_scan_results_t::num_satellites
uint8_t num_satellites
Definition: lriot.h:209
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:267
LRIOT_ERROR
@ LRIOT_ERROR
Definition: lriot.h:309
lriot_lora_packet_status_t::rssi_pkt_in_dbm
int8_t rssi_pkt_in_dbm
Definition: lriot.h:248
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:298
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:181
lriot_t
LR IoT Click context object.
Definition: lriot.h:259
lriot_cfg_t::rst
pin_name_t rst
Definition: lriot.h:291
lriot_gnss_scan_results_t
LR IoT GNSS Scan results object.
Definition: lriot.h:208
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:170
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:217
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:286
lriot_t::bsy
digital_in_t bsy
Definition: lriot.h:264
lriot_wifi_scan_results_t
LR IoT WiFi Scan results object.
Definition: lriot.h:191
lriot_chip_info_t::version
lr1110_system_version_t version
Definition: lriot.h:228
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:261
LRIOT_OK
@ LRIOT_OK
Definition: lriot.h:308
lriot_wifi_settings_t::nb_scan_per_channel
uint8_t nb_scan_per_channel
Definition: lriot.h:180
lriot_lora_packet_status_t
LR IoT LoRa packet status object.
Definition: lriot.h:247
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:168
lriot_cfg_t::bsy
pin_name_t bsy
Definition: lriot.h:292
lriot_wifi_settings_t::max_results
uint8_t max_results
Definition: lriot.h:179
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:216
lriot_lora_packet_status_t::signal_rssi_pkt_in_dbm
int8_t signal_rssi_pkt_in_dbm
Definition: lriot.h:250
lriot_cfg_t
LR IoT Click configuration object.
Definition: lriot.h:283
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:265
LRIOT_GNSS_SCAN_MAX_SATELLITES
#define LRIOT_GNSS_SCAN_MAX_SATELLITES
LR IoT GNSS scan macros.
Definition: lriot.h:89
lriot_cfg_t::miso
pin_name_t miso
Definition: lriot.h:285
lriot_wifi_scan_results_t::timings
lr1110_wifi_cumulative_timings_t timings
Definition: lriot.h:194
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:172
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:90
lriot_cfg_t::spi_speed
uint32_t spi_speed
Definition: lriot.h:296
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:270
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:182
lriot_chip_info_t
LR IoT chip info object.
Definition: lriot.h:226
lriot_wifi_scan_results_t::num_wifi_results
uint8_t num_wifi_results
Definition: lriot.h:199
lriot_chip_info_t::join_eui
lr1110_system_join_eui_t join_eui
Definition: lriot.h:230
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:287
LRIOT_WIFI_SCAN_MAX_RESULTS
#define LRIOT_WIFI_SCAN_MAX_RESULTS
LR IoT WiFi scan macros.
Definition: lriot.h:97
lriot_t::chip_select
pin_name_t chip_select
Definition: lriot.h:272
lriot_chip_info_t::uid
lr1110_system_uid_t uid
Definition: lriot.h:229
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:293
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:307
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:297
lriot_wifi_settings_t::channels
lr1110_wifi_channel_mask_t channels
Definition: lriot.h:171
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:274
lriot_chip_info_t::pin
lr1110_system_pin_t pin
Definition: lriot.h:231
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