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 
39 #ifdef PREINIT_SUPPORTED
40 #include "preinit.h"
41 #endif
42 
43 #ifdef MikroCCoreVersion
44  #if MikroCCoreVersion >= 1
45  #include "delays.h"
46  #endif
47 #endif
48 
49 #include "drv_digital_out.h"
50 #include "drv_digital_in.h"
51 #include "drv_spi_master.h"
52 #include "spi_specifics.h"
54 #include "common/lr1110_types.h"
65 
86 #define LRIOT_TEMP_INT_VREF 1.35
87 #define LRIOT_TEMP_VOLTAGE_AT_25C 0.7295
88 #define LRIOT_TEMP_RESOLUTION 2047.0
89 #define LRIOT_TEMP_NOMINAL 25
90 #define LRIOT_TEMP_SLOPE -1.7
91 #define LRIOT_TEMP_SLOPE_DIVIDEND 1000.0
92 
97 #define LRIOT_TCXO_DELAY_2SEC 0xFFFA
98 
103 #define LRIOT_GNSS_SCAN_MAX_SATELLITES 16
104 #define LRIOT_GNSS_SCAN_RESULTS_BUF_LEN 256
105 #define LRIOT_GNSS_SCAN_DISPLAY_ALL 0
106 
111 #define LRIOT_WIFI_SCAN_MAX_RESULTS 12
112 #define LRIOT_WIFI_SCAN_DISPLAY_ALL 0
113 
118 #define LRIOT_LORA_PKT_PAYLOAD_LEN 64
119 #define LRIOT_LORA_DEFAULT_FREQ 868100000ul
120 
128 #define LRIOT_UPDATE_FIRMWARE 0
129 
134 #define LRIOT_TRANSCEIVER_FIRMWARE 0
135 #define LRIOT_MODEM_FIRMWARE 1
136 #define LRIOT_FIRMWARE_SELECTOR LRIOT_TRANSCEIVER_FIRMWARE
137 
146 #define LRIOT_SET_DATA_SAMPLE_EDGE SET_SPI_DATA_SAMPLE_EDGE
147 #define LRIOT_SET_DATA_SAMPLE_MIDDLE SET_SPI_DATA_SAMPLE_MIDDLE
148  // lriot_set
150 
165 #define LRIOT_MAP_MIKROBUS( cfg, mikrobus ) \
166  cfg.miso = MIKROBUS( mikrobus, MIKROBUS_MISO ); \
167  cfg.mosi = MIKROBUS( mikrobus, MIKROBUS_MOSI ); \
168  cfg.sck = MIKROBUS( mikrobus, MIKROBUS_SCK ); \
169  cfg.cs = MIKROBUS( mikrobus, MIKROBUS_CS ); \
170  cfg.rst = MIKROBUS( mikrobus, MIKROBUS_RST ); \
171  cfg.bsy = MIKROBUS( mikrobus, MIKROBUS_PWM ); \
172  cfg.int_pin = MIKROBUS( mikrobus, MIKROBUS_INT )
173  // lriot_map // lriot
176 
181 typedef struct
182 {
183 #if ( LRIOT_FIRMWARE_SELECTOR == LRIOT_TRANSCEIVE_FIRMWARE )
187 #else
189  lr1110_modem_wifi_channel_t channels;
190  lr1110_modem_wifi_mode_t scan_mode;
191  lr1110_modem_wifi_result_format_t result_format;
192 #endif
193  uint8_t max_results;
195  uint16_t timeout_in_ms;
197 
199 
204 typedef struct
205 {
206 #if ( LRIOT_FIRMWARE_SELECTOR == LRIOT_TRANSCEIVE_FIRMWARE )
209 #else
212 #endif
214 
216 
221 typedef struct
222 {
223  uint8_t num_satellites;
224 #if ( LRIOT_FIRMWARE_SELECTOR == LRIOT_TRANSCEIVE_FIRMWARE )
226 #else
228 #endif
229  uint8_t scan_results[ LRIOT_GNSS_SCAN_RESULTS_BUF_LEN ];
231  uint8_t destination_id;
232 
234 
239 typedef struct
240 {
241 #if ( LRIOT_FIRMWARE_SELECTOR == LRIOT_TRANSCEIVE_FIRMWARE )
246 #else
247  lr1110_modem_version_t version;
248  lr1110_modem_chip_eui_t chip_eui;
249  lr1110_modem_join_eui_t join_eui;
250  lr1110_modem_dev_eui_t dev_eui;
251  uint32_t pin;
252 #endif
253 
255 
260 typedef struct
261 {
263  int8_t snr_pkt_in_db;
267 
272 typedef struct
273 {
274  // Output pins
275  digital_out_t rst;
277  // Input pins
278  digital_in_t bsy;
279  digital_in_t int_pin;
281  pin_name_t bsy_pin_name;
283  // Modules
284  spi_master_t spi;
286  pin_name_t chip_select;
290 } lriot_t;
291 
296 typedef struct
297 {
298  // Communication gpio pins
299  pin_name_t miso;
300  pin_name_t mosi;
301  pin_name_t sck;
302  pin_name_t cs;
304  // Additional gpio pins
305  pin_name_t rst;
306  pin_name_t bsy;
307  pin_name_t int_pin;
309  // static variable
310  uint32_t spi_speed;
311  spi_master_mode_t spi_mode;
312  spi_master_chip_select_polarity_t cs_polarity;
314 } lriot_cfg_t;
315 
320 typedef enum
321 {
322  LRIOT_OK = 0,
323  LRIOT_ERROR = -1
324 
326 
343 
357 err_t lriot_init ( lriot_t *ctx, lriot_cfg_t *cfg );
358 
371 err_t lriot_default_cfg ( lriot_t *ctx );
372 
382 void lriot_set_rst_pin ( lriot_t *ctx, uint8_t state );
383 
392 uint8_t lriot_get_busy_pin ( lriot_t *ctx );
393 
402 uint8_t lriot_get_int_pin ( lriot_t *ctx );
403 
417 
418 #if ( LRIOT_FIRMWARE_SELECTOR == LRIOT_TRANSCEIVE_FIRMWARE )
419 
430 err_t lriot_get_temperature ( lriot_t *ctx, float *temperature );
431 
443 err_t lriot_send_lora_message ( lriot_t *ctx, uint8_t *message );
444 
458 err_t lriot_read_lora_message ( lriot_t *ctx, lriot_lora_packet_status_t *pkt_status, uint8_t *message );
459 #endif
460 
474 
488 
501 
502 #ifdef __cplusplus
503 }
504 #endif
505 #endif // LRIOT_H
506  // lriot
508 
509 // ------------------------------------------------------------------------ END
lriot_lora_packet_status_t::snr_pkt_in_db
int8_t snr_pkt_in_db
Definition: lriot.h:263
lriot_cfg_t::cs
pin_name_t cs
Definition: lriot.h:302
lriot_gnss_scan_results_t::num_satellites
uint8_t num_satellites
Definition: lriot.h:223
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:281
LRIOT_ERROR
@ LRIOT_ERROR
Definition: lriot.h:323
lriot_lora_packet_status_t::rssi_pkt_in_dbm
int8_t rssi_pkt_in_dbm
Definition: lriot.h:262
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:312
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:195
lriot_t
LR IoT Click context object.
Definition: lriot.h:273
lriot_cfg_t::rst
pin_name_t rst
Definition: lriot.h:305
lriot_gnss_scan_results_t
LR IoT GNSS Scan results object.
Definition: lriot.h:222
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:184
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:231
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:300
lriot_t::bsy
digital_in_t bsy
Definition: lriot.h:278
lriot_wifi_scan_results_t
LR IoT WiFi Scan results object.
Definition: lriot.h:205
lriot_chip_info_t::version
lr1110_system_version_t version
Definition: lriot.h:242
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:275
LRIOT_OK
@ LRIOT_OK
Definition: lriot.h:322
lriot_wifi_settings_t::nb_scan_per_channel
uint8_t nb_scan_per_channel
Definition: lriot.h:194
lriot_lora_packet_status_t
LR IoT LoRa packet status object.
Definition: lriot.h:261
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:182
lriot_cfg_t::bsy
pin_name_t bsy
Definition: lriot.h:306
lriot_wifi_settings_t::max_results
uint8_t max_results
Definition: lriot.h:193
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:230
lriot_lora_packet_status_t::signal_rssi_pkt_in_dbm
int8_t signal_rssi_pkt_in_dbm
Definition: lriot.h:264
lriot_cfg_t
LR IoT Click configuration object.
Definition: lriot.h:297
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:279
LRIOT_GNSS_SCAN_MAX_SATELLITES
#define LRIOT_GNSS_SCAN_MAX_SATELLITES
LR IoT GNSS scan macros.
Definition: lriot.h:103
lriot_cfg_t::miso
pin_name_t miso
Definition: lriot.h:299
lriot_wifi_scan_results_t::timings
lr1110_wifi_cumulative_timings_t timings
Definition: lriot.h:208
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:186
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:104
lriot_cfg_t::spi_speed
uint32_t spi_speed
Definition: lriot.h:310
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:284
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:196
lriot_chip_info_t
LR IoT chip info object.
Definition: lriot.h:240
lriot_wifi_scan_results_t::num_wifi_results
uint8_t num_wifi_results
Definition: lriot.h:213
lriot_chip_info_t::join_eui
lr1110_system_join_eui_t join_eui
Definition: lriot.h:244
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:301
LRIOT_WIFI_SCAN_MAX_RESULTS
#define LRIOT_WIFI_SCAN_MAX_RESULTS
LR IoT WiFi scan macros.
Definition: lriot.h:111
lriot_t::chip_select
pin_name_t chip_select
Definition: lriot.h:286
lriot_chip_info_t::uid
lr1110_system_uid_t uid
Definition: lriot.h:243
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:307
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:321
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:311
lriot_wifi_settings_t::channels
lr1110_wifi_channel_mask_t channels
Definition: lriot.h:185
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:288
lriot_chip_info_t::pin
lr1110_system_pin_t pin
Definition: lriot.h:245
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